[{"data":1,"prerenderedAt":1281},["ShallowReactive",2],{"navigation":3,"$fNVxE9nOB4-RLj3fHlTxrUXV8_9UTqHhDppxFjFkcKHc":1016},[4,54,89,123,165,211,253,331,389,439,462,488,514,540,578,624,650,672,702,736,774,800,850,856,862,868,874,928],{"title":5,"path":6,"stem":7,"children":8},"Introduction and Foundations","/introduction-and-foundations","01.introduction-and-foundations/01.index",[9,10,14,18,22,26,30,34,38,42,46,50],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"What is Django","/introduction-and-foundations/what-is-django","01.introduction-and-foundations/02.what-is-django",{"title":15,"path":16,"stem":17},"Key Concepts and Philosophy","/introduction-and-foundations/key-concepts-and-philosophy","01.introduction-and-foundations/03.key-concepts-and-philosophy",{"title":19,"path":20,"stem":21},"MVC vs MVT: Understanding Django's Architecture","/introduction-and-foundations/mvc-vs-mvt","01.introduction-and-foundations/04.mvc-vs-mvt",{"title":23,"path":24,"stem":25},"Project Structure Overview","/introduction-and-foundations/project-structure-overview","01.introduction-and-foundations/05.project-structure-overview",{"title":27,"path":28,"stem":29},"Installing Django","/introduction-and-foundations/installing-django","01.introduction-and-foundations/06.installing-django",{"title":31,"path":32,"stem":33},"Creating Your First Django Project","/introduction-and-foundations/creating-first-project","01.introduction-and-foundations/07.creating-first-project",{"title":35,"path":36,"stem":37},"Creating Your First Django App","/introduction-and-foundations/creating-first-app","01.introduction-and-foundations/08.creating-first-app",{"title":39,"path":40,"stem":41},"Your First Django \"Hello World\"","/introduction-and-foundations/hello-world","01.introduction-and-foundations/09.hello-world",{"title":43,"path":44,"stem":45},"Django Quick Start Guide","/introduction-and-foundations/quick-start-guide","01.introduction-and-foundations/10.quick-start-guide",{"title":47,"path":48,"stem":49},"How Django Handles Requests","/introduction-and-foundations/how-django-handles-requests","01.introduction-and-foundations/11.how-django-handles-requests",{"title":51,"path":52,"stem":53},"Django Settings","/introduction-and-foundations/django-settings","01.introduction-and-foundations/12.django-settings",{"title":55,"path":56,"stem":57,"children":58},"The Development Environment","/development-environment","02.development-environment/1.index",[59,61,65,69,73,77,81,85],{"title":60,"path":56,"stem":57},"Development Environment",{"title":62,"path":63,"stem":64},"Recommended Tooling for Django Development","/development-environment/recommended-tooling","02.development-environment/2.recommended-tooling",{"title":66,"path":67,"stem":68},"Virtual Environments","/development-environment/virtual-environments","02.development-environment/3.virtual-environments",{"title":70,"path":71,"stem":72},"Django Admin and Management Commands","/development-environment/admin-and-management-commands","02.development-environment/4.admin-and-management-commands",{"title":74,"path":75,"stem":76},"Django Project Settings","/development-environment/project-settings","02.development-environment/5.project-settings",{"title":78,"path":79,"stem":80},"Managing Django Environments: Local, Staging, and Production","/development-environment/environments-local-staging-production","02.development-environment/6.environments-local-staging-production",{"title":82,"path":83,"stem":84},"Running Django Development Server","/development-environment/running-development-server","02.development-environment/7.running-development-server",{"title":86,"path":87,"stem":88},"Working with Django Shell","/development-environment/working-with-shell","02.development-environment/8.working-with-shell",{"title":90,"path":91,"stem":92,"children":93},"Templates and Presentation Layer","/templates-and-presentation","03.templates-and-presentation/1.index",[94,95,99,103,107,111,115,119],{"title":90,"path":91,"stem":92},{"title":96,"path":97,"stem":98},"Introduction to Django Templates","/templates-and-presentation/introduction-to-templates","03.templates-and-presentation/2.introduction-to-templates",{"title":100,"path":101,"stem":102},"The Django Template Language","/templates-and-presentation/django-template-language","03.templates-and-presentation/3.django-template-language",{"title":104,"path":105,"stem":106},"Template Inheritance","/templates-and-presentation/template-inheritance","03.templates-and-presentation/4.template-inheritance",{"title":108,"path":109,"stem":110},"Built-in Template Tags and Filters","/templates-and-presentation/built-in-template-tags-and-filters","03.templates-and-presentation/5.built-in-template-tags-and-filters",{"title":112,"path":113,"stem":114},"Including Static Files","/templates-and-presentation/including-static-files","03.templates-and-presentation/6.including-static-files",{"title":116,"path":117,"stem":118},"Working with Media Files","/templates-and-presentation/working-with-media-files","03.templates-and-presentation/7.working-with-media-files",{"title":120,"path":121,"stem":122},"Using Alternative Template Engines","/templates-and-presentation/using-alternative-template-engines","03.templates-and-presentation/8.using-alternative-template-engines",{"title":124,"path":125,"stem":126,"children":127},"URLs and Views","/urls-and-views","04.urls-and-views/01.index",[128,129,133,137,141,145,149,153,157,161],{"title":124,"path":125,"stem":126},{"title":130,"path":131,"stem":132},"The URL Dispatcher","/urls-and-views/the-url-dispatcher","04.urls-and-views/02.the-url-dispatcher",{"title":134,"path":135,"stem":136},"Writing Function-Based Views","/urls-and-views/writing-function-based-views","04.urls-and-views/03.writing-function-based-views",{"title":138,"path":139,"stem":140},"View Decorators","/urls-and-views/view-decorators","04.urls-and-views/04.view-decorators",{"title":142,"path":143,"stem":144},"Rendering Responses","/urls-and-views/rendering-responses","04.urls-and-views/05.rendering-responses",{"title":146,"path":147,"stem":148},"Redirects","/urls-and-views/redirects","04.urls-and-views/06.redirects",{"title":150,"path":151,"stem":152},"Handling HTTP Methods","/urls-and-views/handling-http-methods","04.urls-and-views/07.handling-http-methods",{"title":154,"path":155,"stem":156},"Conditional View Processing","/urls-and-views/conditional-view-processing","04.urls-and-views/08.conditional-view-processing",{"title":158,"path":159,"stem":160},"File Uploads","/urls-and-views/file-uploads","04.urls-and-views/09.file-uploads",{"title":162,"path":163,"stem":164},"Using Django Shortcut Functions","/urls-and-views/using-django-shortcut-functions","04.urls-and-views/10.using-django-shortcut-functions",{"title":166,"path":167,"stem":168,"children":169},"Class Based Views","/class-based-views","05.class-based-views/01.index",[170,171,175,179,183,187,191,195,199,203,207],{"title":166,"path":167,"stem":168},{"title":172,"path":173,"stem":174},"Introduction to Class-Based Views","/class-based-views/introduction-to-class-based-views","05.class-based-views/02.introduction-to-class-based-views",{"title":176,"path":177,"stem":178},"Common Base Classes","/class-based-views/common-base-classes","05.class-based-views/03.common-base-classes",{"title":180,"path":181,"stem":182},"Built-in Generic Views","/class-based-views/built-in-generic-views","05.class-based-views/04.built-in-generic-views",{"title":184,"path":185,"stem":186},"Views for CRUD Operations","/class-based-views/views-for-crud-operations","05.class-based-views/05.views-for-crud-operations",{"title":188,"path":189,"stem":190},"Handling Forms with Class-Based Views","/class-based-views/handling-forms-with-class-based-views","05.class-based-views/06.handling-forms-with-class-based-views",{"title":192,"path":193,"stem":194},"Using Mixins","/class-based-views/using-mixins","05.class-based-views/07.using-mixins",{"title":196,"path":197,"stem":198},"URL Configuration with Class-Based Views","/class-based-views/url-configuration-with-class-based-views","05.class-based-views/08.url-configuration-with-class-based-views",{"title":200,"path":201,"stem":202},"Subclassing Generic Views","/class-based-views/subclassing-generic-views","05.class-based-views/09.subclassing-generic-views",{"title":204,"path":205,"stem":206},"Asynchronous Class-Based Views","/class-based-views/asynchronous-class-based-views","05.class-based-views/10.asynchronous-class-based-views",{"title":208,"path":209,"stem":210},"Pagination","/class-based-views/pagination","05.class-based-views/11.pagination",{"title":212,"path":213,"stem":214,"children":215},"Forms and User Input","/forms-and-user-input","06.forms-and-user-input/01.index",[216,217,221,225,229,233,237,241,245,249],{"title":212,"path":213,"stem":214},{"title":218,"path":219,"stem":220},"Understanding HTML Forms","/forms-and-user-input/understanding-html-forms","06.forms-and-user-input/02.understanding-html-forms",{"title":222,"path":223,"stem":224},"Django's Role in Form Handling","/forms-and-user-input/djangos-role-in-form-handling","06.forms-and-user-input/03.djangos-role-in-form-handling",{"title":226,"path":227,"stem":228},"Creating Forms with Forms API","/forms-and-user-input/creating-forms-with-forms-api","06.forms-and-user-input/04.creating-forms-with-forms-api",{"title":230,"path":231,"stem":232},"Form Validation","/forms-and-user-input/form-validation","06.forms-and-user-input/05.form-validation",{"title":234,"path":235,"stem":236},"Built-in Fields and Widgets","/forms-and-user-input/built-in-fields-and-widgets","06.forms-and-user-input/06.built-in-fields-and-widgets",{"title":238,"path":239,"stem":240},"Form Rendering in Templates","/forms-and-user-input/form-rendering-in-templates","06.forms-and-user-input/07.form-rendering-in-templates",{"title":242,"path":243,"stem":244},"Model Forms","/forms-and-user-input/model-forms","06.forms-and-user-input/08.model-forms",{"title":246,"path":247,"stem":248},"Advanced Form Techniques","/forms-and-user-input/advanced-form-techniques","06.forms-and-user-input/09.advanced-form-techniques",{"title":250,"path":251,"stem":252},"Security Considerations for Forms","/forms-and-user-input/security-considerations-for-forms","06.forms-and-user-input/10.security-considerations-for-forms",{"title":254,"path":255,"stem":256,"children":257},"Models and Databases","/models-and-databases","07.models-and-databases/01.index",[258,259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327],{"title":254,"path":255,"stem":256},{"title":260,"path":261,"stem":262},"Understanding Django Models","/models-and-databases/understanding-django-models","07.models-and-databases/02.understanding-django-models",{"title":264,"path":265,"stem":266},"Defining Fields","/models-and-databases/defining-fields","07.models-and-databases/03.defining-fields",{"title":268,"path":269,"stem":270},"Relationships and Foreign Keys","/models-and-databases/relationships-and-foreign-keys","07.models-and-databases/04.relationships-and-foreign-keys",{"title":272,"path":273,"stem":274},"Examples of Relationship Patterns","/models-and-databases/examples-of-relationship-patterns","07.models-and-databases/05.examples-of-relationship-patterns",{"title":276,"path":277,"stem":278},"Making Queries","/models-and-databases/making-queries","07.models-and-databases/06.making-queries",{"title":280,"path":281,"stem":282},"Filtering, Ordering, and Slicing","/models-and-databases/filtering-ordering-slicing","07.models-and-databases/07.filtering-ordering-slicing",{"title":284,"path":285,"stem":286},"Managers and QuerySets","/models-and-databases/managers-and-querysets","07.models-and-databases/08.managers-and-querysets",{"title":288,"path":289,"stem":290},"Aggregation","/models-and-databases/aggregation","07.models-and-databases/09.aggregation",{"title":292,"path":293,"stem":294},"Search","/models-and-databases/search","07.models-and-databases/10.search",{"title":296,"path":297,"stem":298},"Raw SQL Queries","/models-and-databases/raw-sql-queries","07.models-and-databases/11.raw-sql-queries",{"title":300,"path":301,"stem":302},"Transactions","/models-and-databases/transactions","07.models-and-databases/12.transactions",{"title":304,"path":305,"stem":306},"Multiple Databases","/models-and-databases/multiple-databases","07.models-and-databases/13.multiple-databases",{"title":308,"path":309,"stem":310},"Tablespaces","/models-and-databases/tablespaces","07.models-and-databases/14.tablespaces",{"title":312,"path":313,"stem":314},"Composite Primary Keys","/models-and-databases/composite-primary-keys","07.models-and-databases/15.composite-primary-keys",{"title":316,"path":317,"stem":318},"Database Instrumentation","/models-and-databases/database-instrumentation","07.models-and-databases/16.database-instrumentation",{"title":320,"path":321,"stem":322},"Database Optimization","/models-and-databases/database-optimization","07.models-and-databases/17.database-optimization",{"title":324,"path":325,"stem":326},"Fixtures","/models-and-databases/fixtures","07.models-and-databases/18.fixtures",{"title":328,"path":329,"stem":330},"Signals","/models-and-databases/signals","07.models-and-databases/19.signals",{"title":332,"path":333,"stem":334,"children":335},"Migrations","/migrations","08.migrations/01.index",[336,337,341,345,349,353,357,361,365,369,373,377,381,385],{"title":332,"path":333,"stem":334},{"title":338,"path":339,"stem":340},"How Migrations Work","/migrations/how-migrations-work","08.migrations/02.how-migrations-work",{"title":342,"path":343,"stem":344},"Management Commands","/migrations/management-commands","08.migrations/03.management-commands",{"title":346,"path":347,"stem":348},"Dependencies and Workflow","/migrations/dependencies-and-workflow","08.migrations/04.dependencies-and-workflow",{"title":350,"path":351,"stem":352},"Transaction Handling","/migrations/transaction-handling","08.migrations/05.transaction-handling",{"title":354,"path":355,"stem":356},"Adding Migrations to Apps","/migrations/adding-migrations-to-apps","08.migrations/06.adding-migrations-to-apps",{"title":358,"path":359,"stem":360},"Reversing Migrations","/migrations/reversing-migrations","08.migrations/07.reversing-migrations",{"title":362,"path":363,"stem":364},"Historical Models","/migrations/historical-models","08.migrations/08.historical-models",{"title":366,"path":367,"stem":368},"Considerations When Removing Fields","/migrations/considerations-when-removing-fields","08.migrations/09.considerations-when-removing-fields",{"title":370,"path":371,"stem":372},"Data Migrations","/migrations/data-migrations","08.migrations/10.data-migrations",{"title":374,"path":375,"stem":376},"Squashing Migrations","/migrations/squashing-migrations","08.migrations/11.squashing-migrations",{"title":378,"path":379,"stem":380},"Serializing Values","/migrations/serializing-values","08.migrations/12.serializing-values",{"title":382,"path":383,"stem":384},"Supporting Multiple Django Versions","/migrations/supporting-multiple-django-versions","08.migrations/13.supporting-multiple-django-versions",{"title":386,"path":387,"stem":388},"Django Serialization Framework","/migrations/django-serialization-framework","08.migrations/14.django-serialization-framework",{"title":390,"path":391,"stem":392,"children":393},"Authentication and Authorization","/authentication-and-authorization","09.authentication-and-authorization/01.index",[394,395,399,403,407,411,415,419,423,427,431,435],{"title":390,"path":391,"stem":392},{"title":396,"path":397,"stem":398},"Overview of Django's Authentication System","/authentication-and-authorization/overview-of-django-authentication-system","09.authentication-and-authorization/02.overview-of-django-authentication-system",{"title":400,"path":401,"stem":402},"Users and Groups","/authentication-and-authorization/users-and-groups","09.authentication-and-authorization/03.users-and-groups",{"title":404,"path":405,"stem":406},"Permissions","/authentication-and-authorization/permissions","09.authentication-and-authorization/04.permissions",{"title":408,"path":409,"stem":410},"Password Management","/authentication-and-authorization/password-management","09.authentication-and-authorization/05.password-management",{"title":412,"path":413,"stem":414},"Authentication Views","/authentication-and-authorization/authentication-views","09.authentication-and-authorization/06.authentication-views",{"title":416,"path":417,"stem":418},"Login and Logout","/authentication-and-authorization/login-and-logout","09.authentication-and-authorization/07.login-and-logout",{"title":420,"path":421,"stem":422},"Custom User Models","/authentication-and-authorization/custom-user-models","09.authentication-and-authorization/08.custom-user-models",{"title":424,"path":425,"stem":426},"Middleware for Authentication","/authentication-and-authorization/middleware-for-authentication","09.authentication-and-authorization/09.middleware-for-authentication",{"title":428,"path":429,"stem":430},"Authorization in Views and Templates","/authentication-and-authorization/authorization-in-views-and-templates","09.authentication-and-authorization/10.authorization-in-views-and-templates",{"title":432,"path":433,"stem":434},"Integrating Social Authentication","/authentication-and-authorization/integrating-social-authentication","09.authentication-and-authorization/11.integrating-social-authentication",{"title":436,"path":437,"stem":438},"Security Best Practices","/authentication-and-authorization/security-best-practices","09.authentication-and-authorization/12.security-best-practices",{"title":440,"path":441,"stem":442,"children":443},"Sessions, Cookies, and State","/sessions-cookies-state","10.sessions-cookies-state/01.index",[444,446,450,454,458],{"title":445,"path":441,"stem":442},"Sessions, Cookies, and State Management",{"title":447,"path":448,"stem":449},"Introduction to Sessions","/sessions-cookies-state/introduction-to-sessions","10.sessions-cookies-state/02.introduction-to-sessions",{"title":451,"path":452,"stem":453},"Working with Cookies","/sessions-cookies-state/working-with-cookies","10.sessions-cookies-state/03.working-with-cookies",{"title":455,"path":456,"stem":457},"Server-Side Session Storage Options","/sessions-cookies-state/server-side-session-storage-options","10.sessions-cookies-state/04.server-side-session-storage-options",{"title":459,"path":460,"stem":461},"Session Security","/sessions-cookies-state/session-security","10.sessions-cookies-state/05.session-security",{"title":463,"path":464,"stem":465,"children":466},"Working with Files","/working-with-files","11.working-with-files/01.index",[467,468,472,476,480,484],{"title":463,"path":464,"stem":465},{"title":469,"path":470,"stem":471},"Files in Models","/working-with-files/files-in-models","11.working-with-files/02.files-in-models",{"title":473,"path":474,"stem":475},"The File Object","/working-with-files/the-file-object","11.working-with-files/03.the-file-object",{"title":477,"path":478,"stem":479},"Storage Backends","/working-with-files/storage-backends","11.working-with-files/04.storage-backends",{"title":481,"path":482,"stem":483},"Using Cloud Storage Providers","/working-with-files/using-cloud-storage-providers","11.working-with-files/05.using-cloud-storage-providers",{"title":485,"path":486,"stem":487},"Managing Media in Production","/working-with-files/managing-media-in-production","11.working-with-files/06.managing-media-in-production",{"title":489,"path":490,"stem":491,"children":492},"Admin Site","/admin-site","12.admin-site/01.index",[493,494,498,502,506,510],{"title":489,"path":490,"stem":491},{"title":495,"path":496,"stem":497},"Enabling the Admin","/admin-site/enabling-the-admin","12.admin-site/02.enabling-the-admin",{"title":499,"path":500,"stem":501},"Registering Models","/admin-site/registering-models","12.admin-site/03.registering-models",{"title":503,"path":504,"stem":505},"Customizing Admin Display","/admin-site/customizing-admin-display","12.admin-site/04.customizing-admin-display",{"title":507,"path":508,"stem":509},"Admin Actions","/admin-site/admin-actions","12.admin-site/05.admin-actions",{"title":511,"path":512,"stem":513},"Admin Security Best Practices","/admin-site/admin-security-best-practices","12.admin-site/06.admin-security-best-practices",{"title":515,"path":516,"stem":517,"children":518},"Middleware","/middleware","13.middleware/01.index",[519,520,524,528,532,536],{"title":515,"path":516,"stem":517},{"title":521,"path":522,"stem":523},"Middleware Overview","/middleware/middleware-overview","13.middleware/02.middleware-overview",{"title":525,"path":526,"stem":527},"Built-in Middleware","/middleware/built-in-middleware","13.middleware/03.built-in-middleware",{"title":529,"path":530,"stem":531},"Creating Custom Middleware","/middleware/creating-custom-middleware","13.middleware/04.creating-custom-middleware",{"title":533,"path":534,"stem":535},"Middleware Ordering","/middleware/middleware-ordering","13.middleware/05.middleware-ordering",{"title":537,"path":538,"stem":539},"Performance and Debugging","/middleware/performance-and-debugging","13.middleware/06.performance-and-debugging",{"title":541,"path":542,"stem":543,"children":544},"Security","/security","14.security/01.index",[545,546,550,554,558,562,566,570,574],{"title":541,"path":542,"stem":543},{"title":547,"path":548,"stem":549},"Django Security Philosophy","/security/django-security-philosophy","14.security/02.django-security-philosophy",{"title":551,"path":552,"stem":553},"Cross Site Request Forgery","/security/cross-site-request-forgery","14.security/03.cross-site-request-forgery",{"title":555,"path":556,"stem":557},"Cross Site Scripting","/security/cross-site-scripting","14.security/04.cross-site-scripting",{"title":559,"path":560,"stem":561},"SQL Injection Protection","/security/sql-injection-protection","14.security/05.sql-injection-protection",{"title":563,"path":564,"stem":565},"Clickjacking Protection","/security/clickjacking-protection","14.security/06.clickjacking-protection",{"title":567,"path":568,"stem":569},"HTTPS Setup and HSTS","/security/https-setup-and-hsts","14.security/07.https-setup-and-hsts",{"title":571,"path":572,"stem":573},"Password Storage and Cryptography","/security/password-storage-and-cryptography","14.security/08.password-storage-and-cryptography",{"title":575,"path":576,"stem":577},"Secure Deployment Checklist","/security/secure-deployment-checklist","14.security/09.secure-deployment-checklist",{"title":579,"path":580,"stem":581,"children":582},"Testing","/testing","15.testing/01.index",[583,584,588,592,596,600,604,608,612,616,620],{"title":579,"path":580,"stem":581},{"title":585,"path":586,"stem":587},"Introduction to Django Testing","/testing/introduction-to-django-testing","15.testing/02.introduction-to-django-testing",{"title":589,"path":590,"stem":591},"Writing and Running Tests","/testing/writing-and-running-tests","15.testing/03.writing-and-running-tests",{"title":593,"path":594,"stem":595},"Test Tools","/testing/test-tools","15.testing/04.test-tools",{"title":597,"path":598,"stem":599},"Testing Models","/testing/testing-models","15.testing/05.testing-models",{"title":601,"path":602,"stem":603},"Testing Views","/testing/testing-views","15.testing/06.testing-views",{"title":605,"path":606,"stem":607},"Testing Forms","/testing/testing-forms","15.testing/07.testing-forms",{"title":609,"path":610,"stem":611},"Testing Templates","/testing/testing-templates","15.testing/08.testing-templates",{"title":613,"path":614,"stem":615},"Testing Authentication","/testing/testing-authentication","15.testing/09.testing-authentication",{"title":617,"path":618,"stem":619},"Advanced Testing Topics","/testing/advanced-testing-topics","15.testing/10.advanced-testing-topics",{"title":621,"path":622,"stem":623},"Performance Testing","/testing/performance-testing","15.testing/11.performance-testing",{"title":625,"path":626,"stem":627,"children":628},"Static Assets and Frontend Integration","/static-assets-and-frontend-integration","16.static-assets-and-frontend-integration/01.index",[629,630,634,638,642,646],{"title":625,"path":626,"stem":627},{"title":631,"path":632,"stem":633},"Working with Static Files","/static-assets-and-frontend-integration/working-with-static-files","16.static-assets-and-frontend-integration/02.working-with-static-files",{"title":635,"path":636,"stem":637},"Integrating CSS and JavaScript","/static-assets-and-frontend-integration/integrating-css-and-javascript","16.static-assets-and-frontend-integration/03.integrating-css-and-javascript",{"title":639,"path":640,"stem":641},"Using Build Tools like Vite or Webpack","/static-assets-and-frontend-integration/using-build-tools-like-vite-or-webpack","16.static-assets-and-frontend-integration/04.using-build-tools-like-vite-or-webpack",{"title":643,"path":644,"stem":645},"Using React or Vue with Django","/static-assets-and-frontend-integration/using-react-or-vue-with-django","16.static-assets-and-frontend-integration/05.using-react-or-vue-with-django",{"title":647,"path":648,"stem":649},"Managing CORS","/static-assets-and-frontend-integration/managing-cors","16.static-assets-and-frontend-integration/06.managing-cors",{"title":651,"path":652,"stem":653,"children":654},"Internationalization and Localization","/internationalization-and-localization","17.internationalization-and-localization/01.index",[655,656,660,664,668],{"title":651,"path":652,"stem":653},{"title":657,"path":658,"stem":659},"Enabling Translation","/internationalization-and-localization/enabling-translation","17.internationalization-and-localization/02.enabling-translation",{"title":661,"path":662,"stem":663},"Translating Text in Code and Templates","/internationalization-and-localization/translating-text-in-code-and-templates","17.internationalization-and-localization/03.translating-text-in-code-and-templates",{"title":665,"path":666,"stem":667},"Timezone Support","/internationalization-and-localization/timezone-support","17.internationalization-and-localization/04.timezone-support",{"title":669,"path":670,"stem":671},"Locale Middleware","/internationalization-and-localization/locale-middleware","17.internationalization-and-localization/05.locale-middleware",{"title":673,"path":674,"stem":675,"children":676},"Caching","/caching","18.caching/01.index",[677,678,682,686,690,694,698],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681},"Introduction to Caching","/caching/introduction-to-caching","18.caching/02.introduction-to-caching",{"title":683,"path":684,"stem":685},"Cache Backends","/caching/cache-backends","18.caching/03.cache-backends",{"title":687,"path":688,"stem":689},"Per View Caching","/caching/per-view-caching","18.caching/04.per-view-caching",{"title":691,"path":692,"stem":693},"Low Level Cache API","/caching/low-level-cache-api","18.caching/05.low-level-cache-api",{"title":695,"path":696,"stem":697},"Template Fragment Caching","/caching/template-fragment-caching","18.caching/06.template-fragment-caching",{"title":699,"path":700,"stem":701},"Deployment Level Caching Patterns","/caching/deployment-level-caching-patterns","18.caching/07.deployment-level-caching-patterns",{"title":703,"path":704,"stem":705,"children":706},"Asynchronous Django","/asynchronous-django","19.asynchronous-django/01.index",[707,708,712,716,720,724,728,732],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711},"Introduction to ASGI","/asynchronous-django/introduction-to-asgi","19.asynchronous-django/02.introduction-to-asgi",{"title":713,"path":714,"stem":715},"Async Views","/asynchronous-django/async-views","19.asynchronous-django/03.async-views",{"title":717,"path":718,"stem":719},"Async ORM Status","/asynchronous-django/async-orm-status","19.asynchronous-django/04.async-orm-status",{"title":721,"path":722,"stem":723},"WebSockets with Channels","/asynchronous-django/websockets-with-channels","19.asynchronous-django/05.websockets-with-channels",{"title":725,"path":726,"stem":727},"Background Tasks with Celery or RQ","/asynchronous-django/background-tasks-with-celery-or-rq","19.asynchronous-django/06.background-tasks-with-celery-or-rq",{"title":729,"path":730,"stem":731},"Asynchronous Support","/asynchronous-django/asynchronous-support","19.asynchronous-django/07.asynchronous-support",{"title":733,"path":734,"stem":735},"Django's Tasks Framework","/asynchronous-django/django-tasks-framework","19.asynchronous-django/08.django-tasks-framework",{"title":737,"path":738,"stem":739,"children":740},"Deployment","/deployment","20.deployment/01.index",[741,742,746,750,754,758,762,766,770],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745},"Preparing for Production","/deployment/preparing-for-production","20.deployment/02.preparing-for-production",{"title":747,"path":748,"stem":749},"Using WSGI and ASGI Servers","/deployment/using-wsgi-and-asgi-servers","20.deployment/03.using-wsgi-and-asgi-servers",{"title":751,"path":752,"stem":753},"Deploying on Linux Servers","/deployment/deploying-on-linux-servers","20.deployment/04.deploying-on-linux-servers",{"title":755,"path":756,"stem":757},"Using Docker","/deployment/using-docker","20.deployment/05.using-docker",{"title":759,"path":760,"stem":761},"Cloud Deployment Guides","/deployment/cloud-deployment-guides","20.deployment/06.cloud-deployment-guides",{"title":763,"path":764,"stem":765},"Scaling and Load Balancing","/deployment/scaling-and-load-balancing","20.deployment/07.scaling-and-load-balancing",{"title":767,"path":768,"stem":769},"Monitoring and Logging","/deployment/monitoring-and-logging","20.deployment/08.monitoring-and-logging",{"title":771,"path":772,"stem":773},"Backup Strategies","/deployment/backup-strategies","20.deployment/09.backup-strategies",{"title":775,"path":776,"stem":777,"children":778},"Performance and Optimization","/performance-and-optimization","21.performance-and-optimization/01.index",[779,780,784,788,792,796],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"Query Optimization","/performance-and-optimization/query-optimization","21.performance-and-optimization/02.query-optimization",{"title":785,"path":786,"stem":787},"Template Rendering Optimization","/performance-and-optimization/template-rendering-optimization","21.performance-and-optimization/03.template-rendering-optimization",{"title":789,"path":790,"stem":791},"Using Select Related and Prefetch Related","/performance-and-optimization/using-select-related-and-prefetch-related","21.performance-and-optimization/04.using-select-related-and-prefetch-related",{"title":793,"path":794,"stem":795},"Caching Strategies","/performance-and-optimization/caching-strategies","21.performance-and-optimization/05.caching-strategies",{"title":797,"path":798,"stem":799},"Profiling Django Apps","/performance-and-optimization/profiling-django-apps","21.performance-and-optimization/06.profiling-django-apps",{"title":801,"path":802,"stem":803,"children":804},"Advanced and Expert Topics","/advanced-and-expert-topics","22.advanced-and-expert-topics/01.index",[805,806,810,814,818,822,826,830,834,838,842,846],{"title":801,"path":802,"stem":803},{"title":807,"path":808,"stem":809},"System Architecture Patterns","/advanced-and-expert-topics/system-architecture-patterns","22.advanced-and-expert-topics/02.system-architecture-patterns",{"title":811,"path":812,"stem":813},"Domain Driven Design with Django","/advanced-and-expert-topics/domain-driven-design-with-django","22.advanced-and-expert-topics/03.domain-driven-design-with-django",{"title":815,"path":816,"stem":817},"Building Large Scale Django Projects","/advanced-and-expert-topics/building-large-scale-django-projects","22.advanced-and-expert-topics/04.building-large-scale-django-projects",{"title":819,"path":820,"stem":821},"Plugin Architectures for Django Apps","/advanced-and-expert-topics/plugin-architectures-for-django-apps","22.advanced-and-expert-topics/05.plugin-architectures-for-django-apps",{"title":823,"path":824,"stem":825},"Extending Django's Core","/advanced-and-expert-topics/extending-djangos-core","22.advanced-and-expert-topics/06.extending-djangos-core",{"title":827,"path":828,"stem":829},"Custom ORM Expressions","/advanced-and-expert-topics/custom-orm-expressions","22.advanced-and-expert-topics/07.custom-orm-expressions",{"title":831,"path":832,"stem":833},"Custom Management Commands","/advanced-and-expert-topics/custom-management-commands","22.advanced-and-expert-topics/08.custom-management-commands",{"title":835,"path":836,"stem":837},"Working with Signals","/advanced-and-expert-topics/working-with-signals","22.advanced-and-expert-topics/09.working-with-signals",{"title":839,"path":840,"stem":841},"Building Reusable Django Packages","/advanced-and-expert-topics/building-reusable-django-packages","22.advanced-and-expert-topics/10.building-reusable-django-packages",{"title":843,"path":844,"stem":845},"Integrating Microservices","/advanced-and-expert-topics/integrating-microservices","22.advanced-and-expert-topics/11.integrating-microservices",{"title":847,"path":848,"stem":849},"Advanced Security Hardening","/advanced-and-expert-topics/advanced-security-hardening","22.advanced-and-expert-topics/12.advanced-security-hardening",{"title":851,"path":852,"stem":853,"children":854},"Logging in Django","/logging-in-django","23.logging-in-django/01.index",[855],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859,"children":860},"FAQ and Troubleshooting","/faq-and-troubleshooting","24.faq-and-troubleshooting/01.index",[861],{"title":857,"path":858,"stem":859},{"title":863,"path":864,"stem":865,"children":866},"External Packages and Ecosystem","/external-packages-and-ecosystem","25.external-packages-and-ecosystem/01.index",[867],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871,"children":872},"Django Internals and Contributing","/django-internals-and-contributing","26.django-internals-and-contributing/01.index",[873],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877,"children":878},"Microservices with Django","/microservices-with-django","27.microservices-with-django/01.index",[879,880,884,888,892,896,900,904,908,912,916,920,924],{"title":875,"path":876,"stem":877},{"title":881,"path":882,"stem":883},"What Is a Microservice?","/microservices-with-django/what-is-a-microservice","27.microservices-with-django/02.what-is-a-microservice",{"title":885,"path":886,"stem":887},"Introducing the Django Microservices Architecture","/microservices-with-django/django-microservices-architecture","27.microservices-with-django/03.django-microservices-architecture",{"title":889,"path":890,"stem":891},"Setting Up the Development and Runtime Environment","/microservices-with-django/development-environment","27.microservices-with-django/04.development-environment",{"title":893,"path":894,"stem":895},"Cloud-native Data Processing with MongoDB","/microservices-with-django/cloud-native-data-processing","27.microservices-with-django/05.cloud-native-data-processing",{"title":897,"path":898,"stem":899},"Creating RESTful APIs for Microservices","/microservices-with-django/restful-apis","27.microservices-with-django/06.restful-apis",{"title":901,"path":902,"stem":903},"Orchestrating Microservices with Celery and RabbitMQ","/microservices-with-django/orchestrating-celery-rabbitmq","27.microservices-with-django/07.orchestrating-celery-rabbitmq",{"title":905,"path":906,"stem":907},"Testing Microservices","/microservices-with-django/testing-microservices","27.microservices-with-django/08.testing-microservices",{"title":909,"path":910,"stem":911},"Deploying Microservices","/microservices-with-django/deploying-microservices","27.microservices-with-django/09.deploying-microservices",{"title":913,"path":914,"stem":915},"Securing Microservices","/microservices-with-django/securing-microservices","27.microservices-with-django/10.securing-microservices",{"title":917,"path":918,"stem":919},"Improving Microservices Performance with Caching","/microservices-with-django/performance-caching","27.microservices-with-django/11.performance-caching",{"title":921,"path":922,"stem":923},"Best Practices","/microservices-with-django/best-practices","27.microservices-with-django/12.best-practices",{"title":925,"path":926,"stem":927},"Transforming a Monolithic Web App into a Microservice version","/microservices-with-django/monolith-to-microservices","27.microservices-with-django/13.monolith-to-microservices",{"title":929,"path":930,"stem":931,"children":932},"Releases","/releases","releases",[933,936,940,944,948,952,956,960,964,968,972,976,980,984,988,992,996,1000,1004,1008,1012],{"title":934,"path":930,"stem":935},"Django Releases","releases/index",{"title":937,"path":938,"stem":939},"Django 5.1.10 release notes","/releases/5.1.10","releases/5.1.10",{"title":941,"path":942,"stem":943},"Django 5.1.11 release notes","/releases/5.1.11","releases/5.1.11",{"title":945,"path":946,"stem":947},"Django 5.1.12 release notes","/releases/5.1.12","releases/5.1.12",{"title":949,"path":950,"stem":951},"Django 5.1.13 release notes","/releases/5.1.13","releases/5.1.13",{"title":953,"path":954,"stem":955},"Django 5.1.14 release notes","/releases/5.1.14","releases/5.1.14",{"title":957,"path":958,"stem":959},"Django 5.1.15 release notes","/releases/5.1.15","releases/5.1.15",{"title":961,"path":962,"stem":963},"Django 5.2 release notes","/releases/5.2","releases/5.2",{"title":965,"path":966,"stem":967},"Django 5.2.1 release notes","/releases/5.2.1","releases/5.2.1",{"title":969,"path":970,"stem":971},"Django 5.2.10 release notes","/releases/5.2.10","releases/5.2.10",{"title":973,"path":974,"stem":975},"Django 5.2.2 release notes","/releases/5.2.2","releases/5.2.2",{"title":977,"path":978,"stem":979},"Django 5.2.3 release notes","/releases/5.2.3","releases/5.2.3",{"title":981,"path":982,"stem":983},"Django 5.2.4 release notes","/releases/5.2.4","releases/5.2.4",{"title":985,"path":986,"stem":987},"Django 5.2.5 release notes","/releases/5.2.5","releases/5.2.5",{"title":989,"path":990,"stem":991},"Django 5.2.6 release notes","/releases/5.2.6","releases/5.2.6",{"title":993,"path":994,"stem":995},"Django 5.2.7 release notes","/releases/5.2.7","releases/5.2.7",{"title":997,"path":998,"stem":999},"Django 5.2.8 release notes","/releases/5.2.8","releases/5.2.8",{"title":1001,"path":1002,"stem":1003},"Django 5.2.9 release notes","/releases/5.2.9","releases/5.2.9",{"title":1005,"path":1006,"stem":1007},"Django 6.0 release notes","/releases/6.0","releases/6.0",{"title":1009,"path":1010,"stem":1011},"Django 6.0.1 release notes","/releases/6.0.1","releases/6.0.1",{"title":1013,"path":1014,"stem":1015},"Django 6.1 release notes - UNDER DEVELOPMENT","/releases/6.1","releases/6.1",{"releases":1017,"lastUpdated":1280,"latestStable":1048,"latestLTS":1088},[1018,1036,1047,1056,1064,1077,1087,1095,1102,1110,1118,1126,1134,1142,1150,1158,1166,1174,1185,1193,1200,1207,1214,1221,1228,1236,1244,1253,1262,1271],{"version":1019,"name":1013,"description":1020,"publishedAt":1021,"htmlUrl":1022,"downloadUrl":1023,"docsUrl":1024,"githubUrl":1025,"features":1026,"content":1032,"isPrerelease":1033,"isLTS":1034,"isDraft":1034,"author":1035},"6.1","Key features: Model field fetch modes, Database-level delete options for ``ForeignKey.on_delete``","2026-08-01T00:00:00.000Z","https://docs.djangoproject.com/en/6.1/releases/6.1/","https://pypi.org/project/Django/6.1/#files","https://docs.djangoproject.com/en/6.1/","https://github.com/django/django/blob/main/docs/releases/6.1.txt",[1027,1028,1029,1030,1031],"Model field fetch modes","Database-level delete options for ``ForeignKey.on_delete``","Minor features",":mod:`django.contrib.admin`",":mod:`django.contrib.admindocs`","============================================\nDjango 6.1 release notes - UNDER DEVELOPMENT\n============================================\n\n*Expected August 2026*\n\nWelcome to Django 6.1!\n\nThese release notes cover the :ref:`new features \u003Cwhats-new-6.1>`, as well as\nsome :ref:`backwards incompatible changes \u003Cbackwards-incompatible-6.1>` you'll\nwant to be aware of when upgrading from Django 6.0 or earlier. We've\n:ref:`begun the deprecation process for some features\n\u003Cdeprecated-features-6.1>`.\n\nSee the :doc:`/howto/upgrade-version` guide if you're updating an existing\nproject.\n\nPython compatibility\n====================\n\nDjango 6.1 supports Python 3.12, 3.13, and 3.14. We **highly recommend**, and\nonly officially support, the latest release of each series.\n\n.. _whats-new-6.1:\n\nWhat's new in Django 6.1\n========================\n\nModel field fetch modes\n-----------------------\n\nThe on-demand fetching behavior of model fields is now configurable with\n:doc:`fetch modes \u003C/topics/db/fetch-modes>`. Th...",true,false,"Django Team",{"version":1037,"name":1038,"description":1039,"publishedAt":1040,"htmlUrl":1041,"downloadUrl":1042,"docsUrl":1043,"githubUrl":1044,"features":1045,"content":1046,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"6.0.3","Django 6.0.3 release notes","Stable release","2026-03-03T00:00:00.000Z","https://docs.djangoproject.com/en/6.0/releases/6.0.3/","https://pypi.org/project/Django/6.0.3/#files","https://docs.djangoproject.com/en/6.0/","https://github.com/django/django/blob/main/docs/releases/6.0.3.txt",[],"==========================\nDjango 6.0.3 release notes\n==========================\n\n*March 3, 2026*\n\nDjango 6.0.3 fixes a security issue with severity \"moderate\", a security issue\nwith severity \"low\", and several bugs in 6.0.2.\n\nBugfixes\n========\n\n* Fixed :exc:`NameError` when inspecting functions making use of deferred\n  annotations in Python 3.14 (:ticket:`36903`).\n\n* Fixed :exc:`AttributeError` when subclassing builtin lookups and neglecting\n  to :ref:`override\u003Ctuple-for-params>` ``as_sql()`` to accept any sequence\n  (:ticket:`36934`).\n\n* Fixed a visual regression where fieldset legends were misaligned in the admin\n  (:ticket:`36920`).\n\n* Prevented the :data:`django.tasks.signals.task_finished` signal from writing\n  extraneous log messages when no exceptions are encountered (:ticket:`36951`).\n...",{"version":1048,"name":1049,"description":1039,"publishedAt":1050,"htmlUrl":1051,"downloadUrl":1052,"docsUrl":1043,"githubUrl":1053,"features":1054,"content":1055,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"6.0.2","Django 6.0.2 release notes","2026-02-03T00:00:00.000Z","https://docs.djangoproject.com/en/6.0/releases/6.0.2/","https://pypi.org/project/Django/6.0.2/#files","https://github.com/django/django/blob/main/docs/releases/6.0.2.txt",[],"==========================\nDjango 6.0.2 release notes\n==========================\n\n*February 3, 2026*\n\nDjango 6.0.2 fixes three security issues with severity \"high\", two security\nissues with severity \"moderate\", one security issue with severity \"low\", and\nseveral bugs in 6.0.1.\n\nCVE-2025-13473: Username enumeration through timing difference in mod_wsgi authentication handler\n=================================================================================================\n\nThe ``django.contrib.auth.handlers.modwsgi.check_password()`` function for\n:doc:`authentication via mod_wsgi\u003C/howto/deployment/wsgi/apache-auth>`\nallowed remote attackers to enumerate users via a timing attack.\n\nThis issue has severity \"low\" according to the :ref:`Django security policy\n\u003Csecurity-disclosure>`.\n\nCVE-2025-14550: Potential denial-of-service vulnerability via repeated headers when using ASGI\n==============================================================================================\n\nWhen receiving dupli...",{"version":1057,"name":1009,"description":1039,"publishedAt":1058,"htmlUrl":1059,"downloadUrl":1060,"docsUrl":1043,"githubUrl":1061,"features":1062,"content":1063,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"6.0.1","2026-01-06T00:00:00.000Z","https://docs.djangoproject.com/en/6.0/releases/6.0.1/","https://pypi.org/project/Django/6.0.1/#files","https://github.com/django/django/blob/main/docs/releases/6.0.1.txt",[],"==========================\nDjango 6.0.1 release notes\n==========================\n\n*January 6, 2026*\n\nDjango 6.0.1 fixes one data loss bug introduced in Django 5.2 as well as\nseveral other bugs in Django 6.0.\n\nBugfixes\n========\n\n* Fixed a bug in Django 5.2 where data exceeding ``max_length`` was silently\n  truncated by :meth:`.QuerySet.bulk_create` on PostgreSQL (:ticket:`33647`).\n\n* Fixed a regression in Django 6.0 where :ttag:`querystring` mishandled\n  multi-value :class:`~django.http.QueryDict` keys, both by only preserving the\n  last value and by incorrectly handling ``None`` values (:ticket:`36783`).\n\n* Fixed a regression in Django 6.0 that prevented changing the name of a\n  :class:`~django.db.models.ManyToManyField` from taking effect when applying\n  migrations (:ticket:`36800`).\n\n* Fixed a bug where management command colorized help (introduced in\n  Python 3.14) ignored the :option:`--no-color` option and the\n  :envvar:`DJANGO_COLORS` setting (:ticket:`36376`).\n\n* Fixed a regress...",{"version":1065,"name":1005,"description":1066,"publishedAt":1067,"htmlUrl":1068,"downloadUrl":1069,"docsUrl":1043,"githubUrl":1070,"features":1071,"content":1076,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"6.0","Key features: Content Security Policy support, Template Partials","2025-12-03T00:00:00.000Z","https://docs.djangoproject.com/en/6.0/releases/6.0/","https://pypi.org/project/Django/6.0/#files","https://github.com/django/django/blob/main/docs/releases/6.0.txt",[1072,1073,1074,1075,1029],"Content Security Policy support","Template Partials","Background Tasks","Adoption of Python's modern email API","========================\nDjango 6.0 release notes\n========================\n\n*December 3, 2025*\n\nWelcome to Django 6.0!\n\nThese release notes cover the :ref:`new features \u003Cwhats-new-6.0>`, as well as\nsome :ref:`backwards incompatible changes \u003Cbackwards-incompatible-6.0>` you\nshould be aware of when upgrading from Django 5.2 or earlier. We've\n:ref:`begun the deprecation process for some features\n\u003Cdeprecated-features-6.0>`.\n\nSee the :doc:`/howto/upgrade-version` guide if you're updating an existing\nproject.\n\nPython compatibility\n====================\n\nDjango 6.0 supports Python 3.12, 3.13, and 3.14. We **highly recommend**, and\nonly officially support, the latest release of each series.\n\nThe Django 5.2.x series is the last to support Python 3.10 and 3.11.\n\nThird-party library support for older versions of Django\n========================================================\n\nFollowing the release of Django 6.0, we suggest that third-party app authors\ndrop support for all versions of Django prior ...",{"version":1078,"name":1079,"description":1080,"publishedAt":1040,"htmlUrl":1081,"downloadUrl":1082,"docsUrl":1083,"githubUrl":1084,"features":1085,"content":1086,"isPrerelease":1034,"isLTS":1033,"isDraft":1034,"author":1035},"5.2.12","Django 5.2.12 release notes","Long Term Support (LTS) release","https://docs.djangoproject.com/en/5.2/releases/5.2.12/","https://pypi.org/project/Django/5.2.12/#files","https://docs.djangoproject.com/en/5.2/","https://github.com/django/django/blob/main/docs/releases/5.2.12.txt",[],"===========================\nDjango 5.2.12 release notes\n===========================\n\n*March 3, 2026*\n\nDjango 5.2.12 fixes a security issue with severity \"moderate\" and a security\nissue with severity \"low\" in 5.2.11. It also fixes one bug related to support\nfor Python 3.14.\n\nBugfixes\n========\n\n* Fixed :exc:`NameError` when inspecting functions making use of deferred\n  annotations in Python 3.14 (:ticket:`36903`).\n...",{"version":1088,"name":1089,"description":1080,"publishedAt":1050,"htmlUrl":1090,"downloadUrl":1091,"docsUrl":1083,"githubUrl":1092,"features":1093,"content":1094,"isPrerelease":1034,"isLTS":1033,"isDraft":1034,"author":1035},"5.2.11","Django 5.2.11 release notes","https://docs.djangoproject.com/en/5.2/releases/5.2.11/","https://pypi.org/project/Django/5.2.11/#files","https://github.com/django/django/blob/main/docs/releases/5.2.11.txt",[],"===========================\nDjango 5.2.11 release notes\n===========================\n\n*February 3, 2026*\n\nDjango 5.2.11 fixes three security issues with severity \"high\", two security\nissues with severity \"moderate\", and one security issue with severity \"low\" in\n5.2.10.\n\nCVE-2025-13473: Username enumeration through timing difference in mod_wsgi authentication handler\n=================================================================================================\n\nThe ``django.contrib.auth.handlers.modwsgi.check_password()`` function for\n:doc:`authentication via mod_wsgi\u003C/howto/deployment/wsgi/apache-auth>`\nallowed remote attackers to enumerate users via a timing attack.\n\nThis issue has severity \"low\" according to the :ref:`Django security policy\n\u003Csecurity-disclosure>`.\n\nCVE-2025-14550: Potential denial-of-service vulnerability via repeated headers when using ASGI\n==============================================================================================\n\nWhen receiving duplicates of ...",{"version":1096,"name":969,"description":1080,"publishedAt":1058,"htmlUrl":1097,"downloadUrl":1098,"docsUrl":1083,"githubUrl":1099,"features":1100,"content":1101,"isPrerelease":1034,"isLTS":1033,"isDraft":1034,"author":1035},"5.2.10","https://docs.djangoproject.com/en/5.2/releases/5.2.10/","https://pypi.org/project/Django/5.2.10/#files","https://github.com/django/django/blob/main/docs/releases/5.2.10.txt",[],"===========================\nDjango 5.2.10 release notes\n===========================\n\n*January 6, 2026*\n\nDjango 5.2.10 fixes a data loss bug introduced in Django 5.2 and one bug\nrelated to support for Python 3.14.\n\nBugfixes\n========\n\n* Fixed a bug in Django 5.2 where data exceeding ``max_length`` was silently\n  truncated by :meth:`.QuerySet.bulk_create` on PostgreSQL (:ticket:`33647`).\n\n* Fixed a bug where management command colorized help (introduced in\n  Python 3.14) ignored the :option:`--no-color` option and the\n  :envvar:`DJANGO_COLORS` setting (:ticket:`36376`).\n...",{"version":1103,"name":1001,"description":1080,"publishedAt":1104,"htmlUrl":1105,"downloadUrl":1106,"docsUrl":1083,"githubUrl":1107,"features":1108,"content":1109,"isPrerelease":1034,"isLTS":1033,"isDraft":1034,"author":1035},"5.2.9","2025-12-02T00:00:00.000Z","https://docs.djangoproject.com/en/5.2/releases/5.2.9/","https://pypi.org/project/Django/5.2.9/#files","https://github.com/django/django/blob/main/docs/releases/5.2.9.txt",[],"==========================\nDjango 5.2.9 release notes\n==========================\n\n*December 2, 2025*\n\nDjango 5.2.9 fixes one security issue with severity \"high\", one security issue\nwith severity \"moderate\", and several bugs in 5.2.8.\n\nCVE-2025-13372: Potential SQL injection in ``FilteredRelation`` column aliases on PostgreSQL\n============================================================================================\n\n:class:`.FilteredRelation` was subject to SQL injection in column aliases,\nusing a suitably crafted dictionary, with dictionary expansion, as the\n``**kwargs`` passed to :meth:`.QuerySet.annotate` or :meth:`.QuerySet.alias` on\nPostgreSQL.\n\nCVE-2025-64460: Potential denial-of-service vulnerability in XML ``Deserializer``\n=================================================================================\n\n:ref:`XML Serialization \u003Cserialization-formats-xml>` was subject to a potential\ndenial-of-service attack due to quadratic time complexity when deserializing\ncrafted documents...",{"version":1111,"name":997,"description":1080,"publishedAt":1112,"htmlUrl":1113,"downloadUrl":1114,"docsUrl":1083,"githubUrl":1115,"features":1116,"content":1117,"isPrerelease":1034,"isLTS":1033,"isDraft":1034,"author":1035},"5.2.8","2025-11-05T00:00:00.000Z","https://docs.djangoproject.com/en/5.2/releases/5.2.8/","https://pypi.org/project/Django/5.2.8/#files","https://github.com/django/django/blob/main/docs/releases/5.2.8.txt",[],"==========================\nDjango 5.2.8 release notes\n==========================\n\n*November 5, 2025*\n\nDjango 5.2.8 fixes one security issue with severity \"high\", one security issue\nwith severity \"moderate\", and several bugs in 5.2.7. It also adds compatibility\nwith Python 3.14.\n\nCVE-2025-64458: Potential denial-of-service vulnerability in ``HttpResponseRedirect`` and ``HttpResponsePermanentRedirect`` on Windows\n======================================================================================================================================\n\nPython's :func:`NFKC normalization \u003Cpython:unicodedata.normalize>` is slow on\nWindows. As a consequence, :class:`~django.http.HttpResponseRedirect`,\n:class:`~django.http.HttpResponsePermanentRedirect`, and the shortcut\n:func:`redirect() \u003Cdjango.shortcuts.redirect>` were subject to a potential\ndenial-of-service attack via certain inputs with a very large number of Unicode\ncharacters (follow up to :cve:`2025-27556`).\n\nCVE-2025-64459: Potential SQL...",{"version":1119,"name":993,"description":1080,"publishedAt":1120,"htmlUrl":1121,"downloadUrl":1122,"docsUrl":1083,"githubUrl":1123,"features":1124,"content":1125,"isPrerelease":1034,"isLTS":1033,"isDraft":1034,"author":1035},"5.2.7","2025-10-01T00:00:00.000Z","https://docs.djangoproject.com/en/5.2/releases/5.2.7/","https://pypi.org/project/Django/5.2.7/#files","https://github.com/django/django/blob/main/docs/releases/5.2.7.txt",[],"==========================\nDjango 5.2.7 release notes\n==========================\n\n*October 1, 2025*\n\nDjango 5.2.7 fixes one security issue with severity \"high\", one security issue\nwith severity \"low\", and one bug in 5.2.6. Also, the latest string translations\nfrom Transifex are incorporated.\n\nCVE-2025-59681: Potential SQL injection in ``QuerySet.annotate()``, ``alias()``, ``aggregate()``, and ``extra()`` on MySQL and MariaDB\n======================================================================================================================================\n\n:meth:`.QuerySet.annotate`, :meth:`~.QuerySet.alias`,\n:meth:`~.QuerySet.aggregate`, and :meth:`~.QuerySet.extra` methods were subject\nto SQL injection in column aliases, using a suitably crafted dictionary, with\ndictionary expansion, as the ``**kwargs`` passed to these methods (follow up to\n:cve:`2022-28346`).\n\nCVE-2025-59682: Potential partial directory-traversal via ``archive.extract()``\n==========================================...",{"version":1127,"name":989,"description":1080,"publishedAt":1128,"htmlUrl":1129,"downloadUrl":1130,"docsUrl":1083,"githubUrl":1131,"features":1132,"content":1133,"isPrerelease":1034,"isLTS":1033,"isDraft":1034,"author":1035},"5.2.6","2025-09-03T00:00:00.000Z","https://docs.djangoproject.com/en/5.2/releases/5.2.6/","https://pypi.org/project/Django/5.2.6/#files","https://github.com/django/django/blob/main/docs/releases/5.2.6.txt",[],"==========================\nDjango 5.2.6 release notes\n==========================\n\n*September 3, 2025*\n\nDjango 5.2.6 fixes a security issue with severity \"high\" and one bug in 5.2.5.\n\nCVE-2025-57833: Potential SQL injection in ``FilteredRelation`` column aliases\n==============================================================================\n\n:class:`.FilteredRelation` was subject to SQL injection in column aliases,\nusing a suitably crafted dictionary, with dictionary expansion, as the\n``**kwargs`` passed to :meth:`.QuerySet.annotate` or :meth:`.QuerySet.alias`.\n\nBugfixes\n========\n\n* Fixed a bug where using ``QuerySet.values()`` or ``values_list()`` with a\n  ``ForeignObject`` composed of multiple fields returned incorrect results\n  instead of tuples of the referenced fields (:ticket:`36431`).\n...",{"version":1135,"name":985,"description":1080,"publishedAt":1136,"htmlUrl":1137,"downloadUrl":1138,"docsUrl":1083,"githubUrl":1139,"features":1140,"content":1141,"isPrerelease":1034,"isLTS":1033,"isDraft":1034,"author":1035},"5.2.5","2025-08-06T00:00:00.000Z","https://docs.djangoproject.com/en/5.2/releases/5.2.5/","https://pypi.org/project/Django/5.2.5/#files","https://github.com/django/django/blob/main/docs/releases/5.2.5.txt",[],"==========================\nDjango 5.2.5 release notes\n==========================\n\n*August 6, 2025*\n\nDjango 5.2.5 fixes several bugs in 5.2.4.\n\nBugfixes\n========\n\n* Fixed a regression in Django 5.2.1 that prevented the usage of ``UNNEST``\n  PostgreSQL strategy of ``QuerySet.bulk_create()`` with foreign keys\n  (:ticket:`36502`).\n\n* Fixed a crash in Django 5.2 when filtering against a composite primary key\n  using a tuple containing expressions (:ticket:`36522`).\n\n* Fixed a crash in Django 5.2 when validating a model that uses\n  ``GeneratedField`` or constraints composed of ``Q`` and ``Case`` lookups\n  (:ticket:`36518`).\n\n* Added compatibility for ``docutils`` 0.22 (:ticket:`36535`).\n\n* Fixed a crash in Django 5.2 when using a ``ManyToManyField`` on a model with\n  a composite primary key, by extending the ``fields.E347`` system check\n  (:ticket:`36530`).\n...",{"version":1143,"name":981,"description":1080,"publishedAt":1144,"htmlUrl":1145,"downloadUrl":1146,"docsUrl":1083,"githubUrl":1147,"features":1148,"content":1149,"isPrerelease":1034,"isLTS":1033,"isDraft":1034,"author":1035},"5.2.4","2025-07-02T00:00:00.000Z","https://docs.djangoproject.com/en/5.2/releases/5.2.4/","https://pypi.org/project/Django/5.2.4/#files","https://github.com/django/django/blob/main/docs/releases/5.2.4.txt",[],"==========================\nDjango 5.2.4 release notes\n==========================\n\n*July 2, 2025*\n\nDjango 5.2.4 fixes several bugs in 5.2.3.\n\nBugfixes\n========\n\n* Fixed a regression in Django 5.2.2 where\n  :meth:`HttpRequest.get_preferred_type() \u003Cdjango.http.HttpRequest.get_preferred_type>`\n  incorrectly preferred more specific media types with a lower quality\n  (:ticket:`36447`).\n\n* Fixed a regression in Django 5.2.3 where ``Value(None, JSONField())`` used in\n  a :class:`~django.db.models.expressions.When` condition was incorrectly\n  serialized as SQL ``NULL`` instead of JSON ``null`` (:ticket:`36453`).\n\n* Fixed a crash in Django 5.2 when performing an ``__in`` lookup involving a\n  composite primary key and a subquery on backends that lack native support for\n  tuple lookups (:ticket:`36464`).\n...",{"version":1151,"name":977,"description":1080,"publishedAt":1152,"htmlUrl":1153,"downloadUrl":1154,"docsUrl":1083,"githubUrl":1155,"features":1156,"content":1157,"isPrerelease":1034,"isLTS":1033,"isDraft":1034,"author":1035},"5.2.3","2025-06-10T00:00:00.000Z","https://docs.djangoproject.com/en/5.2/releases/5.2.3/","https://pypi.org/project/Django/5.2.3/#files","https://github.com/django/django/blob/main/docs/releases/5.2.3.txt",[],"==========================\nDjango 5.2.3 release notes\n==========================\n\n*June 10, 2025*\n\nDjango 5.2.3 fixes several bugs in 5.2.2. Also, the latest string translations\nfrom Transifex are incorporated.\n\nBugfixes\n========\n\n* Fixed a log injection possibility by migrating remaining response logging\n  to ``django.utils.log.log_response()``, which safely escapes arguments such\n  as the request path to prevent unsafe log output (:cve:`2025-48432`).\n\n* Fixed a regression in Django 5.2 that caused :meth:`.QuerySet.bulk_update` to\n  incorrectly convert ``None`` to JSON ``null`` instead of SQL ``NULL`` for\n  ``JSONField`` (:ticket:`36419`).\n\n* Fixed a regression in Django 5.2.2 where the ``q`` parameter was removed from\n  the internal ``django.http.MediaType.params`` property (:ticket:`36446`).\n...",{"version":1159,"name":973,"description":1080,"publishedAt":1160,"htmlUrl":1161,"downloadUrl":1162,"docsUrl":1083,"githubUrl":1163,"features":1164,"content":1165,"isPrerelease":1034,"isLTS":1033,"isDraft":1034,"author":1035},"5.2.2","2025-06-04T00:00:00.000Z","https://docs.djangoproject.com/en/5.2/releases/5.2.2/","https://pypi.org/project/Django/5.2.2/#files","https://github.com/django/django/blob/main/docs/releases/5.2.2.txt",[],"==========================\nDjango 5.2.2 release notes\n==========================\n\n*June 4, 2025*\n\nDjango 5.2.2 fixes a security issue with severity \"low\" and several bugs in\n5.2.1.\n\nCVE-2025-48432: Potential log injection via unescaped request path\n==================================================================\n\nInternal HTTP response logging used ``request.path`` directly, allowing control\ncharacters (e.g. newlines or ANSI escape sequences) to be written unescaped\ninto logs. This could enable log injection or forgery, letting attackers\nmanipulate log appearance or structure, especially in logs processed by\nexternal systems or viewed in terminals.\n\nAlthough this does not directly impact Django's security model, it poses risks\nwhen logs are consumed or interpreted by other tools. To fix this, the internal\n``django.utils.log.log_response()`` function now escapes all positional\nformatting arguments using a safe encoding.\n\nBugfixes\n========\n\n* Fixed a crash when using ``select_related``...",{"version":1167,"name":965,"description":1080,"publishedAt":1168,"htmlUrl":1169,"downloadUrl":1170,"docsUrl":1083,"githubUrl":1171,"features":1172,"content":1173,"isPrerelease":1034,"isLTS":1033,"isDraft":1034,"author":1035},"5.2.1","2025-05-07T00:00:00.000Z","https://docs.djangoproject.com/en/5.2/releases/5.2.1/","https://pypi.org/project/Django/5.2.1/#files","https://github.com/django/django/blob/main/docs/releases/5.2.1.txt",[],"==========================\nDjango 5.2.1 release notes\n==========================\n\n*May 7, 2025*\n\nDjango 5.2.1 fixes a security issue with severity \"moderate\" and several bugs\nin 5.2.\n\nThis release was built using an upgraded :pypi:`setuptools`, producing\nfilenames compliant with :pep:`491` and :pep:`625` and thus addressing a PyPI\nwarning about non-compliant distribution filenames. This change only affects\nthe Django packaging process and does not impact Django's behavior.\n\nCVE-2025-32873: Denial-of-service possibility in ``strip_tags()``\n=================================================================\n\n:func:`~django.utils.html.strip_tags` would be slow to evaluate certain inputs\ncontaining large sequences of incomplete HTML tags. This function is used to\nimplement the :tfilter:`striptags` template filter, which was thus also\nvulnerable.\n\n:func:`~django.utils.html.strip_tags` now raises a :exc:`.SuspiciousOperation`\nexception if it encounters an unusually large number of unclosed ope...",{"version":1175,"name":961,"description":1176,"publishedAt":1177,"htmlUrl":1178,"downloadUrl":1179,"docsUrl":1083,"githubUrl":1180,"features":1181,"content":1184,"isPrerelease":1034,"isLTS":1033,"isDraft":1034,"author":1035},"5.2","Key features: Automatic models import in the ``shell``, Composite Primary Keys","2025-04-02T00:00:00.000Z","https://docs.djangoproject.com/en/5.2/releases/5.2/","https://pypi.org/project/Django/5.2/#files","https://github.com/django/django/blob/main/docs/releases/5.2.txt",[1182,312,1183,1029,1030],"Automatic models import in the ``shell``","Simplified override of :class:`~django.forms.BoundField`","========================\nDjango 5.2 release notes\n========================\n\n*April 2, 2025*\n\nWelcome to Django 5.2!\n\nThese release notes cover the :ref:`new features \u003Cwhats-new-5.2>`, as well as\nsome :ref:`backwards incompatible changes \u003Cbackwards-incompatible-5.2>` you\nshould be aware of when upgrading from Django 5.1 or earlier. We've\n:ref:`begun the deprecation process for some features\n\u003Cdeprecated-features-5.2>`.\n\nSee the :doc:`/howto/upgrade-version` guide if you're updating an existing\nproject.\n\nDjango 5.2 is designated as a :term:`long-term support release\n\u003CLong-term support release>`. It will receive security updates for at least\nthree years after its release. Support for the previous LTS, Django 4.2, will\nend in April 2026.\n\nPython compatibility\n====================\n\nDjango 5.2 supports Python 3.10, 3.11, 3.12, 3.13, and 3.14 (as of 5.2.8). We\n**highly recommend** and only officially support the latest release of each\nseries.\n\n.. _whats-new-5.2:\n\nWhat's new in Django 5.2\n=====...",{"version":1186,"name":957,"description":1039,"publishedAt":1104,"htmlUrl":1187,"downloadUrl":1188,"docsUrl":1189,"githubUrl":1190,"features":1191,"content":1192,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"5.1.15","https://docs.djangoproject.com/en/5.1/releases/5.1.15/","https://pypi.org/project/Django/5.1.15/#files","https://docs.djangoproject.com/en/5.1/","https://github.com/django/django/blob/main/docs/releases/5.1.15.txt",[],"===========================\nDjango 5.1.15 release notes\n===========================\n\n*December 2, 2025*\n\nDjango 5.1.15 fixes one security issue with severity \"high\", one security issue\nwith severity \"moderate\", and one bug in 5.1.14.\n\nCVE-2025-13372: Potential SQL injection in ``FilteredRelation`` column aliases on PostgreSQL\n============================================================================================\n\n:class:`.FilteredRelation` was subject to SQL injection in column aliases,\nusing a suitably crafted dictionary, with dictionary expansion, as the\n``**kwargs`` passed to :meth:`.QuerySet.annotate` or :meth:`.QuerySet.alias` on\nPostgreSQL.\n\nCVE-2025-64460: Potential denial-of-service vulnerability in XML ``Deserializer``\n=================================================================================\n\n:ref:`XML Serialization \u003Cserialization-formats-xml>` was subject to a potential\ndenial-of-service attack due to quadratic time complexity when deserializing\ncrafted documents...",{"version":1194,"name":953,"description":1039,"publishedAt":1112,"htmlUrl":1195,"downloadUrl":1196,"docsUrl":1189,"githubUrl":1197,"features":1198,"content":1199,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"5.1.14","https://docs.djangoproject.com/en/5.1/releases/5.1.14/","https://pypi.org/project/Django/5.1.14/#files","https://github.com/django/django/blob/main/docs/releases/5.1.14.txt",[],"===========================\nDjango 5.1.14 release notes\n===========================\n\n*November 5, 2025*\n\nDjango 5.1.14 fixes one security issue with severity \"high\" and one security\nissue with severity \"moderate\" in 5.1.13.\n\nCVE-2025-64458: Potential denial-of-service vulnerability in ``HttpResponseRedirect`` and ``HttpResponsePermanentRedirect`` on Windows\n======================================================================================================================================\n\nPython's :func:`NFKC normalization \u003Cpython:unicodedata.normalize>` is slow on\nWindows. As a consequence, :class:`~django.http.HttpResponseRedirect`,\n:class:`~django.http.HttpResponsePermanentRedirect`, and the shortcut\n:func:`redirect() \u003Cdjango.shortcuts.redirect>` were subject to a potential\ndenial-of-service attack via certain inputs with a very large number of Unicode\ncharacters (follow up to :cve:`2025-27556`).\n\nCVE-2025-64459: Potential SQL injection via ``_connector`` keyword argument\n========...",{"version":1201,"name":949,"description":1039,"publishedAt":1120,"htmlUrl":1202,"downloadUrl":1203,"docsUrl":1189,"githubUrl":1204,"features":1205,"content":1206,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"5.1.13","https://docs.djangoproject.com/en/5.1/releases/5.1.13/","https://pypi.org/project/Django/5.1.13/#files","https://github.com/django/django/blob/main/docs/releases/5.1.13.txt",[],"===========================\nDjango 5.1.13 release notes\n===========================\n\n*October 1, 2025*\n\nDjango 5.1.13 fixes one security issue with severity \"high\" and one security\nissue with severity \"low\" in 5.1.12.\n\nCVE-2025-59681: Potential SQL injection in ``QuerySet.annotate()``, ``alias()``, ``aggregate()``, and ``extra()`` on MySQL and MariaDB\n======================================================================================================================================\n\n:meth:`.QuerySet.annotate`, :meth:`~.QuerySet.alias`,\n:meth:`~.QuerySet.aggregate`, and :meth:`~.QuerySet.extra` methods were subject\nto SQL injection in column aliases, using a suitably crafted dictionary, with\ndictionary expansion, as the ``**kwargs`` passed to these methods (follow up to\n:cve:`2022-28346`).\n\nCVE-2025-59682: Potential partial directory-traversal via ``archive.extract()``\n===============================================================================\n\nThe ``django.utils.archive.extract()...",{"version":1208,"name":945,"description":1039,"publishedAt":1128,"htmlUrl":1209,"downloadUrl":1210,"docsUrl":1189,"githubUrl":1211,"features":1212,"content":1213,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"5.1.12","https://docs.djangoproject.com/en/5.1/releases/5.1.12/","https://pypi.org/project/Django/5.1.12/#files","https://github.com/django/django/blob/main/docs/releases/5.1.12.txt",[],"===========================\nDjango 5.1.12 release notes\n===========================\n\n*September 3, 2025*\n\nDjango 5.1.12 fixes a security issue with severity \"high\" in 5.1.11.\n\nCVE-2025-57833: Potential SQL injection in ``FilteredRelation`` column aliases\n==============================================================================\n\n:class:`.FilteredRelation` was subject to SQL injection in column aliases,\nusing a suitably crafted dictionary, with dictionary expansion, as the\n``**kwargs`` passed to :meth:`.QuerySet.annotate` or :meth:`.QuerySet.alias`.\n...",{"version":1215,"name":941,"description":1039,"publishedAt":1152,"htmlUrl":1216,"downloadUrl":1217,"docsUrl":1189,"githubUrl":1218,"features":1219,"content":1220,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"5.1.11","https://docs.djangoproject.com/en/5.1/releases/5.1.11/","https://pypi.org/project/Django/5.1.11/#files","https://github.com/django/django/blob/main/docs/releases/5.1.11.txt",[],"===========================\nDjango 5.1.11 release notes\n===========================\n\n*June 10, 2025*\n\nDjango 5.1.11 fixes a potential log injection issue in 5.1.10.\n\nBugfixes\n========\n\n* Fixed a log injection possibility by migrating remaining response logging\n  to ``django.utils.log.log_response()``, which safely escapes arguments such\n  as the request path to prevent unsafe log output (:cve:`2025-48432`).\n...",{"version":1222,"name":937,"description":1039,"publishedAt":1160,"htmlUrl":1223,"downloadUrl":1224,"docsUrl":1189,"githubUrl":1225,"features":1226,"content":1227,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"5.1.10","https://docs.djangoproject.com/en/5.1/releases/5.1.10/","https://pypi.org/project/Django/5.1.10/#files","https://github.com/django/django/blob/main/docs/releases/5.1.10.txt",[],"===========================\nDjango 5.1.10 release notes\n===========================\n\n*June 4, 2025*\n\nDjango 5.1.10 fixes a security issue with severity \"low\" in 5.1.9.\n\nCVE-2025-48432: Potential log injection via unescaped request path\n==================================================================\n\nInternal HTTP response logging used ``request.path`` directly, allowing control\ncharacters (e.g. newlines or ANSI escape sequences) to be written unescaped\ninto logs. This could enable log injection or forgery, letting attackers\nmanipulate log appearance or structure, especially in logs processed by\nexternal systems or viewed in terminals.\n\nAlthough this does not directly impact Django's security model, it poses risks\nwhen logs are consumed or interpreted by other tools. To fix this, the internal\n``django.utils.log.log_response()`` function now escapes all positional\nformatting arguments using a safe encoding.\n...",{"version":1229,"name":1230,"description":1039,"publishedAt":1168,"htmlUrl":1231,"downloadUrl":1232,"docsUrl":1189,"githubUrl":1233,"features":1234,"content":1235,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"5.1.9","Django 5.1.9 release notes","https://docs.djangoproject.com/en/5.1/releases/5.1.9/","https://pypi.org/project/Django/5.1.9/#files","https://github.com/django/django/blob/main/docs/releases/5.1.9.txt",[],"==========================\nDjango 5.1.9 release notes\n==========================\n\n*May 7, 2025*\n\nDjango 5.1.9 fixes a security issue with severity \"moderate\", a data loss bug,\nand a regression in 5.1.8.\n\nThis release was built using an upgraded :pypi:`setuptools`, producing\nfilenames compliant with :pep:`491` and :pep:`625` and thus addressing a PyPI\nwarning about non-compliant distribution filenames. This change only affects\nthe Django packaging process and does not impact Django's behavior.\n\nCVE-2025-32873: Denial-of-service possibility in ``strip_tags()``\n=================================================================\n\n:func:`~django.utils.html.strip_tags` would be slow to evaluate certain inputs\ncontaining large sequences of incomplete HTML tags. This function is used to\nimplement the :tfilter:`striptags` template filter, which was thus also\nvulnerable.\n\n:func:`~django.utils.html.strip_tags` now raises a :exc:`.SuspiciousOperation`\nexception if it encounters an unusually large nu...",{"version":1237,"name":1238,"description":1039,"publishedAt":1177,"htmlUrl":1239,"downloadUrl":1240,"docsUrl":1189,"githubUrl":1241,"features":1242,"content":1243,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"5.1.8","Django 5.1.8 release notes","https://docs.djangoproject.com/en/5.1/releases/5.1.8/","https://pypi.org/project/Django/5.1.8/#files","https://github.com/django/django/blob/main/docs/releases/5.1.8.txt",[],"==========================\nDjango 5.1.8 release notes\n==========================\n\n*April 2, 2025*\n\nDjango 5.1.8 fixes a security issue with severity \"moderate\" and several bugs\nin 5.1.7.\n\nCVE-2025-27556: Potential denial-of-service vulnerability in ``LoginView``, ``LogoutView``, and ``set_language()`` on Windows\n=============================================================================================================================\n\nPython's :func:`NFKC normalization \u003Cpython:unicodedata.normalize>` is slow on\nWindows. As a consequence, :class:`~django.contrib.auth.views.LoginView`,\n:class:`~django.contrib.auth.views.LogoutView`, and\n:func:`~django.views.i18n.set_language` were subject to a potential\ndenial-of-service attack via certain inputs with a very large number of Unicode\ncharacters.\n\nBugfixes\n========\n\n* Fixed a regression in Django 5.1.7 where the removal of the ``single_object``\n  parameter unintentionally altered the signature and return type of\n  ``LogEntryManager.log_ac...",{"version":1245,"name":1246,"description":1039,"publishedAt":1247,"htmlUrl":1248,"downloadUrl":1249,"docsUrl":1189,"githubUrl":1250,"features":1251,"content":1252,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"5.1.7","Django 5.1.7 release notes","2025-03-06T00:00:00.000Z","https://docs.djangoproject.com/en/5.1/releases/5.1.7/","https://pypi.org/project/Django/5.1.7/#files","https://github.com/django/django/blob/main/docs/releases/5.1.7.txt",[],"==========================\nDjango 5.1.7 release notes\n==========================\n\n*March 6, 2025*\n\nDjango 5.1.7 fixes a security issue with severity \"moderate\" and several bugs\nin 5.1.6.\n\nCVE-2025-26699: Potential denial-of-service vulnerability in ``django.utils.text.wrap()``\n=========================================================================================\n\nThe ``wrap()`` and :tfilter:`wordwrap` template filter were subject to a\npotential denial-of-service attack when used with very long strings.\n\nBugfixes\n========\n\n* Fixed a bug in Django 5.1 where the ``{% querystring %}`` template tag\n  returned an empty string rather than ``\"?\"`` when all parameters had been\n  removed from the query string (:ticket:`36182`).\n\n* Fixed a bug in Django 5.1 where ``FileSystemStorage``, with\n  ``allow_overwrite`` set to ``True``, did not truncate the overwritten file\n  content (:ticket:`36191`).\n\n* Fixed a regression in Django 5.1 where the ``count`` and ``exists`` methods\n  of ``ManyToManyFiel...",{"version":1254,"name":1255,"description":1039,"publishedAt":1256,"htmlUrl":1257,"downloadUrl":1258,"docsUrl":1189,"githubUrl":1259,"features":1260,"content":1261,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"5.1.6","Django 5.1.6 release notes","2025-02-05T00:00:00.000Z","https://docs.djangoproject.com/en/5.1/releases/5.1.6/","https://pypi.org/project/Django/5.1.6/#files","https://github.com/django/django/blob/main/docs/releases/5.1.6.txt",[],"==========================\nDjango 5.1.6 release notes\n==========================\n\n*February 5, 2025*\n\nDjango 5.1.6 fixes several bugs in 5.1.5.\n\nBugfixes\n========\n\n* Fixed a regression in Django 5.1.5 that caused ``validate_ipv6_address()``\n  and ``validate_ipv46_address()`` to crash when handling non-string values\n  (:ticket:`36098`).\n\n* Fixed a regression in Django 5.1 where password fields, despite being set to\n  ``required=False``, were still treated as required in forms derived from\n  :class:`~django.contrib.auth.forms.BaseUserCreationForm` (:ticket:`36140`).\n...",{"version":1263,"name":1264,"description":1039,"publishedAt":1265,"htmlUrl":1266,"downloadUrl":1267,"docsUrl":1189,"githubUrl":1268,"features":1269,"content":1270,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"5.1.5","Django 5.1.5 release notes","2025-01-14T00:00:00.000Z","https://docs.djangoproject.com/en/5.1/releases/5.1.5/","https://pypi.org/project/Django/5.1.5/#files","https://github.com/django/django/blob/main/docs/releases/5.1.5.txt",[],"==========================\nDjango 5.1.5 release notes\n==========================\n\n*January 14, 2025*\n\nDjango 5.1.5 fixes a security issue with severity \"moderate\" and one bug in\n5.1.4.\n\nCVE-2024-56374: Potential denial-of-service vulnerability in IPv6 validation\n============================================================================\n\nLack of upper bound limit enforcement in strings passed when performing IPv6\nvalidation could lead to a potential denial-of-service attack. The undocumented\nand private functions ``clean_ipv6_address`` and ``is_valid_ipv6_address`` were\nvulnerable, as was the  :class:`django.forms.GenericIPAddressField` form field,\nwhich has now been updated to define a ``max_length`` of 39 characters.\n\nThe :class:`django.db.models.GenericIPAddressField` model field was not\naffected.\n\nBugfixes\n========\n\n* Fixed a crash when applying migrations with references to the removed\n  ``Meta.index_together`` option (:ticket:`34856`).\n...",{"version":1272,"name":1273,"description":1039,"publishedAt":1274,"htmlUrl":1275,"downloadUrl":1276,"docsUrl":1189,"githubUrl":1277,"features":1278,"content":1279,"isPrerelease":1034,"isLTS":1034,"isDraft":1034,"author":1035},"5.1.4","Django 5.1.4 release notes","2024-12-04T00:00:00.000Z","https://docs.djangoproject.com/en/5.1/releases/5.1.4/","https://pypi.org/project/Django/5.1.4/#files","https://github.com/django/django/blob/main/docs/releases/5.1.4.txt",[],"==========================\nDjango 5.1.4 release notes\n==========================\n\n*December 4, 2024*\n\nDjango 5.1.4 fixes one security issue with severity \"high\", one security issue\nwith severity \"moderate\", and several bugs in 5.1.3.\n\nCVE-2024-53907: Denial-of-service possibility in ``strip_tags()``\n=================================================================\n\n:func:`~django.utils.html.strip_tags` would be extremely slow to evaluate\ncertain inputs containing large sequences of nested incomplete HTML entities.\nThe ``strip_tags()`` method is used to implement the corresponding\n:tfilter:`striptags` template filter, which was thus also vulnerable.\n\n``strip_tags()`` now has an upper limit of recursive calls to ``HTMLParser``\nbefore raising a :exc:`.SuspiciousOperation` exception.\n\nRemember that absolutely NO guarantee is provided about the results of\n``strip_tags()`` being HTML safe. So NEVER mark safe the result of a\n``strip_tags()`` call without escaping it first, for example with\n:f...","2026-03-02T18:08:21.451Z",1772474894714]