[{"data":1,"prerenderedAt":3605},["ShallowReactive",2],{"navigation":3,"/introduction-and-foundations/what-is-django":1016,"/introduction-and-foundations/what-is-django-surround":3600},[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":11,"body":1018,"description":1028,"extension":3595,"links":3596,"meta":3597,"navigation":1303,"path":12,"seo":3598,"stem":13,"__hash__":3599},"docs/01.introduction-and-foundations/02.what-is-django.md",{"type":1019,"value":1020,"toc":3561},"minimark",[1021,1025,1029,1034,1037,1040,1044,1052,1080,1084,1089,1092,1395,1399,1402,1433,1541,1545,1548,1573,1577,1580,1612,1616,1619,1978,1982,1986,1989,2125,2129,2132,2347,2351,2354,2539,2543,2546,2792,2796,2800,2806,2814,2820,2828,2834,2842,2848,2856,2862,2870,2874,2899,2903,2907,3097,3101,3127,3130,3133,3136,3272,3275,3441,3445,3448,3484,3488,3492,3530,3534,3554,3557],[1022,1023,11],"h1",{"id":1024},"what-is-django",[1026,1027,1028],"p",{},"Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers at the Lawrence Journal-World newspaper, it takes care of much of the hassle of web development, so you can focus on writing your app without needing to reinvent the wheel.",[1030,1031,1033],"h2",{"id":1032},"the-django-story","The Django Story",[1026,1035,1036],{},"Django was created in 2003 by Adrian Holovaty and Simon Willison while working at the Lawrence Journal-World newspaper in Kansas. They needed to build web applications quickly to meet tight newsroom deadlines, leading to the creation of a framework that prioritizes rapid development and clean code.",[1026,1038,1039],{},"The framework was named after Django Reinhardt, a jazz guitarist known for his innovative style and technical prowess – qualities that the framework embodies in web development.",[1030,1041,1043],{"id":1042},"core-philosophy","Core Philosophy",[1026,1045,1046,1047,1051],{},"Django follows the ",[1048,1049,1050],"strong",{},"\"batteries included\""," philosophy, providing a comprehensive set of tools and features out of the box:",[1053,1054,1055,1062,1068,1074],"ul",{},[1056,1057,1058,1061],"li",{},[1048,1059,1060],{},"Don't Repeat Yourself (DRY)",": Avoid code duplication",[1056,1063,1064,1067],{},[1048,1065,1066],{},"Convention over Configuration",": Sensible defaults reduce boilerplate",[1056,1069,1070,1073],{},[1048,1071,1072],{},"Explicit is Better than Implicit",": Clear, readable code",[1056,1075,1076,1079],{},[1048,1077,1078],{},"Loose Coupling",": Components should be independent and reusable",[1030,1081,1083],{"id":1082},"key-features-and-benefits","Key Features and Benefits",[1085,1086,1088],"h3",{"id":1087},"_1-rapid-development","1. Rapid Development",[1026,1090,1091],{},"Django's design enables developers to build applications quickly:",[1093,1094,1099],"pre",{"className":1095,"code":1096,"language":1097,"meta":1098,"style":1098},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Create a blog post model in minutes\nclass BlogPost(models.Model):\n    title = models.CharField(max_length=200)\n    content = models.TextField()\n    author = models.ForeignKey(User, on_delete=models.CASCADE)\n    created_at = models.DateTimeField(auto_now_add=True)\n    \n    def __str__(self):\n        return self.title\n\n# Automatic admin interface\n@admin.register(BlogPost)\nclass BlogPostAdmin(admin.ModelAdmin):\n    list_display = ['title', 'author', 'created_at']\n","python","",[1100,1101,1102,1111,1139,1173,1191,1229,1257,1263,1281,1298,1305,1311,1333,1352],"code",{"__ignoreMap":1098},[1103,1104,1107],"span",{"class":1105,"line":1106},"line",1,[1103,1108,1110],{"class":1109},"s9Tkl","# Create a blog post model in minutes\n",[1103,1112,1114,1118,1122,1126,1130,1133,1136],{"class":1105,"line":1113},2,[1103,1115,1117],{"class":1116},"s5Kfy","class",[1103,1119,1121],{"class":1120},"sD-vU"," BlogPost",[1103,1123,1125],{"class":1124},"soVBu","(",[1103,1127,1129],{"class":1128},"sYn-s","models",[1103,1131,1132],{"class":1124},".",[1103,1134,1135],{"class":1128},"Model",[1103,1137,1138],{"class":1124},"):\n",[1103,1140,1142,1146,1149,1152,1154,1158,1160,1164,1166,1170],{"class":1105,"line":1141},3,[1103,1143,1145],{"class":1144},"sftqT","    title ",[1103,1147,1148],{"class":1124},"=",[1103,1150,1151],{"class":1144}," models",[1103,1153,1132],{"class":1124},[1103,1155,1157],{"class":1156},"siWMO","CharField",[1103,1159,1125],{"class":1124},[1103,1161,1163],{"class":1162},"sqOPj","max_length",[1103,1165,1148],{"class":1124},[1103,1167,1169],{"class":1168},"s7CZa","200",[1103,1171,1172],{"class":1124},")\n",[1103,1174,1176,1179,1181,1183,1185,1188],{"class":1105,"line":1175},4,[1103,1177,1178],{"class":1144},"    content ",[1103,1180,1148],{"class":1124},[1103,1182,1151],{"class":1144},[1103,1184,1132],{"class":1124},[1103,1186,1187],{"class":1156},"TextField",[1103,1189,1190],{"class":1124},"()\n",[1103,1192,1194,1197,1199,1201,1203,1206,1208,1211,1214,1217,1219,1221,1223,1227],{"class":1105,"line":1193},5,[1103,1195,1196],{"class":1144},"    author ",[1103,1198,1148],{"class":1124},[1103,1200,1151],{"class":1144},[1103,1202,1132],{"class":1124},[1103,1204,1205],{"class":1156},"ForeignKey",[1103,1207,1125],{"class":1124},[1103,1209,1210],{"class":1156},"User",[1103,1212,1213],{"class":1124},",",[1103,1215,1216],{"class":1162}," on_delete",[1103,1218,1148],{"class":1124},[1103,1220,1129],{"class":1156},[1103,1222,1132],{"class":1124},[1103,1224,1226],{"class":1225},"sFGJz","CASCADE",[1103,1228,1172],{"class":1124},[1103,1230,1232,1235,1237,1239,1241,1244,1246,1249,1251,1255],{"class":1105,"line":1231},6,[1103,1233,1234],{"class":1144},"    created_at ",[1103,1236,1148],{"class":1124},[1103,1238,1151],{"class":1144},[1103,1240,1132],{"class":1124},[1103,1242,1243],{"class":1156},"DateTimeField",[1103,1245,1125],{"class":1124},[1103,1247,1248],{"class":1162},"auto_now_add",[1103,1250,1148],{"class":1124},[1103,1252,1254],{"class":1253},"s8XtY","True",[1103,1256,1172],{"class":1124},[1103,1258,1260],{"class":1105,"line":1259},7,[1103,1261,1262],{"class":1144},"    \n",[1103,1264,1266,1269,1273,1275,1279],{"class":1105,"line":1265},8,[1103,1267,1268],{"class":1116},"    def",[1103,1270,1272],{"class":1271},"sJdAF"," __str__",[1103,1274,1125],{"class":1124},[1103,1276,1278],{"class":1277},"sRjD_","self",[1103,1280,1138],{"class":1124},[1103,1282,1284,1288,1292,1294],{"class":1105,"line":1283},9,[1103,1285,1287],{"class":1286},"siDh9","        return",[1103,1289,1291],{"class":1290},"se3Ec"," self",[1103,1293,1132],{"class":1124},[1103,1295,1297],{"class":1296},"sBPpx","title\n",[1103,1299,1301],{"class":1105,"line":1300},10,[1103,1302,1304],{"emptyLinePlaceholder":1303},true,"\n",[1103,1306,1308],{"class":1105,"line":1307},11,[1103,1309,1310],{"class":1109},"# Automatic admin interface\n",[1103,1312,1314,1317,1321,1323,1326,1328,1331],{"class":1105,"line":1313},12,[1103,1315,1316],{"class":1124},"@",[1103,1318,1320],{"class":1319},"sljsM","admin",[1103,1322,1132],{"class":1124},[1103,1324,1325],{"class":1319},"register",[1103,1327,1125],{"class":1124},[1103,1329,1330],{"class":1156},"BlogPost",[1103,1332,1172],{"class":1124},[1103,1334,1336,1338,1341,1343,1345,1347,1350],{"class":1105,"line":1335},13,[1103,1337,1117],{"class":1116},[1103,1339,1340],{"class":1120}," BlogPostAdmin",[1103,1342,1125],{"class":1124},[1103,1344,1320],{"class":1128},[1103,1346,1132],{"class":1124},[1103,1348,1349],{"class":1128},"ModelAdmin",[1103,1351,1138],{"class":1124},[1103,1353,1355,1358,1360,1363,1367,1371,1373,1375,1378,1381,1383,1385,1387,1390,1392],{"class":1105,"line":1354},14,[1103,1356,1357],{"class":1144},"    list_display ",[1103,1359,1148],{"class":1124},[1103,1361,1362],{"class":1124}," [",[1103,1364,1366],{"class":1365},"sbYkP","'",[1103,1368,1370],{"class":1369},"sTbE_","title",[1103,1372,1366],{"class":1365},[1103,1374,1213],{"class":1124},[1103,1376,1377],{"class":1365}," '",[1103,1379,1380],{"class":1369},"author",[1103,1382,1366],{"class":1365},[1103,1384,1213],{"class":1124},[1103,1386,1377],{"class":1365},[1103,1388,1389],{"class":1369},"created_at",[1103,1391,1366],{"class":1365},[1103,1393,1394],{"class":1124},"]\n",[1085,1396,1398],{"id":1397},"_2-security-first","2. Security First",[1026,1400,1401],{},"Django includes built-in protection against common web vulnerabilities:",[1053,1403,1404,1410,1416,1422,1427],{},[1056,1405,1406,1409],{},[1048,1407,1408],{},"CSRF Protection",": Automatic cross-site request forgery protection",[1056,1411,1412,1415],{},[1048,1413,1414],{},"SQL Injection Prevention",": ORM prevents SQL injection attacks",[1056,1417,1418,1421],{},[1048,1419,1420],{},"XSS Protection",": Template system auto-escapes variables",[1056,1423,1424,1426],{},[1048,1425,563],{},": X-Frame-Options middleware",[1056,1428,1429,1432],{},[1048,1430,1431],{},"HTTPS Support",": Built-in SSL/TLS support",[1093,1434,1436],{"className":1095,"code":1435,"language":1097,"meta":1098,"style":1098},"# CSRF protection is automatic in forms\n\u003Cform method=\"post\">\n    {% csrf_token %}\n    {{ form.as_p }}\n    \u003Cbutton type=\"submit\">Submit\u003C/button>\n\u003C/form>\n",[1100,1437,1438,1443,1465,1481,1497,1532],{"__ignoreMap":1098},[1103,1439,1440],{"class":1105,"line":1106},[1103,1441,1442],{"class":1109},"# CSRF protection is automatic in forms\n",[1103,1444,1445,1449,1452,1454,1457,1460,1462],{"class":1105,"line":1113},[1103,1446,1448],{"class":1447},"sVsLi","\u003C",[1103,1450,1451],{"class":1144},"form method",[1103,1453,1148],{"class":1124},[1103,1455,1456],{"class":1365},"\"",[1103,1458,1459],{"class":1369},"post",[1103,1461,1456],{"class":1365},[1103,1463,1464],{"class":1447},">\n",[1103,1466,1467,1470,1473,1476,1478],{"class":1105,"line":1141},[1103,1468,1469],{"class":1124},"    {",[1103,1471,1472],{"class":1447},"%",[1103,1474,1475],{"class":1144}," csrf_token ",[1103,1477,1472],{"class":1447},[1103,1479,1480],{"class":1124},"}\n",[1103,1482,1483,1486,1489,1491,1494],{"class":1105,"line":1175},[1103,1484,1485],{"class":1124},"    {{",[1103,1487,1488],{"class":1144}," form",[1103,1490,1132],{"class":1124},[1103,1492,1493],{"class":1296},"as_p",[1103,1495,1496],{"class":1124}," }}\n",[1103,1498,1499,1502,1505,1509,1511,1513,1516,1518,1521,1524,1527,1530],{"class":1105,"line":1193},[1103,1500,1501],{"class":1447},"    \u003C",[1103,1503,1504],{"class":1144},"button ",[1103,1506,1508],{"class":1507},"sa2tF","type",[1103,1510,1148],{"class":1124},[1103,1512,1456],{"class":1365},[1103,1514,1515],{"class":1369},"submit",[1103,1517,1456],{"class":1365},[1103,1519,1520],{"class":1447},">",[1103,1522,1523],{"class":1144},"Submit",[1103,1525,1526],{"class":1447},"\u003C/",[1103,1528,1529],{"class":1144},"button",[1103,1531,1464],{"class":1447},[1103,1533,1534,1536,1539],{"class":1105,"line":1231},[1103,1535,1526],{"class":1447},[1103,1537,1538],{"class":1144},"form",[1103,1540,1464],{"class":1447},[1085,1542,1544],{"id":1543},"_3-scalability","3. Scalability",[1026,1546,1547],{},"Django scales from small projects to high-traffic applications:",[1053,1549,1550,1555,1561,1567],{},[1056,1551,1552,1554],{},[1048,1553,320],{},": Query optimization and connection pooling",[1056,1556,1557,1560],{},[1048,1558,1559],{},"Caching Framework",": Multiple caching backends (Redis, Memcached)",[1056,1562,1563,1566],{},[1048,1564,1565],{},"Static File Handling",": Efficient static file serving",[1056,1568,1569,1572],{},[1048,1570,1571],{},"Load Balancing",": Session handling across multiple servers",[1085,1574,1576],{"id":1575},"_4-versatility","4. Versatility",[1026,1578,1579],{},"Django works for various types of applications:",[1053,1581,1582,1588,1594,1600,1606],{},[1056,1583,1584,1587],{},[1048,1585,1586],{},"Content Management Systems",": Built-in admin interface",[1056,1589,1590,1593],{},[1048,1591,1592],{},"E-commerce Platforms",": Robust model relationships",[1056,1595,1596,1599],{},[1048,1597,1598],{},"Social Networks",": User authentication and permissions",[1056,1601,1602,1605],{},[1048,1603,1604],{},"APIs",": Django REST Framework integration",[1056,1607,1608,1611],{},[1048,1609,1610],{},"Real-time Applications",": WebSocket support with Django Channels",[1030,1613,1615],{"id":1614},"architecture-model-view-template-mvt","Architecture: Model-View-Template (MVT)",[1026,1617,1618],{},"Django uses the MVT pattern, a variation of MVC:",[1093,1620,1622],{"className":1095,"code":1621,"language":1097,"meta":1098,"style":1098},"# Model (Data Layer)\nclass Product(models.Model):\n    name = models.CharField(max_length=100)\n    price = models.DecimalField(max_digits=10, decimal_places=2)\n    description = models.TextField()\n\n# View (Logic Layer)\ndef product_list(request):\n    products = Product.objects.all()\n    return render(request, 'products/list.html', {'products': products})\n\n# Template (Presentation Layer)\n# products/list.html\n{% for product in products %}\n    \u003Cdiv class=\"product\">\n        \u003Ch3>{{ product.name }}\u003C/h3>\n        \u003Cp>${{ product.price }}\u003C/p>\n        \u003Cp>{{ product.description }}\u003C/p>\n    \u003C/div>\n{% endfor %}\n",[1100,1623,1624,1629,1646,1670,1706,1721,1725,1730,1746,1767,1809,1813,1818,1823,1846,1867,1897,1927,1953,1964],{"__ignoreMap":1098},[1103,1625,1626],{"class":1105,"line":1106},[1103,1627,1628],{"class":1109},"# Model (Data Layer)\n",[1103,1630,1631,1633,1636,1638,1640,1642,1644],{"class":1105,"line":1113},[1103,1632,1117],{"class":1116},[1103,1634,1635],{"class":1120}," Product",[1103,1637,1125],{"class":1124},[1103,1639,1129],{"class":1128},[1103,1641,1132],{"class":1124},[1103,1643,1135],{"class":1128},[1103,1645,1138],{"class":1124},[1103,1647,1648,1651,1653,1655,1657,1659,1661,1663,1665,1668],{"class":1105,"line":1141},[1103,1649,1650],{"class":1144},"    name ",[1103,1652,1148],{"class":1124},[1103,1654,1151],{"class":1144},[1103,1656,1132],{"class":1124},[1103,1658,1157],{"class":1156},[1103,1660,1125],{"class":1124},[1103,1662,1163],{"class":1162},[1103,1664,1148],{"class":1124},[1103,1666,1667],{"class":1168},"100",[1103,1669,1172],{"class":1124},[1103,1671,1672,1675,1677,1679,1681,1684,1686,1689,1691,1694,1696,1699,1701,1704],{"class":1105,"line":1175},[1103,1673,1674],{"class":1144},"    price ",[1103,1676,1148],{"class":1124},[1103,1678,1151],{"class":1144},[1103,1680,1132],{"class":1124},[1103,1682,1683],{"class":1156},"DecimalField",[1103,1685,1125],{"class":1124},[1103,1687,1688],{"class":1162},"max_digits",[1103,1690,1148],{"class":1124},[1103,1692,1693],{"class":1168},"10",[1103,1695,1213],{"class":1124},[1103,1697,1698],{"class":1162}," decimal_places",[1103,1700,1148],{"class":1124},[1103,1702,1703],{"class":1168},"2",[1103,1705,1172],{"class":1124},[1103,1707,1708,1711,1713,1715,1717,1719],{"class":1105,"line":1193},[1103,1709,1710],{"class":1144},"    description ",[1103,1712,1148],{"class":1124},[1103,1714,1151],{"class":1144},[1103,1716,1132],{"class":1124},[1103,1718,1187],{"class":1156},[1103,1720,1190],{"class":1124},[1103,1722,1723],{"class":1105,"line":1231},[1103,1724,1304],{"emptyLinePlaceholder":1303},[1103,1726,1727],{"class":1105,"line":1259},[1103,1728,1729],{"class":1109},"# View (Logic Layer)\n",[1103,1731,1732,1735,1738,1740,1744],{"class":1105,"line":1265},[1103,1733,1734],{"class":1116},"def",[1103,1736,1737],{"class":1319}," product_list",[1103,1739,1125],{"class":1124},[1103,1741,1743],{"class":1742},"sCyAa","request",[1103,1745,1138],{"class":1124},[1103,1747,1748,1751,1753,1755,1757,1760,1762,1765],{"class":1105,"line":1283},[1103,1749,1750],{"class":1144},"    products ",[1103,1752,1148],{"class":1124},[1103,1754,1635],{"class":1144},[1103,1756,1132],{"class":1124},[1103,1758,1759],{"class":1296},"objects",[1103,1761,1132],{"class":1124},[1103,1763,1764],{"class":1156},"all",[1103,1766,1190],{"class":1124},[1103,1768,1769,1772,1775,1777,1779,1781,1783,1786,1788,1790,1793,1795,1798,1800,1803,1806],{"class":1105,"line":1300},[1103,1770,1771],{"class":1286},"    return",[1103,1773,1774],{"class":1156}," render",[1103,1776,1125],{"class":1124},[1103,1778,1743],{"class":1156},[1103,1780,1213],{"class":1124},[1103,1782,1377],{"class":1365},[1103,1784,1785],{"class":1369},"products/list.html",[1103,1787,1366],{"class":1365},[1103,1789,1213],{"class":1124},[1103,1791,1792],{"class":1124}," {",[1103,1794,1366],{"class":1365},[1103,1796,1797],{"class":1369},"products",[1103,1799,1366],{"class":1365},[1103,1801,1802],{"class":1124},":",[1103,1804,1805],{"class":1156}," products",[1103,1807,1808],{"class":1124},"})\n",[1103,1810,1811],{"class":1105,"line":1307},[1103,1812,1304],{"emptyLinePlaceholder":1303},[1103,1814,1815],{"class":1105,"line":1313},[1103,1816,1817],{"class":1109},"# Template (Presentation Layer)\n",[1103,1819,1820],{"class":1105,"line":1335},[1103,1821,1822],{"class":1109},"# products/list.html\n",[1103,1824,1825,1828,1830,1833,1836,1839,1842,1844],{"class":1105,"line":1354},[1103,1826,1827],{"class":1124},"{",[1103,1829,1472],{"class":1447},[1103,1831,1832],{"class":1286}," for",[1103,1834,1835],{"class":1144}," product ",[1103,1837,1838],{"class":1286},"in",[1103,1840,1841],{"class":1144}," products ",[1103,1843,1472],{"class":1447},[1103,1845,1480],{"class":1124},[1103,1847,1849,1851,1854,1856,1858,1860,1863,1865],{"class":1105,"line":1848},15,[1103,1850,1501],{"class":1447},[1103,1852,1853],{"class":1144},"div ",[1103,1855,1117],{"class":1116},[1103,1857,1148],{"class":1124},[1103,1859,1456],{"class":1365},[1103,1861,1862],{"class":1369},"product",[1103,1864,1456],{"class":1365},[1103,1866,1464],{"class":1447},[1103,1868,1870,1873,1875,1877,1880,1883,1885,1888,1891,1893,1895],{"class":1105,"line":1869},16,[1103,1871,1872],{"class":1447},"        \u003C",[1103,1874,1085],{"class":1144},[1103,1876,1520],{"class":1447},[1103,1878,1879],{"class":1124},"{{",[1103,1881,1882],{"class":1144}," product",[1103,1884,1132],{"class":1124},[1103,1886,1887],{"class":1296},"name",[1103,1889,1890],{"class":1124}," }}",[1103,1892,1526],{"class":1447},[1103,1894,1085],{"class":1144},[1103,1896,1464],{"class":1447},[1103,1898,1900,1902,1904,1906,1910,1912,1914,1916,1919,1921,1923,1925],{"class":1105,"line":1899},17,[1103,1901,1872],{"class":1447},[1103,1903,1026],{"class":1144},[1103,1905,1520],{"class":1447},[1103,1907,1909],{"class":1908},"srjyR","$",[1103,1911,1879],{"class":1124},[1103,1913,1882],{"class":1144},[1103,1915,1132],{"class":1124},[1103,1917,1918],{"class":1296},"price",[1103,1920,1890],{"class":1124},[1103,1922,1526],{"class":1447},[1103,1924,1026],{"class":1144},[1103,1926,1464],{"class":1447},[1103,1928,1930,1932,1934,1936,1938,1940,1942,1945,1947,1949,1951],{"class":1105,"line":1929},18,[1103,1931,1872],{"class":1447},[1103,1933,1026],{"class":1144},[1103,1935,1520],{"class":1447},[1103,1937,1879],{"class":1124},[1103,1939,1882],{"class":1144},[1103,1941,1132],{"class":1124},[1103,1943,1944],{"class":1296},"description",[1103,1946,1890],{"class":1124},[1103,1948,1526],{"class":1447},[1103,1950,1026],{"class":1144},[1103,1952,1464],{"class":1447},[1103,1954,1956,1959,1962],{"class":1105,"line":1955},19,[1103,1957,1958],{"class":1447},"    \u003C/",[1103,1960,1961],{"class":1144},"div",[1103,1963,1464],{"class":1447},[1103,1965,1967,1969,1971,1974,1976],{"class":1105,"line":1966},20,[1103,1968,1827],{"class":1124},[1103,1970,1472],{"class":1447},[1103,1972,1973],{"class":1144}," endfor ",[1103,1975,1472],{"class":1447},[1103,1977,1480],{"class":1124},[1030,1979,1981],{"id":1980},"built-in-components","Built-in Components",[1085,1983,1985],{"id":1984},"_1-object-relational-mapping-orm","1. Object-Relational Mapping (ORM)",[1026,1987,1988],{},"Write database queries using Python instead of SQL:",[1093,1990,1992],{"className":1095,"code":1991,"language":1097,"meta":1098,"style":1098},"# Instead of SQL: SELECT * FROM products WHERE price > 100\nexpensive_products = Product.objects.filter(price__gt=100)\n\n# Complex queries with relationships\nrecent_posts = BlogPost.objects.select_related('author').filter(\n    created_at__gte=timezone.now() - timedelta(days=7)\n).order_by('-created_at')\n",[1100,1993,1994,1999,2028,2032,2037,2071,2107],{"__ignoreMap":1098},[1103,1995,1996],{"class":1105,"line":1106},[1103,1997,1998],{"class":1109},"# Instead of SQL: SELECT * FROM products WHERE price > 100\n",[1103,2000,2001,2004,2006,2008,2010,2012,2014,2017,2019,2022,2024,2026],{"class":1105,"line":1113},[1103,2002,2003],{"class":1144},"expensive_products ",[1103,2005,1148],{"class":1124},[1103,2007,1635],{"class":1144},[1103,2009,1132],{"class":1124},[1103,2011,1759],{"class":1296},[1103,2013,1132],{"class":1124},[1103,2015,2016],{"class":1156},"filter",[1103,2018,1125],{"class":1124},[1103,2020,2021],{"class":1162},"price__gt",[1103,2023,1148],{"class":1124},[1103,2025,1667],{"class":1168},[1103,2027,1172],{"class":1124},[1103,2029,2030],{"class":1105,"line":1141},[1103,2031,1304],{"emptyLinePlaceholder":1303},[1103,2033,2034],{"class":1105,"line":1175},[1103,2035,2036],{"class":1109},"# Complex queries with relationships\n",[1103,2038,2039,2042,2044,2046,2048,2050,2052,2055,2057,2059,2061,2063,2066,2068],{"class":1105,"line":1193},[1103,2040,2041],{"class":1144},"recent_posts ",[1103,2043,1148],{"class":1124},[1103,2045,1121],{"class":1144},[1103,2047,1132],{"class":1124},[1103,2049,1759],{"class":1296},[1103,2051,1132],{"class":1124},[1103,2053,2054],{"class":1156},"select_related",[1103,2056,1125],{"class":1124},[1103,2058,1366],{"class":1365},[1103,2060,1380],{"class":1369},[1103,2062,1366],{"class":1365},[1103,2064,2065],{"class":1124},").",[1103,2067,2016],{"class":1156},[1103,2069,2070],{"class":1124},"(\n",[1103,2072,2073,2076,2078,2081,2083,2086,2089,2092,2095,2097,2100,2102,2105],{"class":1105,"line":1231},[1103,2074,2075],{"class":1162},"    created_at__gte",[1103,2077,1148],{"class":1124},[1103,2079,2080],{"class":1156},"timezone",[1103,2082,1132],{"class":1124},[1103,2084,2085],{"class":1156},"now",[1103,2087,2088],{"class":1124},"()",[1103,2090,2091],{"class":1447}," -",[1103,2093,2094],{"class":1156}," timedelta",[1103,2096,1125],{"class":1124},[1103,2098,2099],{"class":1162},"days",[1103,2101,1148],{"class":1124},[1103,2103,2104],{"class":1168},"7",[1103,2106,1172],{"class":1124},[1103,2108,2109,2111,2114,2116,2118,2121,2123],{"class":1105,"line":1259},[1103,2110,2065],{"class":1124},[1103,2112,2113],{"class":1156},"order_by",[1103,2115,1125],{"class":1124},[1103,2117,1366],{"class":1365},[1103,2119,2120],{"class":1369},"-created_at",[1103,2122,1366],{"class":1365},[1103,2124,1172],{"class":1124},[1085,2126,2128],{"id":2127},"_2-admin-interface","2. Admin Interface",[1026,2130,2131],{},"Automatic administrative interface for your models:",[1093,2133,2135],{"className":1095,"code":2134,"language":1097,"meta":1098,"style":1098},"# Minimal admin configuration\nadmin.site.register(Product)\n\n# Advanced admin customization\n@admin.register(BlogPost)\nclass BlogPostAdmin(admin.ModelAdmin):\n    list_display = ['title', 'author', 'status', 'created_at']\n    list_filter = ['status', 'created_at', 'author']\n    search_fields = ['title', 'content']\n    prepopulated_fields = {'slug': ('title',)}\n    date_hierarchy = 'created_at'\n",[1100,2136,2137,2142,2162,2166,2171,2187,2203,2244,2277,2303,2333],{"__ignoreMap":1098},[1103,2138,2139],{"class":1105,"line":1106},[1103,2140,2141],{"class":1109},"# Minimal admin configuration\n",[1103,2143,2144,2146,2148,2151,2153,2155,2157,2160],{"class":1105,"line":1113},[1103,2145,1320],{"class":1144},[1103,2147,1132],{"class":1124},[1103,2149,2150],{"class":1296},"site",[1103,2152,1132],{"class":1124},[1103,2154,1325],{"class":1156},[1103,2156,1125],{"class":1124},[1103,2158,2159],{"class":1156},"Product",[1103,2161,1172],{"class":1124},[1103,2163,2164],{"class":1105,"line":1141},[1103,2165,1304],{"emptyLinePlaceholder":1303},[1103,2167,2168],{"class":1105,"line":1175},[1103,2169,2170],{"class":1109},"# Advanced admin customization\n",[1103,2172,2173,2175,2177,2179,2181,2183,2185],{"class":1105,"line":1193},[1103,2174,1316],{"class":1124},[1103,2176,1320],{"class":1319},[1103,2178,1132],{"class":1124},[1103,2180,1325],{"class":1319},[1103,2182,1125],{"class":1124},[1103,2184,1330],{"class":1156},[1103,2186,1172],{"class":1124},[1103,2188,2189,2191,2193,2195,2197,2199,2201],{"class":1105,"line":1231},[1103,2190,1117],{"class":1116},[1103,2192,1340],{"class":1120},[1103,2194,1125],{"class":1124},[1103,2196,1320],{"class":1128},[1103,2198,1132],{"class":1124},[1103,2200,1349],{"class":1128},[1103,2202,1138],{"class":1124},[1103,2204,2205,2207,2209,2211,2213,2215,2217,2219,2221,2223,2225,2227,2229,2232,2234,2236,2238,2240,2242],{"class":1105,"line":1259},[1103,2206,1357],{"class":1144},[1103,2208,1148],{"class":1124},[1103,2210,1362],{"class":1124},[1103,2212,1366],{"class":1365},[1103,2214,1370],{"class":1369},[1103,2216,1366],{"class":1365},[1103,2218,1213],{"class":1124},[1103,2220,1377],{"class":1365},[1103,2222,1380],{"class":1369},[1103,2224,1366],{"class":1365},[1103,2226,1213],{"class":1124},[1103,2228,1377],{"class":1365},[1103,2230,2231],{"class":1369},"status",[1103,2233,1366],{"class":1365},[1103,2235,1213],{"class":1124},[1103,2237,1377],{"class":1365},[1103,2239,1389],{"class":1369},[1103,2241,1366],{"class":1365},[1103,2243,1394],{"class":1124},[1103,2245,2246,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267,2269,2271,2273,2275],{"class":1105,"line":1265},[1103,2247,2248],{"class":1144},"    list_filter ",[1103,2250,1148],{"class":1124},[1103,2252,1362],{"class":1124},[1103,2254,1366],{"class":1365},[1103,2256,2231],{"class":1369},[1103,2258,1366],{"class":1365},[1103,2260,1213],{"class":1124},[1103,2262,1377],{"class":1365},[1103,2264,1389],{"class":1369},[1103,2266,1366],{"class":1365},[1103,2268,1213],{"class":1124},[1103,2270,1377],{"class":1365},[1103,2272,1380],{"class":1369},[1103,2274,1366],{"class":1365},[1103,2276,1394],{"class":1124},[1103,2278,2279,2282,2284,2286,2288,2290,2292,2294,2296,2299,2301],{"class":1105,"line":1283},[1103,2280,2281],{"class":1144},"    search_fields ",[1103,2283,1148],{"class":1124},[1103,2285,1362],{"class":1124},[1103,2287,1366],{"class":1365},[1103,2289,1370],{"class":1369},[1103,2291,1366],{"class":1365},[1103,2293,1213],{"class":1124},[1103,2295,1377],{"class":1365},[1103,2297,2298],{"class":1369},"content",[1103,2300,1366],{"class":1365},[1103,2302,1394],{"class":1124},[1103,2304,2305,2308,2310,2312,2314,2317,2319,2321,2324,2326,2328,2330],{"class":1105,"line":1300},[1103,2306,2307],{"class":1144},"    prepopulated_fields ",[1103,2309,1148],{"class":1124},[1103,2311,1792],{"class":1124},[1103,2313,1366],{"class":1365},[1103,2315,2316],{"class":1369},"slug",[1103,2318,1366],{"class":1365},[1103,2320,1802],{"class":1124},[1103,2322,2323],{"class":1124}," (",[1103,2325,1366],{"class":1365},[1103,2327,1370],{"class":1369},[1103,2329,1366],{"class":1365},[1103,2331,2332],{"class":1124},",)}\n",[1103,2334,2335,2338,2340,2342,2344],{"class":1105,"line":1307},[1103,2336,2337],{"class":1144},"    date_hierarchy ",[1103,2339,1148],{"class":1124},[1103,2341,1377],{"class":1365},[1103,2343,1389],{"class":1369},[1103,2345,2346],{"class":1365},"'\n",[1085,2348,2350],{"id":2349},"_3-url-routing","3. URL Routing",[1026,2352,2353],{},"Clean, flexible URL patterns:",[1093,2355,2357],{"className":1095,"code":2356,"language":1097,"meta":1098,"style":1098},"from django.urls import path, include\n\nurlpatterns = [\n    path('', views.home, name='home'),\n    path('products/', views.product_list, name='product_list'),\n    path('products/\u003Cint:pk>/', views.product_detail, name='product_detail'),\n    path('api/', include('api.urls')),\n]\n",[1100,2358,2359,2383,2387,2397,2433,2469,2505,2535],{"__ignoreMap":1098},[1103,2360,2361,2364,2367,2369,2372,2375,2378,2380],{"class":1105,"line":1106},[1103,2362,2363],{"class":1286},"from",[1103,2365,2366],{"class":1144}," django",[1103,2368,1132],{"class":1124},[1103,2370,2371],{"class":1144},"urls ",[1103,2373,2374],{"class":1286},"import",[1103,2376,2377],{"class":1144}," path",[1103,2379,1213],{"class":1124},[1103,2381,2382],{"class":1144}," include\n",[1103,2384,2385],{"class":1105,"line":1113},[1103,2386,1304],{"emptyLinePlaceholder":1303},[1103,2388,2389,2392,2394],{"class":1105,"line":1141},[1103,2390,2391],{"class":1144},"urlpatterns ",[1103,2393,1148],{"class":1124},[1103,2395,2396],{"class":1124}," [\n",[1103,2398,2399,2402,2404,2407,2409,2412,2414,2417,2419,2422,2424,2426,2428,2430],{"class":1105,"line":1175},[1103,2400,2401],{"class":1156},"    path",[1103,2403,1125],{"class":1124},[1103,2405,2406],{"class":1365},"''",[1103,2408,1213],{"class":1124},[1103,2410,2411],{"class":1156}," views",[1103,2413,1132],{"class":1124},[1103,2415,2416],{"class":1296},"home",[1103,2418,1213],{"class":1124},[1103,2420,2421],{"class":1162}," name",[1103,2423,1148],{"class":1124},[1103,2425,1366],{"class":1365},[1103,2427,2416],{"class":1369},[1103,2429,1366],{"class":1365},[1103,2431,2432],{"class":1124},"),\n",[1103,2434,2435,2437,2439,2441,2444,2446,2448,2450,2452,2455,2457,2459,2461,2463,2465,2467],{"class":1105,"line":1193},[1103,2436,2401],{"class":1156},[1103,2438,1125],{"class":1124},[1103,2440,1366],{"class":1365},[1103,2442,2443],{"class":1369},"products/",[1103,2445,1366],{"class":1365},[1103,2447,1213],{"class":1124},[1103,2449,2411],{"class":1156},[1103,2451,1132],{"class":1124},[1103,2453,2454],{"class":1296},"product_list",[1103,2456,1213],{"class":1124},[1103,2458,2421],{"class":1162},[1103,2460,1148],{"class":1124},[1103,2462,1366],{"class":1365},[1103,2464,2454],{"class":1369},[1103,2466,1366],{"class":1365},[1103,2468,2432],{"class":1124},[1103,2470,2471,2473,2475,2477,2480,2482,2484,2486,2488,2491,2493,2495,2497,2499,2501,2503],{"class":1105,"line":1231},[1103,2472,2401],{"class":1156},[1103,2474,1125],{"class":1124},[1103,2476,1366],{"class":1365},[1103,2478,2479],{"class":1369},"products/\u003Cint:pk>/",[1103,2481,1366],{"class":1365},[1103,2483,1213],{"class":1124},[1103,2485,2411],{"class":1156},[1103,2487,1132],{"class":1124},[1103,2489,2490],{"class":1296},"product_detail",[1103,2492,1213],{"class":1124},[1103,2494,2421],{"class":1162},[1103,2496,1148],{"class":1124},[1103,2498,1366],{"class":1365},[1103,2500,2490],{"class":1369},[1103,2502,1366],{"class":1365},[1103,2504,2432],{"class":1124},[1103,2506,2507,2509,2511,2513,2516,2518,2520,2523,2525,2527,2530,2532],{"class":1105,"line":1259},[1103,2508,2401],{"class":1156},[1103,2510,1125],{"class":1124},[1103,2512,1366],{"class":1365},[1103,2514,2515],{"class":1369},"api/",[1103,2517,1366],{"class":1365},[1103,2519,1213],{"class":1124},[1103,2521,2522],{"class":1156}," include",[1103,2524,1125],{"class":1124},[1103,2526,1366],{"class":1365},[1103,2528,2529],{"class":1369},"api.urls",[1103,2531,1366],{"class":1365},[1103,2533,2534],{"class":1124},")),\n",[1103,2536,2537],{"class":1105,"line":1265},[1103,2538,1394],{"class":1124},[1085,2540,2542],{"id":2541},"_4-template-system","4. Template System",[1026,2544,2545],{},"Powerful template engine with inheritance:",[1093,2547,2551],{"className":2548,"code":2549,"language":2550,"meta":1098,"style":1098},"language-html shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","\u003C!-- base.html -->\n\u003C!DOCTYPE html>\n\u003Chtml>\n\u003Chead>\n    \u003Ctitle>{% block title %}My Site{% endblock %}\u003C/title>\n\u003C/head>\n\u003Cbody>\n    \u003Cnav>{% include 'navigation.html' %}\u003C/nav>\n    \u003Cmain>{% block content %}{% endblock %}\u003C/main>\n\u003C/body>\n\u003C/html>\n\n\u003C!-- product_list.html -->\n{% extends 'base.html' %}\n\n{% block title %}Products - {{ block.super }}{% endblock %}\n\n{% block content %}\n    {% for product in products %}\n        \u003Cdiv class=\"product-card\">\n            \u003Ch3>{{ product.name }}\u003C/h3>\n            \u003Cp>${{ product.price|floatformat:2 }}\u003C/p>\n        \u003C/div>\n    {% endfor %}\n{% endblock %}\n","html",[1100,2552,2553,2558,2573,2581,2590,2607,2615,2624,2642,2660,2668,2676,2680,2685,2690,2694,2699,2703,2708,2713,2733,2752,2770,2780,2786],{"__ignoreMap":1098},[1103,2554,2555],{"class":1105,"line":1106},[1103,2556,2557],{"class":1109},"\u003C!-- base.html -->\n",[1103,2559,2560,2563,2567,2571],{"class":1105,"line":1113},[1103,2561,2562],{"class":1124},"\u003C!",[1103,2564,2566],{"class":2565},"sJFLg","DOCTYPE",[1103,2568,2570],{"class":2569},"s5q8q"," html",[1103,2572,1464],{"class":1124},[1103,2574,2575,2577,2579],{"class":1105,"line":1141},[1103,2576,1448],{"class":1124},[1103,2578,2550],{"class":2565},[1103,2580,1464],{"class":1124},[1103,2582,2583,2585,2588],{"class":1105,"line":1175},[1103,2584,1448],{"class":1124},[1103,2586,2587],{"class":2565},"head",[1103,2589,1464],{"class":1124},[1103,2591,2592,2594,2596,2598,2601,2603,2605],{"class":1105,"line":1193},[1103,2593,1501],{"class":1124},[1103,2595,1370],{"class":2565},[1103,2597,1520],{"class":1124},[1103,2599,2600],{"class":1144},"{% block title %}My Site{% endblock %}",[1103,2602,1526],{"class":1124},[1103,2604,1370],{"class":2565},[1103,2606,1464],{"class":1124},[1103,2608,2609,2611,2613],{"class":1105,"line":1231},[1103,2610,1526],{"class":1124},[1103,2612,2587],{"class":2565},[1103,2614,1464],{"class":1124},[1103,2616,2617,2619,2622],{"class":1105,"line":1259},[1103,2618,1448],{"class":1124},[1103,2620,2621],{"class":2565},"body",[1103,2623,1464],{"class":1124},[1103,2625,2626,2628,2631,2633,2636,2638,2640],{"class":1105,"line":1265},[1103,2627,1501],{"class":1124},[1103,2629,2630],{"class":2565},"nav",[1103,2632,1520],{"class":1124},[1103,2634,2635],{"class":1144},"{% include 'navigation.html' %}",[1103,2637,1526],{"class":1124},[1103,2639,2630],{"class":2565},[1103,2641,1464],{"class":1124},[1103,2643,2644,2646,2649,2651,2654,2656,2658],{"class":1105,"line":1283},[1103,2645,1501],{"class":1124},[1103,2647,2648],{"class":2565},"main",[1103,2650,1520],{"class":1124},[1103,2652,2653],{"class":1144},"{% block content %}{% endblock %}",[1103,2655,1526],{"class":1124},[1103,2657,2648],{"class":2565},[1103,2659,1464],{"class":1124},[1103,2661,2662,2664,2666],{"class":1105,"line":1300},[1103,2663,1526],{"class":1124},[1103,2665,2621],{"class":2565},[1103,2667,1464],{"class":1124},[1103,2669,2670,2672,2674],{"class":1105,"line":1307},[1103,2671,1526],{"class":1124},[1103,2673,2550],{"class":2565},[1103,2675,1464],{"class":1124},[1103,2677,2678],{"class":1105,"line":1313},[1103,2679,1304],{"emptyLinePlaceholder":1303},[1103,2681,2682],{"class":1105,"line":1335},[1103,2683,2684],{"class":1109},"\u003C!-- product_list.html -->\n",[1103,2686,2687],{"class":1105,"line":1354},[1103,2688,2689],{"class":1144},"{% extends 'base.html' %}\n",[1103,2691,2692],{"class":1105,"line":1848},[1103,2693,1304],{"emptyLinePlaceholder":1303},[1103,2695,2696],{"class":1105,"line":1869},[1103,2697,2698],{"class":1144},"{% block title %}Products - {{ block.super }}{% endblock %}\n",[1103,2700,2701],{"class":1105,"line":1899},[1103,2702,1304],{"emptyLinePlaceholder":1303},[1103,2704,2705],{"class":1105,"line":1929},[1103,2706,2707],{"class":1144},"{% block content %}\n",[1103,2709,2710],{"class":1105,"line":1955},[1103,2711,2712],{"class":1144},"    {% for product in products %}\n",[1103,2714,2715,2717,2719,2722,2724,2726,2729,2731],{"class":1105,"line":1966},[1103,2716,1872],{"class":1124},[1103,2718,1961],{"class":2565},[1103,2720,2721],{"class":2569}," class",[1103,2723,1148],{"class":1124},[1103,2725,1456],{"class":1365},[1103,2727,2728],{"class":1369},"product-card",[1103,2730,1456],{"class":1365},[1103,2732,1464],{"class":1124},[1103,2734,2736,2739,2741,2743,2746,2748,2750],{"class":1105,"line":2735},21,[1103,2737,2738],{"class":1124},"            \u003C",[1103,2740,1085],{"class":2565},[1103,2742,1520],{"class":1124},[1103,2744,2745],{"class":1144},"{{ product.name }}",[1103,2747,1526],{"class":1124},[1103,2749,1085],{"class":2565},[1103,2751,1464],{"class":1124},[1103,2753,2755,2757,2759,2761,2764,2766,2768],{"class":1105,"line":2754},22,[1103,2756,2738],{"class":1124},[1103,2758,1026],{"class":2565},[1103,2760,1520],{"class":1124},[1103,2762,2763],{"class":1144},"${{ product.price|floatformat:2 }}",[1103,2765,1526],{"class":1124},[1103,2767,1026],{"class":2565},[1103,2769,1464],{"class":1124},[1103,2771,2773,2776,2778],{"class":1105,"line":2772},23,[1103,2774,2775],{"class":1124},"        \u003C/",[1103,2777,1961],{"class":2565},[1103,2779,1464],{"class":1124},[1103,2781,2783],{"class":1105,"line":2782},24,[1103,2784,2785],{"class":1144},"    {% endfor %}\n",[1103,2787,2789],{"class":1105,"line":2788},25,[1103,2790,2791],{"class":1144},"{% endblock %}\n",[1030,2793,2795],{"id":2794},"who-uses-django","Who Uses Django",[1085,2797,2799],{"id":2798},"major-companies-and-websites","Major Companies and Websites",[1026,2801,2802,2805],{},[1048,2803,2804],{},"Instagram",": Handles billions of photos and users",[1053,2807,2808,2811],{},[1056,2809,2810],{},"Uses Django for rapid feature development",[1056,2812,2813],{},"Scales with custom optimizations and caching",[1026,2815,2816,2819],{},[1048,2817,2818],{},"Pinterest",": Visual discovery platform",[1053,2821,2822,2825],{},[1056,2823,2824],{},"Leverages Django's flexibility for complex data relationships",[1056,2826,2827],{},"Benefits from Django's security features",[1026,2829,2830,2833],{},[1048,2831,2832],{},"Mozilla",": Firefox browser and web services",[1053,2835,2836,2839],{},[1056,2837,2838],{},"Uses Django for developer tools and websites",[1056,2840,2841],{},"Appreciates Django's open-source philosophy",[1026,2843,2844,2847],{},[1048,2845,2846],{},"The Washington Post",": News and media platform",[1053,2849,2850,2853],{},[1056,2851,2852],{},"Django's CMS capabilities for content management",[1056,2854,2855],{},"Rapid deployment for breaking news features",[1026,2857,2858,2861],{},[1048,2859,2860],{},"Spotify",": Music streaming service",[1053,2863,2864,2867],{},[1056,2865,2866],{},"Uses Django for internal tools and APIs",[1056,2868,2869],{},"Benefits from Python's data science ecosystem",[1085,2871,2873],{"id":2872},"industry-applications","Industry Applications",[1026,2875,2876,2879,2880,2883,2884,2886,2887,2890,2891,2894,2895,2898],{},[1048,2877,2878],{},"E-commerce",": Shopify alternatives, marketplace platforms\n",[1048,2881,2882],{},"Media & Publishing",": News sites, blogs, content platforms\n",[1048,2885,1598],{},": Community platforms, forums\n",[1048,2888,2889],{},"Financial Services",": Banking applications, fintech startups\n",[1048,2892,2893],{},"Healthcare",": Patient management systems, telemedicine platforms\n",[1048,2896,2897],{},"Education",": Learning management systems, online courses",[1030,2900,2902],{"id":2901},"django-ecosystem","Django Ecosystem",[1085,2904,2906],{"id":2905},"popular-third-party-packages","Popular Third-Party Packages",[1093,2908,2910],{"className":1095,"code":2909,"language":1097,"meta":1098,"style":1098},"# Django REST Framework - API development\nINSTALLED_APPS = [\n    'rest_framework',\n    'corsheaders',\n]\n\n# Celery - Asynchronous task processing\nfrom celery import shared_task\n\n@shared_task\ndef send_email_notification(user_id):\n    # Background email sending\n    pass\n\n# Django Channels - WebSocket support\nINSTALLED_APPS = [\n    'channels',\n]\n\n# Real-time chat functionality\nclass ChatConsumer(AsyncWebsocketConsumer):\n    async def connect(self):\n        await self.accept()\n",[1100,2911,2912,2917,2927,2940,2951,2955,2959,2964,2976,2980,2987,3001,3006,3011,3015,3020,3028,3039,3043,3047,3052,3066,3083],{"__ignoreMap":1098},[1103,2913,2914],{"class":1105,"line":1106},[1103,2915,2916],{"class":1109},"# Django REST Framework - API development\n",[1103,2918,2919,2922,2925],{"class":1105,"line":1113},[1103,2920,2921],{"class":1290},"INSTALLED_APPS",[1103,2923,2924],{"class":1124}," =",[1103,2926,2396],{"class":1124},[1103,2928,2929,2932,2935,2937],{"class":1105,"line":1141},[1103,2930,2931],{"class":1365},"    '",[1103,2933,2934],{"class":1369},"rest_framework",[1103,2936,1366],{"class":1365},[1103,2938,2939],{"class":1124},",\n",[1103,2941,2942,2944,2947,2949],{"class":1105,"line":1175},[1103,2943,2931],{"class":1365},[1103,2945,2946],{"class":1369},"corsheaders",[1103,2948,1366],{"class":1365},[1103,2950,2939],{"class":1124},[1103,2952,2953],{"class":1105,"line":1193},[1103,2954,1394],{"class":1124},[1103,2956,2957],{"class":1105,"line":1231},[1103,2958,1304],{"emptyLinePlaceholder":1303},[1103,2960,2961],{"class":1105,"line":1259},[1103,2962,2963],{"class":1109},"# Celery - Asynchronous task processing\n",[1103,2965,2966,2968,2971,2973],{"class":1105,"line":1265},[1103,2967,2363],{"class":1286},[1103,2969,2970],{"class":1144}," celery ",[1103,2972,2374],{"class":1286},[1103,2974,2975],{"class":1144}," shared_task\n",[1103,2977,2978],{"class":1105,"line":1283},[1103,2979,1304],{"emptyLinePlaceholder":1303},[1103,2981,2982,2984],{"class":1105,"line":1300},[1103,2983,1316],{"class":1124},[1103,2985,2986],{"class":1319},"shared_task\n",[1103,2988,2989,2991,2994,2996,2999],{"class":1105,"line":1307},[1103,2990,1734],{"class":1116},[1103,2992,2993],{"class":1319}," send_email_notification",[1103,2995,1125],{"class":1124},[1103,2997,2998],{"class":1742},"user_id",[1103,3000,1138],{"class":1124},[1103,3002,3003],{"class":1105,"line":1313},[1103,3004,3005],{"class":1109},"    # Background email sending\n",[1103,3007,3008],{"class":1105,"line":1335},[1103,3009,3010],{"class":1286},"    pass\n",[1103,3012,3013],{"class":1105,"line":1354},[1103,3014,1304],{"emptyLinePlaceholder":1303},[1103,3016,3017],{"class":1105,"line":1848},[1103,3018,3019],{"class":1109},"# Django Channels - WebSocket support\n",[1103,3021,3022,3024,3026],{"class":1105,"line":1869},[1103,3023,2921],{"class":1290},[1103,3025,2924],{"class":1124},[1103,3027,2396],{"class":1124},[1103,3029,3030,3032,3035,3037],{"class":1105,"line":1899},[1103,3031,2931],{"class":1365},[1103,3033,3034],{"class":1369},"channels",[1103,3036,1366],{"class":1365},[1103,3038,2939],{"class":1124},[1103,3040,3041],{"class":1105,"line":1929},[1103,3042,1394],{"class":1124},[1103,3044,3045],{"class":1105,"line":1955},[1103,3046,1304],{"emptyLinePlaceholder":1303},[1103,3048,3049],{"class":1105,"line":1966},[1103,3050,3051],{"class":1109},"# Real-time chat functionality\n",[1103,3053,3054,3056,3059,3061,3064],{"class":1105,"line":2735},[1103,3055,1117],{"class":1116},[1103,3057,3058],{"class":1120}," ChatConsumer",[1103,3060,1125],{"class":1124},[1103,3062,3063],{"class":1128},"AsyncWebsocketConsumer",[1103,3065,1138],{"class":1124},[1103,3067,3068,3071,3074,3077,3079,3081],{"class":1105,"line":2754},[1103,3069,3070],{"class":1116},"    async",[1103,3072,3073],{"class":1116}," def",[1103,3075,3076],{"class":1319}," connect",[1103,3078,1125],{"class":1124},[1103,3080,1278],{"class":1277},[1103,3082,1138],{"class":1124},[1103,3084,3085,3088,3090,3092,3095],{"class":1105,"line":2772},[1103,3086,3087],{"class":1286},"        await",[1103,3089,1291],{"class":1290},[1103,3091,1132],{"class":1124},[1103,3093,3094],{"class":1156},"accept",[1103,3096,1190],{"class":1124},[1085,3098,3100],{"id":3099},"development-tools","Development Tools",[1053,3102,3103,3109,3115,3121],{},[1056,3104,3105,3108],{},[1048,3106,3107],{},"Django Debug Toolbar",": Performance profiling",[1056,3110,3111,3114],{},[1048,3112,3113],{},"Django Extensions",": Additional management commands",[1056,3116,3117,3120],{},[1048,3118,3119],{},"Factory Boy",": Test data generation",[1056,3122,3123,3126],{},[1048,3124,3125],{},"Pytest-Django",": Advanced testing framework",[1030,3128,775],{"id":3129},"performance-and-optimization",[1026,3131,3132],{},"Django provides multiple optimization strategies:",[1085,3134,320],{"id":3135},"database-optimization",[1093,3137,3139],{"className":1095,"code":3138,"language":1097,"meta":1098,"style":1098},"# Efficient queries with select_related and prefetch_related\nposts = BlogPost.objects.select_related('author').prefetch_related('tags')\n\n# Database indexing\nclass BlogPost(models.Model):\n    title = models.CharField(max_length=200, db_index=True)\n    slug = models.SlugField(unique=True)  # Automatically indexed\n",[1100,3140,3141,3146,3187,3191,3196,3212,3243],{"__ignoreMap":1098},[1103,3142,3143],{"class":1105,"line":1106},[1103,3144,3145],{"class":1109},"# Efficient queries with select_related and prefetch_related\n",[1103,3147,3148,3151,3153,3155,3157,3159,3161,3163,3165,3167,3169,3171,3173,3176,3178,3180,3183,3185],{"class":1105,"line":1113},[1103,3149,3150],{"class":1144},"posts ",[1103,3152,1148],{"class":1124},[1103,3154,1121],{"class":1144},[1103,3156,1132],{"class":1124},[1103,3158,1759],{"class":1296},[1103,3160,1132],{"class":1124},[1103,3162,2054],{"class":1156},[1103,3164,1125],{"class":1124},[1103,3166,1366],{"class":1365},[1103,3168,1380],{"class":1369},[1103,3170,1366],{"class":1365},[1103,3172,2065],{"class":1124},[1103,3174,3175],{"class":1156},"prefetch_related",[1103,3177,1125],{"class":1124},[1103,3179,1366],{"class":1365},[1103,3181,3182],{"class":1369},"tags",[1103,3184,1366],{"class":1365},[1103,3186,1172],{"class":1124},[1103,3188,3189],{"class":1105,"line":1141},[1103,3190,1304],{"emptyLinePlaceholder":1303},[1103,3192,3193],{"class":1105,"line":1175},[1103,3194,3195],{"class":1109},"# Database indexing\n",[1103,3197,3198,3200,3202,3204,3206,3208,3210],{"class":1105,"line":1193},[1103,3199,1117],{"class":1116},[1103,3201,1121],{"class":1120},[1103,3203,1125],{"class":1124},[1103,3205,1129],{"class":1128},[1103,3207,1132],{"class":1124},[1103,3209,1135],{"class":1128},[1103,3211,1138],{"class":1124},[1103,3213,3214,3216,3218,3220,3222,3224,3226,3228,3230,3232,3234,3237,3239,3241],{"class":1105,"line":1231},[1103,3215,1145],{"class":1144},[1103,3217,1148],{"class":1124},[1103,3219,1151],{"class":1144},[1103,3221,1132],{"class":1124},[1103,3223,1157],{"class":1156},[1103,3225,1125],{"class":1124},[1103,3227,1163],{"class":1162},[1103,3229,1148],{"class":1124},[1103,3231,1169],{"class":1168},[1103,3233,1213],{"class":1124},[1103,3235,3236],{"class":1162}," db_index",[1103,3238,1148],{"class":1124},[1103,3240,1254],{"class":1253},[1103,3242,1172],{"class":1124},[1103,3244,3245,3248,3250,3252,3254,3257,3259,3262,3264,3266,3269],{"class":1105,"line":1259},[1103,3246,3247],{"class":1144},"    slug ",[1103,3249,1148],{"class":1124},[1103,3251,1151],{"class":1144},[1103,3253,1132],{"class":1124},[1103,3255,3256],{"class":1156},"SlugField",[1103,3258,1125],{"class":1124},[1103,3260,3261],{"class":1162},"unique",[1103,3263,1148],{"class":1124},[1103,3265,1254],{"class":1253},[1103,3267,3268],{"class":1124},")",[1103,3270,3271],{"class":1109},"  # Automatically indexed\n",[1085,3273,673],{"id":3274},"caching",[1093,3276,3278],{"className":1095,"code":3277,"language":1097,"meta":1098,"style":1098},"# View-level caching\nfrom django.views.decorators.cache import cache_page\n\n@cache_page(60 * 15)  # Cache for 15 minutes\ndef product_list(request):\n    return render(request, 'products/list.html')\n\n# Template fragment caching\n{% load cache %}\n{% cache 500 product_list %}\n    \u003C!-- Expensive template rendering -->\n{% endcache %}\n",[1100,3279,3280,3285,3311,3315,3338,3350,3370,3374,3379,3392,3411,3428],{"__ignoreMap":1098},[1103,3281,3282],{"class":1105,"line":1106},[1103,3283,3284],{"class":1109},"# View-level caching\n",[1103,3286,3287,3289,3291,3293,3296,3298,3301,3303,3306,3308],{"class":1105,"line":1113},[1103,3288,2363],{"class":1286},[1103,3290,2366],{"class":1144},[1103,3292,1132],{"class":1124},[1103,3294,3295],{"class":1144},"views",[1103,3297,1132],{"class":1124},[1103,3299,3300],{"class":1144},"decorators",[1103,3302,1132],{"class":1124},[1103,3304,3305],{"class":1144},"cache ",[1103,3307,2374],{"class":1286},[1103,3309,3310],{"class":1144}," cache_page\n",[1103,3312,3313],{"class":1105,"line":1141},[1103,3314,1304],{"emptyLinePlaceholder":1303},[1103,3316,3317,3319,3322,3324,3327,3330,3333,3335],{"class":1105,"line":1175},[1103,3318,1316],{"class":1124},[1103,3320,3321],{"class":1319},"cache_page",[1103,3323,1125],{"class":1124},[1103,3325,3326],{"class":1168},"60",[1103,3328,3329],{"class":1447}," *",[1103,3331,3332],{"class":1168}," 15",[1103,3334,3268],{"class":1124},[1103,3336,3337],{"class":1109},"  # Cache for 15 minutes\n",[1103,3339,3340,3342,3344,3346,3348],{"class":1105,"line":1193},[1103,3341,1734],{"class":1116},[1103,3343,1737],{"class":1319},[1103,3345,1125],{"class":1124},[1103,3347,1743],{"class":1742},[1103,3349,1138],{"class":1124},[1103,3351,3352,3354,3356,3358,3360,3362,3364,3366,3368],{"class":1105,"line":1231},[1103,3353,1771],{"class":1286},[1103,3355,1774],{"class":1156},[1103,3357,1125],{"class":1124},[1103,3359,1743],{"class":1156},[1103,3361,1213],{"class":1124},[1103,3363,1377],{"class":1365},[1103,3365,1785],{"class":1369},[1103,3367,1366],{"class":1365},[1103,3369,1172],{"class":1124},[1103,3371,3372],{"class":1105,"line":1259},[1103,3373,1304],{"emptyLinePlaceholder":1303},[1103,3375,3376],{"class":1105,"line":1265},[1103,3377,3378],{"class":1109},"# Template fragment caching\n",[1103,3380,3381,3383,3385,3388,3390],{"class":1105,"line":1283},[1103,3382,1827],{"class":1124},[1103,3384,1472],{"class":1447},[1103,3386,3387],{"class":1144}," load cache ",[1103,3389,1472],{"class":1447},[1103,3391,1480],{"class":1124},[1103,3393,3394,3396,3398,3401,3404,3407,3409],{"class":1105,"line":1300},[1103,3395,1827],{"class":1124},[1103,3397,1472],{"class":1447},[1103,3399,3400],{"class":1144}," cache ",[1103,3402,3403],{"class":1168},"500",[1103,3405,3406],{"class":1144}," product_list ",[1103,3408,1472],{"class":1447},[1103,3410,1480],{"class":1124},[1103,3412,3413,3415,3418,3421,3424,3426],{"class":1105,"line":1307},[1103,3414,1501],{"class":1447},[1103,3416,3417],{"class":1144},"!",[1103,3419,3420],{"class":1908},"--",[1103,3422,3423],{"class":1144}," Expensive template rendering ",[1103,3425,3420],{"class":1908},[1103,3427,1464],{"class":1447},[1103,3429,3430,3432,3434,3437,3439],{"class":1105,"line":1313},[1103,3431,1827],{"class":1124},[1103,3433,1472],{"class":1447},[1103,3435,3436],{"class":1144}," endcache ",[1103,3438,1472],{"class":1447},[1103,3440,1480],{"class":1124},[1030,3442,3444],{"id":3443},"getting-started","Getting Started",[1026,3446,3447],{},"Django's learning curve is gentle, with excellent documentation:",[3449,3450,3451,3460,3468,3476],"ol",{},[1056,3452,3453,3456,3457],{},[1048,3454,3455],{},"Installation",": ",[1100,3458,3459],{},"pip install django",[1056,3461,3462,3456,3465],{},[1048,3463,3464],{},"Create Project",[1100,3466,3467],{},"django-admin startproject mysite",[1056,3469,3470,3456,3473],{},[1048,3471,3472],{},"Create App",[1100,3474,3475],{},"python manage.py startapp myapp",[1056,3477,3478,3456,3481],{},[1048,3479,3480],{},"Run Server",[1100,3482,3483],{},"python manage.py runserver",[1030,3485,3487],{"id":3486},"why-choose-django","Why Choose Django?",[1085,3489,3491],{"id":3490},"advantages","Advantages",[1053,3493,3494,3500,3506,3512,3518,3524],{},[1056,3495,3496,3499],{},[1048,3497,3498],{},"Mature and Stable",": 15+ years of development",[1056,3501,3502,3505],{},[1048,3503,3504],{},"Excellent Documentation",": Comprehensive and well-maintained",[1056,3507,3508,3511],{},[1048,3509,3510],{},"Large Community",": Active community and ecosystem",[1056,3513,3514,3517],{},[1048,3515,3516],{},"Security Focus",": Built-in security features",[1056,3519,3520,3523],{},[1048,3521,3522],{},"Scalability",": Proven at scale by major companies",[1056,3525,3526,3529],{},[1048,3527,3528],{},"Python Integration",": Leverages Python's strengths",[1085,3531,3533],{"id":3532},"when-django-fits","When Django Fits",[1053,3535,3536,3539,3542,3545,3548,3551],{},[1056,3537,3538],{},"Content-heavy applications",[1056,3540,3541],{},"Rapid prototyping needs",[1056,3543,3544],{},"Security-critical applications",[1056,3546,3547],{},"Applications requiring admin interfaces",[1056,3549,3550],{},"Projects with complex data relationships",[1056,3552,3553],{},"Teams familiar with Python",[1026,3555,3556],{},"Django's combination of rapid development, security, and scalability makes it an excellent choice for web applications ranging from simple blogs to complex enterprise systems. Its \"batteries included\" approach means you can focus on building your application's unique features rather than reinventing common web development patterns.",[3558,3559,3560],"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 .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sRjD_, html code.shiki .sRjD_{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}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 .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 .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sCyAa, html code.shiki .sCyAa{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .srjyR, html code.shiki .srjyR{--shiki-light:#90A4AE;--shiki-light-font-style:inherit;--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sJFLg, html code.shiki .sJFLg{--shiki-light:#E53935;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .s5q8q, html code.shiki .s5q8q{--shiki-light:#9C3EDA;--shiki-default:#B07D48;--shiki-dark:#BD976A}",{"title":1098,"searchDepth":1106,"depth":1113,"links":3562},[3563,3564,3565,3571,3572,3578,3582,3586,3590,3591],{"id":1032,"depth":1113,"text":1033},{"id":1042,"depth":1113,"text":1043},{"id":1082,"depth":1113,"text":1083,"children":3566},[3567,3568,3569,3570],{"id":1087,"depth":1141,"text":1088},{"id":1397,"depth":1141,"text":1398},{"id":1543,"depth":1141,"text":1544},{"id":1575,"depth":1141,"text":1576},{"id":1614,"depth":1113,"text":1615},{"id":1980,"depth":1113,"text":1981,"children":3573},[3574,3575,3576,3577],{"id":1984,"depth":1141,"text":1985},{"id":2127,"depth":1141,"text":2128},{"id":2349,"depth":1141,"text":2350},{"id":2541,"depth":1141,"text":2542},{"id":2794,"depth":1113,"text":2795,"children":3579},[3580,3581],{"id":2798,"depth":1141,"text":2799},{"id":2872,"depth":1141,"text":2873},{"id":2901,"depth":1113,"text":2902,"children":3583},[3584,3585],{"id":2905,"depth":1141,"text":2906},{"id":3099,"depth":1141,"text":3100},{"id":3129,"depth":1113,"text":775,"children":3587},[3588,3589],{"id":3135,"depth":1141,"text":320},{"id":3274,"depth":1141,"text":673},{"id":3443,"depth":1113,"text":3444},{"id":3486,"depth":1113,"text":3487,"children":3592},[3593,3594],{"id":3490,"depth":1141,"text":3491},{"id":3532,"depth":1141,"text":3533},"md",null,{},{"title":11,"description":1028},"YHyMyRVn2EBk9ao4Uqa74Wx6k9g2RO3eCNGbIfIO0ok",[3601,3603],{"title":5,"path":6,"stem":7,"description":3602,"children":-1},"Welcome to the comprehensive Django guide. This section establishes the foundational knowledge required for effective Django development, covering everything from core concepts to your first working application.",{"title":15,"path":16,"stem":17,"description":3604,"children":-1},"Django's design philosophy shapes every aspect of the framework, creating a consistent and predictable development experience. Understanding these principles will help you write better Django code and make architectural decisions that align with the framework's strengths.",1772474895357]