6 पॉइंट द्वारा GN⁺ 2025-12-05 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • वेब फ्रेमवर्क 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, SafeMIMEMultipart classes deprecated हो गए हैं
  • EmailMessage.message() का return type अब Python का EmailMessage instance है

विस्तृत सुधार

Admin

  • Font Awesome Free 6.7.2 आइकन सेट लागू किया गया
  • AdminSite.password_change_form attribute से 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.hasm property से M dimension मौजूद है या नहीं, यह पता चलता है
  • Rotate function से निर्दिष्ट angle पर rotate करने का समर्थन है
  • BaseGeometryWidget.base_layer property से 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 में hints parameter जोड़ा गया
  • django.contrib.postgres से जुड़े fields, indexes और constraints पर system checks जोड़े गए

Staticfiles

  • ManifestStaticFilesStorage अब path-ordering consistency सुनिश्चित करता है, जिससे अनावश्यक diff कम होता है
  • collectstatic command डिफ़ॉल्ट रूप से केवल summary दिखाती है; विवरण के लिए --verbosity 2 या उससे अधिक देना होता है

अन्य

  • Haitian Creole भाषा का समर्थन जोड़ा गया
  • startproject, startapp commands अब non-existent directories स्वतः बना देती हैं
  • shell command में django.conf.settings जैसे सामान्य utilities auto-import हो जाते हैं
  • migrations में zoneinfo.ZoneInfo serialization का समर्थन जोड़ा गया
  • StringAgg, AnyValue जैसी नई aggregate functions जोड़ी गईं
  • AsyncPaginator, AsyncPage के साथ async pagination का समर्थन है
  • ASGI में HTTP/2 multiple Cookie headers समर्थन उपलब्ध है
  • टेम्पलेट में forloop.length variable जोड़ा गया, querystring टैग सुधारित किया गया
  • DiscoverRunner अब forkserver mode में 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 आदि

Email

  • mixed_subtype, alternative_subtype, encoding properties हटाई गईं
  • internal implementation बदलने के कारण custom EmailMessage subclasses की जाँच आवश्यक होगी

DEFAULT_AUTO_FIELD डिफ़ॉल्ट बदलाव

  • डिफ़ॉल्ट AutoField से बदलकर BigAutoField किया गया
  • Django 3.2 के बाद के models.W042 warning को 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_Oracle database driver हटाया गया
  • forms.URLField का default scheme "http" से बदलकर "https" कर दिया गया
  • Model.save() और Model.asave() में positional args हटाए गए
  • ModelAdmin.log_deletion(), LogEntryManager.log_action() हटाए गए
  • django.utils.itercompat module हटाया गया
  • 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 टिप्पणियां

 
GN⁺ 2025-12-05
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 के रूप में शामिल नहीं किया है, लेकिन थोड़ा और समीक्षा करने के बाद जोड़ने का इरादा है

    • मैं इसे bookmark करने वाला था, लेकिन पता चला कि मैंने इसे दिसंबर 2023 में पहले ही save कर रखा था
    • Nick की repositories हमेशा top-tier होती हैं। मैं भी अपने materials में उन्हें अक्सर cite करता हूँ। इसे public में share करने के लिए धन्यवाद
    • मैंने कुछ साल पहले एक project में यह template इस्तेमाल किया था, यह सच में शानदार था
    • हाल में uv add देखा, तो लगा कि इसे लगातार maintain किया जा रहा है
  • Django की “batteries included” philosophy, AI code generation के लिए बिल्कुल उपयुक्त है
    admin panel, login, password reset जैसी बुनियादी सुविधाएँ पहले से अच्छी तरह मौजूद होने की वजह से, AI छोटे codebase के साथ भी एक पूरा site बना सकता है
    code छोटा और साफ़ होने से AI के लिए उसे बार-बार सुधारना भी आसान होता है

    • Django की बड़ी ताकत इंसानों के लिए पढ़ने में आसान code structure है
      विशाल components की जगह स्पष्ट models और templates होते हैं, इसलिए AI द्वारा generated code की review करना भी आसान होता है
      और Django admin एक स्वतंत्र ground truth की तरह मौजूद रहता है, इसलिए frontend टूट भी जाए तो data के साथ काम किया जा सकता है
      हाँ, यह अफ़सोस है कि Python ecosystem ने gevent model नहीं अपनाया। ऐसा होता तो async transition कहीं ज़्यादा smooth होता
    • Django की INSTALLED_APPS structure की वजह से app-level पर features जोड़ना या हटाना आसान है
      यह Flask या FastAPI जैसे loosely connected frameworks की तुलना में कहीं अधिक integrated है
      आख़िरकार यही फ़र्क बहुत सी छोटी असुविधाओं (papercuts) को कम करता है
    • मैंने Django और Rails दोनों इस्तेमाल किए हैं, और Claude Code के साथ test करने पर Rails काफ़ी बेहतर चला
      एक पुराना .NET app rewrite किया था; Rails ने उसे लगभग पूरी तरह convert कर दिया, लेकिन Django को इसमें कठिनाई हुई
    • असल में Ruby on Rails बहुत पहले से CSP, background workers जैसी कई सुविधाएँ default रूप में देता आया है
    • Django open source projects में इतने लंबे समय से इस्तेमाल हो रहा है कि AI के सीखने के लिए code data बहुत भरपूर है
  • इस 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 पर लौट आता हूँ। यह बिना पछतावे वाला चुनाव था

    • मेरा Ruby on Rails के साथ भी यही अनुभव रहा है
      दूसरे frameworks आज़माने पर भी Rails की सुविधाजनक प्रकृति मुझे फिर उसी के पास ले आती है
      बस अफ़सोस यही है कि Rails में default Admin UI नहीं है
    • सिर्फ backend के नज़रिये से देखें तो Django शानदार है, लेकिन frontend के मामले में अब भी पाषाण युग में अटका हुआ लगता है
      अगर पूरी full-stack experience चाहिए, तो Laravel या Rails देखना बेहतर है
    • सच कहूँ तो Django का आकर्षण मुझे कभी ठीक से समझ नहीं आया
      PHP के दिनों से web पर काम कर रहा हूँ, लेकिन Django हमेशा बस ठीक-ठाक ही लगा
  • Django मेरा पहला freelance बड़ा project था, और आज भी उसके साथ सहज महसूस करता हूँ
    मैंने कई प्रयोगात्मक चीज़ें आज़माईं, लेकिन वह हमेशा अच्छी तरह काम करता रहा। Django का आभारी हूँ

  • लगभग 15 साल से मैं लगभग केवल Django ही इस्तेमाल कर रहा हूँ
    कई दूसरे frameworks भी आज़माए, लेकिन Django जैसा हाथ में फिट बैठने वाला कोई नहीं लगा
    इस release में task framework जोड़ा गया है, लेकिन backend और worker शामिल न होना थोड़ा निराशाजनक है
    बेहतर होगा कि अगले version में यह पूरी तरह शामिल किया जाए

    • जिज्ञासा है कि क्या Django की कभी उस दिशा में जाने की योजना है। framework की philosophy को देखते हुए लगता है कि वह सीमाएँ बनाए रखने को महत्व देगा
    • पूर्णता को अच्छाई का दुश्मन नहीं बनने देना चाहिए। Django आख़िरकार “deadline वाले perfectionists” के लिए framework है
  • Django की batteries included प्रकृति की वजह से यह छोटे-बड़े किसी भी project के लिए उपयुक्त है
    टीम और contributors को बधाई

  • मुझे जानना है कि हम SPA युग में आखिर पहुँचे कैसे। क्या यह सिर्फ loading spinner हटाने की कोशिश थी, या इसके पीछे कोई और गहरी वजह थी

    • एक मुख्य कारण mobile apps का उदय था
      web·iOS·Android को एक ही backend share कराने की ज़रूरत ने स्वाभाविक रूप से SPA pattern को फैलाया
      मैं अब भी SPA बनाता हूँ, लेकिन कभी न कभी Django + htmx के साथ कोई बड़ा project करना चाहूँगा
    • मैंने पहले Angular के साथ data visualization करते हुए SPA की ओर रुख किया था
      बिना page reload के app जैसा व्यवहार आकर्षक था, लेकिन व्यवहार में कई बार forced refresh की ज़रूरत पड़ती थी
      फिर भी data और presentation को अलग रखने वाली संरचना मुझे सुरुचिपूर्ण लगती है
    • web मूल रूप से documents render करने के लिए बना था, लेकिन users को apps चाहिए थे
      इसलिए JS के जरिए documents को apps जैसा बनाने की कोशिशें चलती रहीं
    • जब internet धीमा था और backend validation भी धीमी होती थी, तब form validation के लिए JS जोड़ना शुरू हुआ और चीज़ें जटिल होती चली गईं
      आख़िरकार frontend और backend अलग हुए, API contracts और validation procedures बने
      बाद में फिर से server components के साथ इन्हें जोड़ने का रुझान आया, और अभी हम उसी बिंदु पर हैं
      पुराने अंदाज़ के web forms का उदाहरण इस लिंक में देखा जा सकता है
    • Django या Rails जैसे templates में type safety की कमी थी
      इसलिए मैं TypeScript आधारित build process को पसंद करने लगा
  • Django इस्तेमाल करते समय हर बार बस खुशी महसूस होती है। बस यही बात है