[{"data":1,"prerenderedAt":2002},["ShallowReactive",2],{"navigation":3,"/development-environment":1016,"/development-environment-surround":1997},[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",{"id":1017,"title":60,"body":1018,"description":1028,"extension":1991,"links":1992,"meta":1993,"navigation":1994,"path":56,"seo":1995,"stem":57,"__hash__":1996},"docs/02.development-environment/1.index.md",{"type":1019,"value":1020,"toc":1947},"minimark",[1021,1025,1029,1034,1037,1071,1075,1080,1085,1096,1101,1115,1120,1134,1139,1153,1157,1161,1175,1180,1194,1199,1213,1218,1232,1236,1240,1254,1258,1272,1276,1290,1294,1298,1402,1406,1439,1443,1585,1589,1593,1629,1633,1650,1654,1658,1675,1679,1696,1700,1704,1721,1725,1742,1746,1750,1767,1771,1788,1792,1796,1809,1813,1826,1830,1844,1848,1852,1866,1870,1884,1887,1901,1905,1908,1940,1943],[1022,1023,60],"h1",{"id":1024},"development-environment",[1026,1027,1028],"p",{},"A well-configured development environment is crucial for productive Django development. This section covers everything you need to set up a professional, efficient, and maintainable development workflow that scales from personal projects to enterprise applications.",[1030,1031,1033],"h2",{"id":1032},"why-development-environment-matters","Why Development Environment Matters",[1026,1035,1036],{},"Your development environment directly impacts:",[1038,1039,1040,1048,1054,1060,1065],"ul",{},[1041,1042,1043,1047],"li",{},[1044,1045,1046],"strong",{},"Productivity"," - Faster coding, debugging, and testing cycles",[1041,1049,1050,1053],{},[1044,1051,1052],{},"Code Quality"," - Better tooling leads to fewer bugs and cleaner code",[1041,1055,1056,1059],{},[1044,1057,1058],{},"Collaboration"," - Consistent environments across team members",[1041,1061,1062,1064],{},[1044,1063,737],{}," - Smoother transitions from development to production",[1041,1066,1067,1070],{},[1044,1068,1069],{},"Learning"," - Better tools accelerate skill development",[1030,1072,1074],{"id":1073},"core-components-overview","Core Components Overview",[1076,1077,1079],"h3",{"id":1078},"essential-tools","Essential Tools",[1026,1081,1082],{},[1044,1083,1084],{},"Python Environment Management",[1038,1086,1087,1090,1093],{},[1041,1088,1089],{},"Virtual environments for dependency isolation",[1041,1091,1092],{},"Package managers (pip, pipenv, poetry)",[1041,1094,1095],{},"Python version management (pyenv, conda)",[1026,1097,1098],{},[1044,1099,1100],{},"Code Editors and IDEs",[1038,1102,1103,1106,1109,1112],{},[1041,1104,1105],{},"VS Code with Django extensions",[1041,1107,1108],{},"PyCharm Professional/Community",[1041,1110,1111],{},"Vim/Neovim with Python plugins",[1041,1113,1114],{},"Sublime Text with Django packages",[1026,1116,1117],{},[1044,1118,1119],{},"Database Tools",[1038,1121,1122,1125,1128,1131],{},[1041,1123,1124],{},"PostgreSQL with pgAdmin",[1041,1126,1127],{},"MySQL with MySQL Workbench",[1041,1129,1130],{},"SQLite browser for development",[1041,1132,1133],{},"Database migration tools",[1026,1135,1136],{},[1044,1137,1138],{},"Version Control",[1038,1140,1141,1144,1147,1150],{},[1041,1142,1143],{},"Git with proper configuration",[1041,1145,1146],{},"GitHub/GitLab integration",[1041,1148,1149],{},"Pre-commit hooks for code quality",[1041,1151,1152],{},"Branch management strategies",[1076,1154,1156],{"id":1155},"development-workflow-tools","Development Workflow Tools",[1026,1158,1159],{},[1044,1160,1052],{},[1038,1162,1163,1166,1169,1172],{},[1041,1164,1165],{},"Linters (flake8, pylint, ruff)",[1041,1167,1168],{},"Formatters (black, isort)",[1041,1170,1171],{},"Type checkers (mypy, pyright)",[1041,1173,1174],{},"Security scanners (bandit, safety)",[1026,1176,1177],{},[1044,1178,1179],{},"Testing Framework",[1038,1181,1182,1185,1188,1191],{},[1041,1183,1184],{},"pytest with Django plugin",[1041,1186,1187],{},"Coverage reporting tools",[1041,1189,1190],{},"Factory libraries for test data",[1041,1192,1193],{},"Mock and fixture management",[1026,1195,1196],{},[1044,1197,1198],{},"Debugging Tools",[1038,1200,1201,1204,1207,1210],{},[1041,1202,1203],{},"Django Debug Toolbar",[1041,1205,1206],{},"Python debugger (pdb, ipdb)",[1041,1208,1209],{},"Browser developer tools",[1041,1211,1212],{},"Logging configuration",[1026,1214,1215],{},[1044,1216,1217],{},"Performance Monitoring",[1038,1219,1220,1223,1226,1229],{},[1041,1221,1222],{},"Django Silk for profiling",[1041,1224,1225],{},"Memory profilers",[1041,1227,1228],{},"Database query analyzers",[1041,1230,1231],{},"Load testing tools",[1030,1233,1235],{"id":1234},"environment-types","Environment Types",[1076,1237,1239],{"id":1238},"local-development","Local Development",[1038,1241,1242,1245,1248,1251],{},[1041,1243,1244],{},"Fast iteration cycles",[1041,1246,1247],{},"Full debugging capabilities",[1041,1249,1250],{},"Database seeding and fixtures",[1041,1252,1253],{},"Hot reloading and auto-restart",[1076,1255,1257],{"id":1256},"staging-environment","Staging Environment",[1038,1259,1260,1263,1266,1269],{},[1041,1261,1262],{},"Production-like configuration",[1041,1264,1265],{},"Integration testing",[1041,1267,1268],{},"Performance validation",[1041,1270,1271],{},"Deployment rehearsal",[1076,1273,1275],{"id":1274},"production-environment","Production Environment",[1038,1277,1278,1281,1284,1287],{},[1041,1279,1280],{},"Optimized for performance",[1041,1282,1283],{},"Security hardened",[1041,1285,1286],{},"Monitoring and logging",[1041,1288,1289],{},"Scalability considerations",[1030,1291,1293],{"id":1292},"configuration-management","Configuration Management",[1076,1295,1297],{"id":1296},"settings-organization","Settings Organization",[1299,1300,1305],"pre",{"className":1301,"code":1302,"language":1303,"meta":1304,"style":1304},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# settings/\n├── __init__.py\n├── base.py          # Common settings\n├── development.py   # Local development\n├── staging.py       # Staging environment\n├── production.py    # Production settings\n└── testing.py       # Test configuration\n","python","",[1306,1307,1308,1317,1336,1350,1363,1376,1389],"code",{"__ignoreMap":1304},[1309,1310,1313],"span",{"class":1311,"line":1312},"line",1,[1309,1314,1316],{"class":1315},"s9Tkl","# settings/\n",[1309,1318,1320,1324,1328,1332],{"class":1311,"line":1319},2,[1309,1321,1323],{"class":1322},"sftqT","├── ",[1309,1325,1327],{"class":1326},"sJdAF","__init__",[1309,1329,1331],{"class":1330},"soVBu",".",[1309,1333,1335],{"class":1334},"sBPpx","py\n",[1309,1337,1339,1342,1344,1347],{"class":1311,"line":1338},3,[1309,1340,1341],{"class":1322},"├── base",[1309,1343,1331],{"class":1330},[1309,1345,1346],{"class":1334},"py",[1309,1348,1349],{"class":1315},"          # Common settings\n",[1309,1351,1353,1356,1358,1360],{"class":1311,"line":1352},4,[1309,1354,1355],{"class":1322},"├── development",[1309,1357,1331],{"class":1330},[1309,1359,1346],{"class":1334},[1309,1361,1362],{"class":1315},"   # Local development\n",[1309,1364,1366,1369,1371,1373],{"class":1311,"line":1365},5,[1309,1367,1368],{"class":1322},"├── staging",[1309,1370,1331],{"class":1330},[1309,1372,1346],{"class":1334},[1309,1374,1375],{"class":1315},"       # Staging environment\n",[1309,1377,1379,1382,1384,1386],{"class":1311,"line":1378},6,[1309,1380,1381],{"class":1322},"├── production",[1309,1383,1331],{"class":1330},[1309,1385,1346],{"class":1334},[1309,1387,1388],{"class":1315},"    # Production settings\n",[1309,1390,1392,1395,1397,1399],{"class":1311,"line":1391},7,[1309,1393,1394],{"class":1322},"└── testing",[1309,1396,1331],{"class":1330},[1309,1398,1346],{"class":1334},[1309,1400,1401],{"class":1315},"       # Test configuration\n",[1076,1403,1405],{"id":1404},"environment-variables","Environment Variables",[1299,1407,1411],{"className":1408,"code":1409,"language":1410,"meta":1304,"style":1304},"language-bash shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# .env files for different environments\n.env.development\n.env.staging\n.env.production\n.env.testing\n","bash",[1306,1412,1413,1418,1424,1429,1434],{"__ignoreMap":1304},[1309,1414,1415],{"class":1311,"line":1312},[1309,1416,1417],{"class":1315},"# .env files for different environments\n",[1309,1419,1420],{"class":1311,"line":1319},[1309,1421,1423],{"class":1422},"sYn-s",".env.development\n",[1309,1425,1426],{"class":1311,"line":1338},[1309,1427,1428],{"class":1422},".env.staging\n",[1309,1430,1431],{"class":1311,"line":1352},[1309,1432,1433],{"class":1422},".env.production\n",[1309,1435,1436],{"class":1311,"line":1365},[1309,1437,1438],{"class":1422},".env.testing\n",[1076,1440,1442],{"id":1441},"docker-integration","Docker Integration",[1299,1444,1448],{"className":1445,"code":1446,"language":1447,"meta":1304,"style":1304},"language-yaml shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# docker-compose.yml for consistent environments\nversion: '3.8'\nservices:\n  web:\n    build: .\n    volumes:\n      - .:/app\n    environment:\n      - DEBUG=1\n    depends_on:\n      - db\n  db:\n    image: postgres:15\n    environment:\n      POSTGRES_DB: django_dev\n","yaml",[1306,1449,1450,1455,1475,1483,1490,1501,1508,1516,1524,1532,1540,1548,1556,1567,1574],{"__ignoreMap":1304},[1309,1451,1452],{"class":1311,"line":1312},[1309,1453,1454],{"class":1315},"# docker-compose.yml for consistent environments\n",[1309,1456,1457,1461,1464,1468,1472],{"class":1311,"line":1319},[1309,1458,1460],{"class":1459},"suXOh","version",[1309,1462,1463],{"class":1330},":",[1309,1465,1467],{"class":1466},"sbYkP"," '",[1309,1469,1471],{"class":1470},"sTbE_","3.8",[1309,1473,1474],{"class":1466},"'\n",[1309,1476,1477,1480],{"class":1311,"line":1338},[1309,1478,1479],{"class":1459},"services",[1309,1481,1482],{"class":1330},":\n",[1309,1484,1485,1488],{"class":1311,"line":1352},[1309,1486,1487],{"class":1459},"  web",[1309,1489,1482],{"class":1330},[1309,1491,1492,1495,1497],{"class":1311,"line":1365},[1309,1493,1494],{"class":1459},"    build",[1309,1496,1463],{"class":1330},[1309,1498,1500],{"class":1499},"s7CZa"," .\n",[1309,1502,1503,1506],{"class":1311,"line":1378},[1309,1504,1505],{"class":1459},"    volumes",[1309,1507,1482],{"class":1330},[1309,1509,1510,1513],{"class":1311,"line":1391},[1309,1511,1512],{"class":1330},"      -",[1309,1514,1515],{"class":1470}," .:/app\n",[1309,1517,1519,1522],{"class":1311,"line":1518},8,[1309,1520,1521],{"class":1459},"    environment",[1309,1523,1482],{"class":1330},[1309,1525,1527,1529],{"class":1311,"line":1526},9,[1309,1528,1512],{"class":1330},[1309,1530,1531],{"class":1470}," DEBUG=1\n",[1309,1533,1535,1538],{"class":1311,"line":1534},10,[1309,1536,1537],{"class":1459},"    depends_on",[1309,1539,1482],{"class":1330},[1309,1541,1543,1545],{"class":1311,"line":1542},11,[1309,1544,1512],{"class":1330},[1309,1546,1547],{"class":1470}," db\n",[1309,1549,1551,1554],{"class":1311,"line":1550},12,[1309,1552,1553],{"class":1459},"  db",[1309,1555,1482],{"class":1330},[1309,1557,1559,1562,1564],{"class":1311,"line":1558},13,[1309,1560,1561],{"class":1459},"    image",[1309,1563,1463],{"class":1330},[1309,1565,1566],{"class":1470}," postgres:15\n",[1309,1568,1570,1572],{"class":1311,"line":1569},14,[1309,1571,1521],{"class":1459},[1309,1573,1482],{"class":1330},[1309,1575,1577,1580,1582],{"class":1311,"line":1576},15,[1309,1578,1579],{"class":1459},"      POSTGRES_DB",[1309,1581,1463],{"class":1330},[1309,1583,1584],{"class":1470}," django_dev\n",[1030,1586,1588],{"id":1587},"development-workflow","Development Workflow",[1076,1590,1592],{"id":1591},"daily-development-cycle","Daily Development Cycle",[1594,1595,1596,1602,1608,1613,1618,1623],"ol",{},[1041,1597,1598,1601],{},[1044,1599,1600],{},"Environment Activation"," - Virtual environment and services",[1041,1603,1604,1607],{},[1044,1605,1606],{},"Code Changes"," - Feature development with live reloading",[1041,1609,1610,1612],{},[1044,1611,579],{}," - Automated tests and manual verification",[1041,1614,1615,1617],{},[1044,1616,1052],{}," - Linting, formatting, and type checking",[1041,1619,1620,1622],{},[1044,1621,1138],{}," - Commits with meaningful messages",[1041,1624,1625,1628],{},[1044,1626,1627],{},"Documentation"," - Code comments and project documentation",[1076,1630,1632],{"id":1631},"team-collaboration","Team Collaboration",[1038,1634,1635,1638,1641,1644,1647],{},[1041,1636,1637],{},"Shared development standards",[1041,1639,1640],{},"Code review processes",[1041,1642,1643],{},"Consistent tooling across team",[1041,1645,1646],{},"Environment reproducibility",[1041,1648,1649],{},"Knowledge sharing practices",[1030,1651,1653],{"id":1652},"performance-optimization","Performance Optimization",[1076,1655,1657],{"id":1656},"development-speed","Development Speed",[1038,1659,1660,1663,1666,1669,1672],{},[1041,1661,1662],{},"Fast test execution",[1041,1664,1665],{},"Quick server restart",[1041,1667,1668],{},"Efficient debugging workflow",[1041,1670,1671],{},"Optimized IDE configuration",[1041,1673,1674],{},"Keyboard shortcuts and automation",[1076,1676,1678],{"id":1677},"resource-management","Resource Management",[1038,1680,1681,1684,1687,1690,1693],{},[1041,1682,1683],{},"Memory usage monitoring",[1041,1685,1686],{},"Database query optimization",[1041,1688,1689],{},"Static file handling",[1041,1691,1692],{},"Cache configuration",[1041,1694,1695],{},"Background task processing",[1030,1697,1699],{"id":1698},"security-considerations","Security Considerations",[1076,1701,1703],{"id":1702},"development-security","Development Security",[1038,1705,1706,1709,1712,1715,1718],{},[1041,1707,1708],{},"Secure default configurations",[1041,1710,1711],{},"Environment variable management",[1041,1713,1714],{},"Database access controls",[1041,1716,1717],{},"API key protection",[1041,1719,1720],{},"Local HTTPS setup",[1076,1722,1724],{"id":1723},"code-security","Code Security",[1038,1726,1727,1730,1733,1736,1739],{},[1041,1728,1729],{},"Dependency vulnerability scanning",[1041,1731,1732],{},"Static security analysis",[1041,1734,1735],{},"Secure coding practices",[1041,1737,1738],{},"Authentication testing",[1041,1740,1741],{},"Input validation verification",[1030,1743,1745],{"id":1744},"troubleshooting-common-issues","Troubleshooting Common Issues",[1076,1747,1749],{"id":1748},"environment-problems","Environment Problems",[1038,1751,1752,1755,1758,1761,1764],{},[1041,1753,1754],{},"Python version conflicts",[1041,1756,1757],{},"Package dependency issues",[1041,1759,1760],{},"Database connection errors",[1041,1762,1763],{},"Port conflicts and service issues",[1041,1765,1766],{},"Permission and access problems",[1076,1768,1770],{"id":1769},"performance-issues","Performance Issues",[1038,1772,1773,1776,1779,1782,1785],{},[1041,1774,1775],{},"Slow query identification",[1041,1777,1778],{},"Memory leak detection",[1041,1780,1781],{},"Template rendering optimization",[1041,1783,1784],{},"Static file serving problems",[1041,1786,1787],{},"Background task bottlenecks",[1030,1789,1791],{"id":1790},"chapter-structure","Chapter Structure",[1076,1793,1795],{"id":1794},"tool-setup-and-configuration","Tool Setup and Configuration",[1026,1797,1798,1801,1802,1804,1805,1808],{},[1044,1799,1800],{},"Recommended Tooling"," - Essential tools for Django development\n",[1044,1803,66],{}," - Dependency isolation and management\n",[1044,1806,1807],{},"Project Settings"," - Configuration management strategies",[1076,1810,1812],{"id":1811},"environment-management","Environment Management",[1026,1814,1815,1817,1818,1821,1822,1825],{},[1044,1816,1235],{}," - Local, staging, and production setup\n",[1044,1819,1820],{},"Development Server"," - Running and configuring Django's dev server\n",[1044,1823,1824],{},"Admin and Management"," - Django's built-in administrative tools",[1076,1827,1829],{"id":1828},"advanced-workflows","Advanced Workflows",[1026,1831,1832,1835,1836,1839,1840,1843],{},[1044,1833,1834],{},"Django Shell"," - Interactive development and debugging\n",[1044,1837,1838],{},"Database Management"," - Migrations, fixtures, and optimization\n",[1044,1841,1842],{},"Testing Integration"," - Automated testing in development workflow",[1030,1845,1847],{"id":1846},"best-practices-preview","Best Practices Preview",[1076,1849,1851],{"id":1850},"code-organization","Code Organization",[1038,1853,1854,1857,1860,1863],{},[1041,1855,1856],{},"Consistent project structure",[1041,1858,1859],{},"Modular settings configuration",[1041,1861,1862],{},"Proper dependency management",[1041,1864,1865],{},"Version control best practices",[1076,1867,1869],{"id":1868},"development-efficiency","Development Efficiency",[1038,1871,1872,1875,1878,1881],{},[1041,1873,1874],{},"Automated code formatting",[1041,1876,1877],{},"Pre-commit quality checks",[1041,1879,1880],{},"Fast feedback loops",[1041,1882,1883],{},"Debugging optimization",[1076,1885,1632],{"id":1886},"team-collaboration-1",[1038,1888,1889,1892,1895,1898],{},[1041,1890,1891],{},"Reproducible environments",[1041,1893,1894],{},"Shared coding standards",[1041,1896,1897],{},"Documentation practices",[1041,1899,1900],{},"Knowledge transfer methods",[1030,1902,1904],{"id":1903},"getting-started","Getting Started",[1026,1906,1907],{},"To begin setting up your Django development environment:",[1594,1909,1910,1916,1922,1928,1934],{},[1041,1911,1912,1915],{},[1044,1913,1914],{},"Choose Your Tools"," - Select editor, database, and utilities",[1041,1917,1918,1921],{},[1044,1919,1920],{},"Configure Environment"," - Set up virtual environments and dependencies",[1041,1923,1924,1927],{},[1044,1925,1926],{},"Establish Workflow"," - Create development processes and standards",[1041,1929,1930,1933],{},[1044,1931,1932],{},"Optimize Setup"," - Fine-tune for productivity and performance",[1041,1935,1936,1939],{},[1044,1937,1938],{},"Document Process"," - Share knowledge with team members",[1026,1941,1942],{},"This comprehensive approach ensures you have a robust, efficient development environment that supports both individual productivity and team collaboration while maintaining code quality and security standards.",[1944,1945,1946],"style",{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .suXOh, html code.shiki .suXOh{--shiki-light:#E53935;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}",{"title":1304,"searchDepth":1312,"depth":1319,"links":1948},[1949,1950,1954,1959,1964,1968,1972,1976,1980,1985,1990],{"id":1032,"depth":1319,"text":1033},{"id":1073,"depth":1319,"text":1074,"children":1951},[1952,1953],{"id":1078,"depth":1338,"text":1079},{"id":1155,"depth":1338,"text":1156},{"id":1234,"depth":1319,"text":1235,"children":1955},[1956,1957,1958],{"id":1238,"depth":1338,"text":1239},{"id":1256,"depth":1338,"text":1257},{"id":1274,"depth":1338,"text":1275},{"id":1292,"depth":1319,"text":1293,"children":1960},[1961,1962,1963],{"id":1296,"depth":1338,"text":1297},{"id":1404,"depth":1338,"text":1405},{"id":1441,"depth":1338,"text":1442},{"id":1587,"depth":1319,"text":1588,"children":1965},[1966,1967],{"id":1591,"depth":1338,"text":1592},{"id":1631,"depth":1338,"text":1632},{"id":1652,"depth":1319,"text":1653,"children":1969},[1970,1971],{"id":1656,"depth":1338,"text":1657},{"id":1677,"depth":1338,"text":1678},{"id":1698,"depth":1319,"text":1699,"children":1973},[1974,1975],{"id":1702,"depth":1338,"text":1703},{"id":1723,"depth":1338,"text":1724},{"id":1744,"depth":1319,"text":1745,"children":1977},[1978,1979],{"id":1748,"depth":1338,"text":1749},{"id":1769,"depth":1338,"text":1770},{"id":1790,"depth":1319,"text":1791,"children":1981},[1982,1983,1984],{"id":1794,"depth":1338,"text":1795},{"id":1811,"depth":1338,"text":1812},{"id":1828,"depth":1338,"text":1829},{"id":1846,"depth":1319,"text":1847,"children":1986},[1987,1988,1989],{"id":1850,"depth":1338,"text":1851},{"id":1868,"depth":1338,"text":1869},{"id":1886,"depth":1338,"text":1632},{"id":1903,"depth":1319,"text":1904},"md",null,{},true,{"title":60,"description":1028},"_kIfW_U9duzu69cc732w0qdbXwlkAW9z-Aix6h8wMD0",[1998,2000],{"title":51,"path":52,"stem":53,"description":1999,"children":-1},"Django settings are the configuration backbone of your Django project. They control everything from database connections to security features, middleware configuration, and application behavior. Understanding how to properly configure and manage settings is crucial for building robust Django applications.",{"title":62,"path":63,"stem":64,"description":2001,"children":-1},"The right tools can dramatically improve your Django development experience. This comprehensive guide covers essential tools, their configuration, and best practices for creating a productive development environment.",1772474899962]