- 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 रिलीज़ नोट्स देखें
अभी कोई टिप्पणी नहीं है.