Django 6 रिलीज़
(docs.djangoproject.com)- वेब फ्रेमवर्क Django का 6.0 संस्करण जारी हुआ है, जो Python 3.12+ का समर्थन करता है और सुरक्षा, टेम्पलेट तथा asynchronous फीचर्स में व्यापक सुधार लाता है
- Content Security Policy(CSP) डिफ़ॉल्ट रूप से बिल्ट-इन है, जिससे XSS जैसी कंटेंट इंजेक्शन अटैक से बचाव के लिए पॉलिसी सेट की जा सकती है
- Template Partials सुविधा से टेम्पलेट के अंदर पुन: प्रयोज्य भाग परिभाषित करना संभव हुआ, जिससे कोड मॉड्यूलरिटी बेहतर हुई
- Background Tasks framework जोड़ा गया है, जो request-response cycle के बाहर async tasks चलाने का समर्थन करता है
- Python का नया email API अपनाया गया, MariaDB 10.5 का समर्थन हटाया गया, और
DEFAULT_AUTO_FIELDका डिफ़ॉल्ट बदलना आदि के साथ संगतता समायोजन और आधुनिकीकरण किया गया
Python संगतता
- Django 6.0 Python 3.12, 3.13, 3.14 का समर्थन करता है और प्रत्येक सीरीज़ के केवल latest release को ही official support मिलता है
- Django 5.2.x Python 3.10 और 3.11 का अंतिम संस्करण है
- Django 6.0 के बाद third-party ऐप्स से Django 5.2 से पुराने संस्करणों का सपोर्ट हटाने की सलाह दी जाती है
प्रमुख नई सुविधाएँ
Content Security Policy(CSP) का समर्थन
- Django में CSP standard इन-बिल्ट है, जो XSS जैसे कंटेंट इंजेक्शन अटैक से सुरक्षा को मजबूत करता है
ContentSecurityPolicyMiddleware,csp()context processor औरSECURE_CSPसेटिंग के जरिए नीति परिभाषित की जा सकती है- Python डिक्शनरी आधारित सेटअप से स्पष्ट और सुरक्षित policy composition संभव है
SECURE_CSP_REPORT_ONLYसे monitor mode सेट किया जा सकता है- view स्तर पर policy बदलने या disable करने के लिए decorator उपलब्ध है
Template Partials
partialdefऔरpartialटैग जोड़े गए हैं, जिससे टेम्पलेट फ्रैगमेंट को परिभाषित कर दोबारा उपयोग किया जा सकता हैtemplate_name#partial_nameसिंटैक्स सेget_template(),render(),{% include %}आदि में सीधे संदर्भित किया जा सकता है- तीसरे-पक्ष पैकेज
django-template-partialsउपयोगकर्ताओं के लिए migration guide दी गई है
Background Tasks framework
- Django में async कार्य निष्पादन हेतु बिल्ट-इन framework जोड़ा गया है
- HTTP request-response cycle के बाहर email भेजना, data processing आदि चलाया जा सकता है
@taskडेकोरेटर से task define करें औरenqueue()से queue में डालें
- बैकएंड
TASKSसेटिंग से चुना जाता है, जिसमें development और testing के लिए दो default backends शामिल हैं - Django केवल task निर्माण और queuing संभालता है; वास्तविक execution के लिए external worker process की जरूरत होगी
Python का नया ईमेल API अपनाया गया
- Django का email handling अब Python 3.6+ का आधुनिक email API (
email.message.EmailMessage) उपयोग करता है - पुराने
SafeMIMEText,SafeMIMEMultipartclasses deprecated हो गए हैं EmailMessage.message()का return type अब Python काEmailMessageinstance है
विस्तृत सुधार
Admin
- Font Awesome Free 6.7.2 आइकन सेट लागू किया गया
AdminSite.password_change_formattribute से admin password change form को customize किया जा सकता हैmessages.DEBUGऔरmessages.INFOके लिए अलग icon और CSS style उपलब्ध हैं
Auth
- PBKDF2 hash iteration count 1,000,000 से बढ़कर 1,200,000 कर दिया गया
GIS
GEOSGeometry.hasmproperty से M dimension मौजूद है या नहीं, यह पता चलता हैRotatefunction से निर्दिष्ट angle पर rotate करने का समर्थन हैBaseGeometryWidget.base_layerproperty से map tile provider customize किया जा सकता है- MariaDB 12.0.1+ पर
coveredby,isvalid,GeoHash,IsValidजैसी सुविधाएँ समर्थित हैं - widget rendering में inline JavaScript हटाई गई, इसलिए customization पर template बदलना पड़ेगा
PostgreSQL
- Lexeme expression जोड़ने से full-text search queries पर नियंत्रण बेहतर हुआ
CreateExtensionजैसी extension operations मेंhintsparameter जोड़ा गयाdjango.contrib.postgresसे जुड़े fields, indexes और constraints पर system checks जोड़े गए
Staticfiles
ManifestStaticFilesStorageअब path-ordering consistency सुनिश्चित करता है, जिससे अनावश्यक diff कम होता हैcollectstaticcommand डिफ़ॉल्ट रूप से केवल summary दिखाती है; विवरण के लिए--verbosity 2या उससे अधिक देना होता है
अन्य
- Haitian Creole भाषा का समर्थन जोड़ा गया
startproject,startappcommands अब non-existent directories स्वतः बना देती हैंshellcommand मेंdjango.conf.settingsजैसे सामान्य utilities auto-import हो जाते हैं- migrations में
zoneinfo.ZoneInfoserialization का समर्थन जोड़ा गया StringAgg,AnyValueजैसी नई aggregate functions जोड़ी गईंAsyncPaginator,AsyncPageके साथ async pagination का समर्थन है- ASGI में HTTP/2 multiple Cookie headers समर्थन उपलब्ध है
- टेम्पलेट में
forloop.lengthvariable जोड़ा गया,querystringटैग सुधारित किया गया DiscoverRunnerअबforkservermode में parallel tests का समर्थन करता है
गैर-संगत बदलाव
Database Backend API
BaseDatabaseSchemaEditorऔर PostgreSQL backend में column हटाते समयCASCADEउपयोग बंद किया गयाreturn_insert_columns()→returning_columns()सहित कई method नाम बदल गए हैंUPDATE … RETURNINGसपोर्ट करते समयDatabaseFeatures.can_return_rows_from_update=Trueसेट किया जा सकता है
deprecate (support dropped)
- MariaDB 10.5 support समाप्त (10.6+ आवश्यक)
- Python 3.12 से कम versions का समर्थन समाप्त
- प्रमुख libraries की minimum versions:
aiosmtpd 1.4.5,bcrypt 4.1.1,Pillow 10.1.0,psycopg 3.1.12आदि
- प्रमुख libraries की minimum versions:
mixed_subtype,alternative_subtype,encodingproperties हटाई गईं- internal implementation बदलने के कारण custom EmailMessage subclasses की जाँच आवश्यक होगी
DEFAULT_AUTO_FIELD डिफ़ॉल्ट बदलाव
- डिफ़ॉल्ट
AutoFieldसे बदलकरBigAutoFieldकिया गया - Django 3.2 के बाद के
models.W042warning को ignore करने वाले प्रोजेक्ट्स में अतिरिक्त सेटिंग जोड़नी होगी
ORM expressions
as_sql()method के return parameters अब tuple होने चाहिए
अन्य
- JSON serialization में हमेशा newline जोड़ा जाता है
asgirefकी minimum version 3.9.1 तक बढ़ाई गई
हटने वाली सुविधाएँ
django.core.mail API
get_connection(),send_mail()आदि में optional arguments केवल keyword arguments के रूप में देने होंगेEmailMessage,EmailMultiAlternativesनिर्माण करते समय पहले 4 positional arguments के बाद बाकी केवल keyword args होंगे
अन्य
BaseDatabaseCreation.create_test_db(serialize)हटाया गया, उसकी जगहserialize_db_to_string()उपयोग करें- PostgreSQL-specific
StringAgg,OrderableAggMixinहटे/हटाए जाएंगे urlize,urlizetruncका default protocol Django 7.0 में HTTPS में बदलने की योजना हैADMINS,MANAGERSसेटिंग अब (name, address) tuple की जगह email strings की list लेनी होगीSafeMIMEText,SafeMIMEMultipart,BadHeaderErrorजैसी email संबंधित classes हटाई गईं
हटाए गए फीचर
BaseConstraintसे positional arguments का समर्थन हटाया गयाDjangoDivFormRenderer,Jinja2DivFormRendererहटाए गएcx_Oracledatabase driver हटाया गयाforms.URLFieldका default scheme"http"से बदलकर"https"कर दिया गयाModel.save()औरModel.asave()में positional args हटाए गएModelAdmin.log_deletion(),LogEntryManager.log_action()हटाए गएdjango.utils.itercompatmodule हटाया गयाGeoIP2.coords(),GeoIP2.open()methods हटाए गएForeignObject.get_joining_columns()और संबंधित methods हटाए गए
Django 6.0 ने सुरक्षा सुदृढ़ीकरण, async processing और आधुनिक email API अपनाने के माध्यम से framework की स्थिरता और scalability को बेहतर बनाया है, और Python 3.12+ ecosystem की ओर migration को स्पष्ट रूप से तय किया है।
1 टिप्पणियां
Hacker News राय
जिस संगठन में मैं पहले काम करता था, वहाँ NodeJS+React का एक ‘आधुनिक’ codebase था, और करीब 15 साल पुराना Python 2.7 आधारित Django legacy app भी था
शुरुआत में लगा था कि पुराना code संभालना तकलीफ़देह होगा, लेकिन असल में इसका उलटा निकला
Django app के साथ काम करना आनंददायक था और उसे व्यवस्थित करना सच में मज़ेदार था। जब कभी उसे नए Go/React rewrite से बदला जाएगा, तो उसकी कमी महसूस होगी
Django टीम को बधाई
मैं लंबे समय से Docker Compose आधारित Django + Celery + Postgres + Redis + esbuild + Tailwind starter app maintain कर रहा हूँ, और हाल ही में उसे Django 6.0 के मुताबिक update किया है
इसे GitHub repository में देखा जा सकता है
अभी CSP configuration को default के रूप में शामिल नहीं किया है, लेकिन थोड़ा और समीक्षा करने के बाद जोड़ने का इरादा है
Django की “batteries included” philosophy, AI code generation के लिए बिल्कुल उपयुक्त है
admin panel, login, password reset जैसी बुनियादी सुविधाएँ पहले से अच्छी तरह मौजूद होने की वजह से, AI छोटे codebase के साथ भी एक पूरा site बना सकता है
code छोटा और साफ़ होने से AI के लिए उसे बार-बार सुधारना भी आसान होता है
विशाल components की जगह स्पष्ट models और templates होते हैं, इसलिए AI द्वारा generated code की review करना भी आसान होता है
और Django admin एक स्वतंत्र ground truth की तरह मौजूद रहता है, इसलिए frontend टूट भी जाए तो data के साथ काम किया जा सकता है
हाँ, यह अफ़सोस है कि Python ecosystem ने gevent model नहीं अपनाया। ऐसा होता तो async transition कहीं ज़्यादा smooth होता
यह Flask या FastAPI जैसे loosely connected frameworks की तुलना में कहीं अधिक integrated है
आख़िरकार यही फ़र्क बहुत सी छोटी असुविधाओं (papercuts) को कम करता है
एक पुराना .NET app rewrite किया था; Rails ने उसे लगभग पूरी तरह convert कर दिया, लेकिन Django को इसमें कठिनाई हुई
इस release का template partials feature काफ़ी अच्छा लग रहा है
लेकिन type annotations की स्थिति अब भी असुविधाजनक है
django-stubs में mypy plugin चाहिए, django-types pyright के लिए fork है लेकिन sync अच्छी नहीं रहती
pylance अपना अलग fork इस्तेमाल करता है
उम्मीद है कि अगले version में कम से कम HttpRequest, HttpResponse, View, Model जैसे बुनियादी types तो आधिकारिक रूप से शामिल होंगे
Django की वजह से web development सच में आनंददायक रहा
दूसरे frameworks पर जाने के बाद भी आख़िरकार Django पर लौट आता हूँ। यह बिना पछतावे वाला चुनाव था
दूसरे frameworks आज़माने पर भी Rails की सुविधाजनक प्रकृति मुझे फिर उसी के पास ले आती है
बस अफ़सोस यही है कि Rails में default Admin UI नहीं है
अगर पूरी full-stack experience चाहिए, तो Laravel या Rails देखना बेहतर है
PHP के दिनों से web पर काम कर रहा हूँ, लेकिन Django हमेशा बस ठीक-ठाक ही लगा
Django मेरा पहला freelance बड़ा project था, और आज भी उसके साथ सहज महसूस करता हूँ
मैंने कई प्रयोगात्मक चीज़ें आज़माईं, लेकिन वह हमेशा अच्छी तरह काम करता रहा। Django का आभारी हूँ
लगभग 15 साल से मैं लगभग केवल Django ही इस्तेमाल कर रहा हूँ
कई दूसरे frameworks भी आज़माए, लेकिन Django जैसा हाथ में फिट बैठने वाला कोई नहीं लगा
इस release में task framework जोड़ा गया है, लेकिन backend और worker शामिल न होना थोड़ा निराशाजनक है
बेहतर होगा कि अगले version में यह पूरी तरह शामिल किया जाए
Django की batteries included प्रकृति की वजह से यह छोटे-बड़े किसी भी project के लिए उपयुक्त है
टीम और contributors को बधाई
मुझे जानना है कि हम SPA युग में आखिर पहुँचे कैसे। क्या यह सिर्फ loading spinner हटाने की कोशिश थी, या इसके पीछे कोई और गहरी वजह थी
web·iOS·Android को एक ही backend share कराने की ज़रूरत ने स्वाभाविक रूप से SPA pattern को फैलाया
मैं अब भी SPA बनाता हूँ, लेकिन कभी न कभी Django + htmx के साथ कोई बड़ा project करना चाहूँगा
बिना page reload के app जैसा व्यवहार आकर्षक था, लेकिन व्यवहार में कई बार forced refresh की ज़रूरत पड़ती थी
फिर भी data और presentation को अलग रखने वाली संरचना मुझे सुरुचिपूर्ण लगती है
इसलिए JS के जरिए documents को apps जैसा बनाने की कोशिशें चलती रहीं
आख़िरकार frontend और backend अलग हुए, API contracts और validation procedures बने
बाद में फिर से server components के साथ इन्हें जोड़ने का रुझान आया, और अभी हम उसी बिंदु पर हैं
पुराने अंदाज़ के web forms का उदाहरण इस लिंक में देखा जा सकता है
इसलिए मैं TypeScript आधारित build process को पसंद करने लगा
Django इस्तेमाल करते समय हर बार बस खुशी महसूस होती है। बस यही बात है