• Django 6.0 ने 20वें वर्ष में प्रवेश करते हुए templates, background tasks, सुरक्षा और email जैसे कोर क्षेत्रों में बड़ा सुधार करने वाली एक प्रमुख रिलीज दी है
  • Template partials फीचर से templates के अंदर code reuse आसान हो गया है और htmx जैसे टूल्स के साथ integration मजबूत हुई है
  • नया Tasks framework HTTP request-response चक्र के बाहर background tasks चलाने की सुविधा देता है
  • Content Security Policy (CSP) डिफ़ॉल्ट रूप से मौजूद है, जिससे XSS जैसी content injection attacks से बचाव आसान हो गया है
  • email API modernization, ORM सुधार और प्राथमिक कुंजी (primary key) विस्तार के साथ डेवलपर अनुभव और स्केलेबिलिटी में बड़ा सुधार हुआ है

Django 6.0 का अवलोकन

  • Django 6.0 Python web framework की नई रिलीज है, जो 20 साल की विकास-यात्रा को आगे बढ़ाती है
  • मुख्य बदलाव template, background task, security और email handling पर केंद्रित चार कोर क्षेत्रों के इर्द-गिर्द हैं
  • इसे समुदाय के कई contributors ने develop किया और आधिकारिक रिलीज़ नोट्स पर आधारित मुख्य सुधार सूचीबद्ध किए गए हैं

django-upgrade टूल

  • अगर कोई परियोजना Django 5.2 या उससे नीचे से Django 6.0 पर अपग्रेड कर रहा हो, तो django-upgrade टूल की मदद से code बदलना स्वचालित तरीके से किया जा सकता है
  • Django 6.0 से संबंधित 5 auto-fixer शामिल हैं, जो कुछ warnings को अपने-आप ठीक कर देते हैं

Template partials

  • टेम्पलेट पार्टियल डिफ़िनिशन ({% partialdef %}) फीचर जोड़ा गया है, जिससे टेम्पलेट में दोहराए गए code को कम करके reuse करना आसान होता है
    • एक ही template के अंदर define किए गए partial को कई बार call किया जा सकता है
    • inline विकल्प के साथ define करने के साथ-साथ तुरंत render भी किया जा सकता है
  • Partial rendering से केवल चुनिंदा partial को अलग से render किया जा सकता है
    • उदाहरण में htmx की मदद से view_count भाग को periodic तरीके से अपडेट किया गया है
    • URL में #partial_name जोड़ने से केवल वही भाग render होता है
  • यह फीचर Google Summer of Code के माध्यम से Django में जोड़ा गया और पहले के django-template-partials पैकेज से विकसित हुआ

Tasks फ्रेमवर्क

  • Django में नया Tasks framework जोड़ा गया है ताकि code को HTTP request-response cycle के बाहर execute किया जा सके
    • email भेजना, data processing और report generation जैसी asynchronous tasks के लिए उपयोगी
  • @task decorator से task define करें और Task.enqueue() से queue में add करें
  • default backends के रूप में development के लिए ImmediateBackend और DummyBackend उपलब्ध हैं,
    जबकि django-tasks पैकेज का DatabaseBackend इस्तेमाल करने पर SQL DB-based execution संभव होता है
  • db_worker command से task worker चलाया जाता है, और logs से status check किया जा सकता है
  • इस फीचर की शुरुआत Wagtail से हुई थी; DEP 0014 proposal के बाद इसे Django में merge किया गया

Content Security Policy (CSP) सपोर्ट

  • Django 6.0 में CSP standard बिल्ट-इन होने से XSS जैसी content injection attacks से सुरक्षा बेहतर होती है
    • ContentSecurityPolicyMiddleware को MIDDLEWARE में जोड़कर इसे enable करें
    • SECURE_CSP, SECURE_CSP_REPORT_ONLY सेटिंग्स से policy configure की जा सकती है
  • Nonce-based security अंतर्निहित है, जिससे <script> और <style> टैग में nonce="{{ csp_nonce }}" attribute जोड़ा जा सकता है
    • हर request पर random nonce generate होता है और केवल trusted resources ही execute होते हैं
  • CSP का प्रस्ताव 2004 में आया था, और तब से यह django-csp package के रूप में implement होता रहा; इस संस्करण में यह official बन गया है

Email API अपडेट

  • Django की email handling logic को Python 3.6 की modern email API पर migrate किया गया है
    • अंदर से email.message.EmailMessage class का इस्तेमाल होता है
    • मौजूदा send_mail() और EmailMessage interfaces को जस का तस रखा गया है
  • नया API bug कम करने, security बेहतर करने और inline attachment handling सुधारने में मदद करता है
  • MIMEPart object से HTML body में image जैसे inline attachments आसानी से add किए जा सकते हैं
  • यह बदलाव 2024 में प्रस्तावित होकर लगभग 8 महीने development के बाद merge हुआ

Email API में position-only argument प्रतिबंध

  • django.core.mail API में कुछ parameters को केवल keyword arguments के रूप में ही स्वीकार करने के लिए बदल दिया गया है
    • fail_silently जैसे optional arguments को positional के रूप में देने पर warning आती है
    • यह बदलाव readability और maintainability बेहतर करने के लिए किया गया है
  • django-upgrade के mail_api_kwargs fixer से इसे auto-fix किया जा सकता है

Shell auto-import विस्तार

  • Django 5.2 की auto model import सुविधा का विस्तार करते हुए अब
    settings, connection, models, functions, timezone को भी auto-import किया जाता है
  • ./manage.py shell -v 2 से auto import list देखी जा सकती है
  • इससे developer productivity बढ़ती है और बार-बार वही code लिखने की जरूरत घटती है

ORM सुधार: save() के बाद dynamic field refresh

  • GeneratedField या expression-based fields अब save() के बाद auto-update हो जाते हैं
    • SQLite, PostgreSQL, Oracle जैसे DB जहाँ RETURNING clause supported है, वहाँ तुरंत sync हो जाता है
    • MySQL और MariaDB में यह delayed loading के साथ update होता है
  • अतिरिक्त query के बिना तुरंत latest value available होने से efficiency बढ़ती है

Universal StringAgg aggregate function

  • StringAgg aggregate अब सभी database backends पर उपलब्ध है
    • यह input values को delimiter से join करके string वापस करता है
    • पहले यह PostgreSQL-specific था, लेकिन अब सीधे django.db.models से उपयोग हो सकता है
  • delimiter देने के लिए Value() expression उपयोग किया जा सकता है

BigAutoField को default बनाना

  • DEFAULT_AUTO_FIELD की default value अब BigAutoField कर दी गई है
    • 64-bit integer primary key use होने से Primary Key exhaustion की समस्या से बचाव होता है
    • नए projects में अलग सेटिंग किए बिना यह स्वतः लागू होता है
  • Django 3.2 में लाई गई सेटिंग को simplify करके boilerplate को कम किया गया है

Template सुधार

  • forloop.length variable जोड़ी गई है, जिससे loop की कुल लंबाई सीधे reference की जा सकती है
    • उदाहरण: {{ forloop.counter }}/{{ forloop.length }}
  • querystring टेम्पलेट टैग में सुधार
    • खाली mapping होने पर लिंक consistency के लिए ? auto-add होता है
    • कई mapping arguments merge करने का समर्थन जिससे query parameters combine करना आसान होता है

निष्कर्ष

  • Django 6.0 में कुल 174 contributors शामिल थे,
    और इसमें कई optimizations तथा bug fixes शामिल हैं
  • अपग्रेड करने पर security, maintainability और डेवलपर अनुभव (DX) व्यापक रूप से बेहतर हो जाते हैं
  • अतिरिक्त बदलावों के लिए official रिलीज़ नोट्स देखें

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.