[{"data":1,"prerenderedAt":11548},["ShallowReactive",2],{"navigation":3,"/development-environment/environments-local-staging-production":1016,"/development-environment/environments-local-staging-production-surround":11543},[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":78,"body":1018,"description":1028,"extension":11538,"links":11539,"meta":11540,"navigation":1186,"path":79,"seo":11541,"stem":80,"__hash__":11542},"docs/02.development-environment/6.environments-local-staging-production.md",{"type":1019,"value":1020,"toc":11503},"minimark",[1021,1025,1029,1034,1039,1045,1061,1066,1080,1085,1099,1103,1107,1118,1122,1127,2874,2878,2882,2887,3683,3687,3692,3913,3917,3922,4350,4354,4358,4363,5308,5312,5317,5555,5559,5564,5934,5938,5942,5947,7619,7623,7628,7898,7902,7907,8425,8429,8433,8438,9150,9154,9159,10117,10121,10125,10130,10475,10479,10484,10773,10777,10781,10786,11497,11500],[1022,1023,78],"h1",{"id":1024},"managing-django-environments-local-staging-and-production",[1026,1027,1028],"p",{},"Proper environment management is crucial for Django applications. This comprehensive guide covers setting up and managing different environments, ensuring smooth transitions from development to production while maintaining security and performance.",[1030,1031,1033],"h2",{"id":1032},"environment-overview","Environment Overview",[1035,1036,1038],"h3",{"id":1037},"environment-types","Environment Types",[1026,1040,1041],{},[1042,1043,1044],"strong",{},"Local Development",[1046,1047,1048,1052,1055,1058],"ul",{},[1049,1050,1051],"li",{},"Individual developer machines",[1049,1053,1054],{},"Fast iteration and debugging",[1049,1056,1057],{},"Simplified configuration",[1049,1059,1060],{},"Test data and fixtures",[1026,1062,1063],{},[1042,1064,1065],{},"Staging",[1046,1067,1068,1071,1074,1077],{},[1049,1069,1070],{},"Production-like environment",[1049,1072,1073],{},"Integration testing",[1049,1075,1076],{},"Performance validation",[1049,1078,1079],{},"Deployment rehearsal",[1026,1081,1082],{},[1042,1083,1084],{},"Production",[1046,1086,1087,1090,1093,1096],{},[1049,1088,1089],{},"Live application serving users",[1049,1091,1092],{},"Optimized for performance and security",[1049,1094,1095],{},"Monitoring and logging",[1049,1097,1098],{},"Backup and disaster recovery",[1030,1100,1102],{"id":1101},"environment-configuration-strategy","Environment Configuration Strategy",[1035,1104,1106],{"id":1105},"directory-structure","Directory Structure",[1108,1109,1114],"pre",{"className":1110,"code":1112,"language":1113},[1111],"language-text","myproject/\n├── config/\n│   ├── settings/\n│   │   ├── __init__.py\n│   │   ├── base.py\n│   │   ├── local.py\n│   │   ├── staging.py\n│   │   └── production.py\n│   ├── urls.py\n│   ├── wsgi.py\n│   └── asgi.py\n├── requirements/\n│   ├── base.txt\n│   ├── local.txt\n│   ├── staging.txt\n│   └── production.txt\n├── deploy/\n│   ├── docker/\n│   ├── nginx/\n│   └── scripts/\n├── .env.example\n├── .env.local\n├── .env.staging\n└── .env.production\n","text",[1115,1116,1112],"code",{"__ignoreMap":1117},"",[1035,1119,1121],{"id":1120},"base-configuration","Base Configuration",[1026,1123,1124],{},[1042,1125,1126],{},"config/settings/base.py:",[1108,1128,1132],{"className":1129,"code":1130,"language":1131,"meta":1117,"style":1117},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","import os\nfrom pathlib import Path\nfrom decouple import config, Csv\n\n# Build paths\nBASE_DIR = Path(__file__).resolve().parent.parent.parent\n\n# Core Django settings\nSECRET_KEY = config('SECRET_KEY')\nDEBUG = config('DEBUG', default=False, cast=bool)\nALLOWED_HOSTS = config('ALLOWED_HOSTS', default='', cast=Csv())\n\n# Application definition\nDJANGO_APPS = [\n    'django.contrib.admin',\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.sessions',\n    'django.contrib.messages',\n    'django.contrib.staticfiles',\n]\n\nTHIRD_PARTY_APPS = [\n    'rest_framework',\n    'corsheaders',\n]\n\nLOCAL_APPS = [\n    'accounts',\n    'blog',\n    'api',\n]\n\nINSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS\n\nMIDDLEWARE = [\n    'corsheaders.middleware.CorsMiddleware',\n    'django.middleware.security.SecurityMiddleware',\n    'whitenoise.middleware.WhiteNoiseMiddleware',\n    'django.contrib.sessions.middleware.SessionMiddleware',\n    'django.middleware.common.CommonMiddleware',\n    'django.middleware.csrf.CsrfViewMiddleware',\n    'django.contrib.auth.middleware.AuthenticationMiddleware',\n    'django.contrib.messages.middleware.MessageMiddleware',\n    'django.middleware.clickjacking.XFrameOptionsMiddleware',\n]\n\nROOT_URLCONF = 'config.urls'\n\n# Templates\nTEMPLATES = [\n    {\n        'BACKEND': 'django.template.backends.django.DjangoTemplates',\n        'DIRS': [BASE_DIR / 'templates'],\n        'APP_DIRS': True,\n        'OPTIONS': {\n            'context_processors': [\n                'django.template.context_processors.debug',\n                'django.template.context_processors.request',\n                'django.contrib.auth.context_processors.auth',\n                'django.contrib.messages.context_processors.messages',\n            ],\n        },\n    },\n]\n\n# WSGI/ASGI\nWSGI_APPLICATION = 'config.wsgi.application'\nASGI_APPLICATION = 'config.asgi.application'\n\n# Internationalization\nLANGUAGE_CODE = 'en-us'\nTIME_ZONE = 'UTC'\nUSE_I18N = True\nUSE_L10N = True\nUSE_TZ = True\n\n# Static files\nSTATIC_URL = '/static/'\nSTATIC_ROOT = BASE_DIR / 'staticfiles'\nSTATICFILES_DIRS = [BASE_DIR / 'static']\n\n# Media files\nMEDIA_URL = '/media/'\nMEDIA_ROOT = BASE_DIR / 'media'\n\n# Default primary key field type\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Email configuration\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\nEMAIL_HOST = config('EMAIL_HOST', default='localhost')\nEMAIL_PORT = config('EMAIL_PORT', default=587, cast=int)\nEMAIL_USE_TLS = config('EMAIL_USE_TLS', default=True, cast=bool)\nEMAIL_HOST_USER = config('EMAIL_HOST_USER', default='')\nEMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD', default='')\nDEFAULT_FROM_EMAIL = config('DEFAULT_FROM_EMAIL', default='noreply@example.com')\n\n# Logging\nLOGGING = {\n    'version': 1,\n    'disable_existing_loggers': False,\n    'formatters': {\n        'verbose': {\n            'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',\n            'style': '{',\n        },\n        'simple': {\n            'format': '{levelname} {message}',\n            'style': '{',\n        },\n    },\n    'handlers': {\n        'console': {\n            'level': 'INFO',\n            'class': 'logging.StreamHandler',\n            'formatter': 'simple',\n        },\n    },\n    'root': {\n        'handlers': ['console'],\n    },\n    'loggers': {\n        'django': {\n            'handlers': ['console'],\n            'level': 'INFO',\n            'propagate': False,\n        },\n    },\n}\n","python",[1115,1133,1134,1147,1161,1181,1188,1195,1239,1244,1250,1274,1318,1357,1362,1368,1379,1393,1405,1417,1429,1441,1453,1459,1464,1474,1486,1498,1503,1508,1518,1530,1542,1554,1559,1564,1587,1592,1602,1614,1626,1638,1650,1662,1674,1686,1698,1710,1715,1720,1737,1742,1748,1758,1764,1787,1817,1834,1849,1864,1877,1889,1901,1913,1919,1925,1931,1936,1941,1947,1962,1977,1982,1988,2003,2018,2029,2039,2049,2054,2060,2075,2095,2118,2123,2129,2144,2163,2168,2174,2189,2194,2200,2215,2248,2287,2324,2352,2380,2413,2418,2424,2434,2451,2468,2482,2496,2544,2565,2570,2584,2605,2624,2629,2634,2648,2662,2683,2704,2724,2729,2734,2748,2769,2774,2788,2802,2823,2842,2858,2863,2868],{"__ignoreMap":1117},[1135,1136,1139,1143],"span",{"class":1137,"line":1138},"line",1,[1135,1140,1142],{"class":1141},"siDh9","import",[1135,1144,1146],{"class":1145},"sftqT"," os\n",[1135,1148,1150,1153,1156,1158],{"class":1137,"line":1149},2,[1135,1151,1152],{"class":1141},"from",[1135,1154,1155],{"class":1145}," pathlib ",[1135,1157,1142],{"class":1141},[1135,1159,1160],{"class":1145}," Path\n",[1135,1162,1164,1166,1169,1171,1174,1178],{"class":1137,"line":1163},3,[1135,1165,1152],{"class":1141},[1135,1167,1168],{"class":1145}," decouple ",[1135,1170,1142],{"class":1141},[1135,1172,1173],{"class":1145}," config",[1135,1175,1177],{"class":1176},"soVBu",",",[1135,1179,1180],{"class":1145}," Csv\n",[1135,1182,1184],{"class":1137,"line":1183},4,[1135,1185,1187],{"emptyLinePlaceholder":1186},true,"\n",[1135,1189,1191],{"class":1137,"line":1190},5,[1135,1192,1194],{"class":1193},"s9Tkl","# Build paths\n",[1135,1196,1198,1202,1205,1209,1212,1216,1219,1222,1225,1229,1232,1234,1236],{"class":1137,"line":1197},6,[1135,1199,1201],{"class":1200},"se3Ec","BASE_DIR",[1135,1203,1204],{"class":1176}," =",[1135,1206,1208],{"class":1207},"siWMO"," Path",[1135,1210,1211],{"class":1176},"(",[1135,1213,1215],{"class":1214},"s131V","__file__",[1135,1217,1218],{"class":1176},").",[1135,1220,1221],{"class":1207},"resolve",[1135,1223,1224],{"class":1176},"().",[1135,1226,1228],{"class":1227},"sBPpx","parent",[1135,1230,1231],{"class":1176},".",[1135,1233,1228],{"class":1227},[1135,1235,1231],{"class":1176},[1135,1237,1238],{"class":1227},"parent\n",[1135,1240,1242],{"class":1137,"line":1241},7,[1135,1243,1187],{"emptyLinePlaceholder":1186},[1135,1245,1247],{"class":1137,"line":1246},8,[1135,1248,1249],{"class":1193},"# Core Django settings\n",[1135,1251,1253,1256,1258,1260,1262,1266,1269,1271],{"class":1137,"line":1252},9,[1135,1254,1255],{"class":1200},"SECRET_KEY",[1135,1257,1204],{"class":1176},[1135,1259,1173],{"class":1207},[1135,1261,1211],{"class":1176},[1135,1263,1265],{"class":1264},"sbYkP","'",[1135,1267,1255],{"class":1268},"sTbE_",[1135,1270,1265],{"class":1264},[1135,1272,1273],{"class":1176},")\n",[1135,1275,1277,1280,1282,1284,1286,1288,1290,1292,1294,1298,1301,1305,1307,1310,1312,1316],{"class":1137,"line":1276},10,[1135,1278,1279],{"class":1200},"DEBUG",[1135,1281,1204],{"class":1176},[1135,1283,1173],{"class":1207},[1135,1285,1211],{"class":1176},[1135,1287,1265],{"class":1264},[1135,1289,1279],{"class":1268},[1135,1291,1265],{"class":1264},[1135,1293,1177],{"class":1176},[1135,1295,1297],{"class":1296},"sqOPj"," default",[1135,1299,1300],{"class":1176},"=",[1135,1302,1304],{"class":1303},"s8XtY","False",[1135,1306,1177],{"class":1176},[1135,1308,1309],{"class":1296}," cast",[1135,1311,1300],{"class":1176},[1135,1313,1315],{"class":1314},"sa2tF","bool",[1135,1317,1273],{"class":1176},[1135,1319,1321,1324,1326,1328,1330,1332,1334,1336,1338,1340,1342,1345,1347,1349,1351,1354],{"class":1137,"line":1320},11,[1135,1322,1323],{"class":1200},"ALLOWED_HOSTS",[1135,1325,1204],{"class":1176},[1135,1327,1173],{"class":1207},[1135,1329,1211],{"class":1176},[1135,1331,1265],{"class":1264},[1135,1333,1323],{"class":1268},[1135,1335,1265],{"class":1264},[1135,1337,1177],{"class":1176},[1135,1339,1297],{"class":1296},[1135,1341,1300],{"class":1176},[1135,1343,1344],{"class":1264},"''",[1135,1346,1177],{"class":1176},[1135,1348,1309],{"class":1296},[1135,1350,1300],{"class":1176},[1135,1352,1353],{"class":1207},"Csv",[1135,1355,1356],{"class":1176},"())\n",[1135,1358,1360],{"class":1137,"line":1359},12,[1135,1361,1187],{"emptyLinePlaceholder":1186},[1135,1363,1365],{"class":1137,"line":1364},13,[1135,1366,1367],{"class":1193},"# Application definition\n",[1135,1369,1371,1374,1376],{"class":1137,"line":1370},14,[1135,1372,1373],{"class":1200},"DJANGO_APPS",[1135,1375,1204],{"class":1176},[1135,1377,1378],{"class":1176}," [\n",[1135,1380,1382,1385,1388,1390],{"class":1137,"line":1381},15,[1135,1383,1384],{"class":1264},"    '",[1135,1386,1387],{"class":1268},"django.contrib.admin",[1135,1389,1265],{"class":1264},[1135,1391,1392],{"class":1176},",\n",[1135,1394,1396,1398,1401,1403],{"class":1137,"line":1395},16,[1135,1397,1384],{"class":1264},[1135,1399,1400],{"class":1268},"django.contrib.auth",[1135,1402,1265],{"class":1264},[1135,1404,1392],{"class":1176},[1135,1406,1408,1410,1413,1415],{"class":1137,"line":1407},17,[1135,1409,1384],{"class":1264},[1135,1411,1412],{"class":1268},"django.contrib.contenttypes",[1135,1414,1265],{"class":1264},[1135,1416,1392],{"class":1176},[1135,1418,1420,1422,1425,1427],{"class":1137,"line":1419},18,[1135,1421,1384],{"class":1264},[1135,1423,1424],{"class":1268},"django.contrib.sessions",[1135,1426,1265],{"class":1264},[1135,1428,1392],{"class":1176},[1135,1430,1432,1434,1437,1439],{"class":1137,"line":1431},19,[1135,1433,1384],{"class":1264},[1135,1435,1436],{"class":1268},"django.contrib.messages",[1135,1438,1265],{"class":1264},[1135,1440,1392],{"class":1176},[1135,1442,1444,1446,1449,1451],{"class":1137,"line":1443},20,[1135,1445,1384],{"class":1264},[1135,1447,1448],{"class":1268},"django.contrib.staticfiles",[1135,1450,1265],{"class":1264},[1135,1452,1392],{"class":1176},[1135,1454,1456],{"class":1137,"line":1455},21,[1135,1457,1458],{"class":1176},"]\n",[1135,1460,1462],{"class":1137,"line":1461},22,[1135,1463,1187],{"emptyLinePlaceholder":1186},[1135,1465,1467,1470,1472],{"class":1137,"line":1466},23,[1135,1468,1469],{"class":1200},"THIRD_PARTY_APPS",[1135,1471,1204],{"class":1176},[1135,1473,1378],{"class":1176},[1135,1475,1477,1479,1482,1484],{"class":1137,"line":1476},24,[1135,1478,1384],{"class":1264},[1135,1480,1481],{"class":1268},"rest_framework",[1135,1483,1265],{"class":1264},[1135,1485,1392],{"class":1176},[1135,1487,1489,1491,1494,1496],{"class":1137,"line":1488},25,[1135,1490,1384],{"class":1264},[1135,1492,1493],{"class":1268},"corsheaders",[1135,1495,1265],{"class":1264},[1135,1497,1392],{"class":1176},[1135,1499,1501],{"class":1137,"line":1500},26,[1135,1502,1458],{"class":1176},[1135,1504,1506],{"class":1137,"line":1505},27,[1135,1507,1187],{"emptyLinePlaceholder":1186},[1135,1509,1511,1514,1516],{"class":1137,"line":1510},28,[1135,1512,1513],{"class":1200},"LOCAL_APPS",[1135,1515,1204],{"class":1176},[1135,1517,1378],{"class":1176},[1135,1519,1521,1523,1526,1528],{"class":1137,"line":1520},29,[1135,1522,1384],{"class":1264},[1135,1524,1525],{"class":1268},"accounts",[1135,1527,1265],{"class":1264},[1135,1529,1392],{"class":1176},[1135,1531,1533,1535,1538,1540],{"class":1137,"line":1532},30,[1135,1534,1384],{"class":1264},[1135,1536,1537],{"class":1268},"blog",[1135,1539,1265],{"class":1264},[1135,1541,1392],{"class":1176},[1135,1543,1545,1547,1550,1552],{"class":1137,"line":1544},31,[1135,1546,1384],{"class":1264},[1135,1548,1549],{"class":1268},"api",[1135,1551,1265],{"class":1264},[1135,1553,1392],{"class":1176},[1135,1555,1557],{"class":1137,"line":1556},32,[1135,1558,1458],{"class":1176},[1135,1560,1562],{"class":1137,"line":1561},33,[1135,1563,1187],{"emptyLinePlaceholder":1186},[1135,1565,1567,1570,1572,1575,1579,1582,1584],{"class":1137,"line":1566},34,[1135,1568,1569],{"class":1200},"INSTALLED_APPS",[1135,1571,1204],{"class":1176},[1135,1573,1574],{"class":1200}," DJANGO_APPS",[1135,1576,1578],{"class":1577},"sVsLi"," +",[1135,1580,1581],{"class":1200}," THIRD_PARTY_APPS",[1135,1583,1578],{"class":1577},[1135,1585,1586],{"class":1200}," LOCAL_APPS\n",[1135,1588,1590],{"class":1137,"line":1589},35,[1135,1591,1187],{"emptyLinePlaceholder":1186},[1135,1593,1595,1598,1600],{"class":1137,"line":1594},36,[1135,1596,1597],{"class":1200},"MIDDLEWARE",[1135,1599,1204],{"class":1176},[1135,1601,1378],{"class":1176},[1135,1603,1605,1607,1610,1612],{"class":1137,"line":1604},37,[1135,1606,1384],{"class":1264},[1135,1608,1609],{"class":1268},"corsheaders.middleware.CorsMiddleware",[1135,1611,1265],{"class":1264},[1135,1613,1392],{"class":1176},[1135,1615,1617,1619,1622,1624],{"class":1137,"line":1616},38,[1135,1618,1384],{"class":1264},[1135,1620,1621],{"class":1268},"django.middleware.security.SecurityMiddleware",[1135,1623,1265],{"class":1264},[1135,1625,1392],{"class":1176},[1135,1627,1629,1631,1634,1636],{"class":1137,"line":1628},39,[1135,1630,1384],{"class":1264},[1135,1632,1633],{"class":1268},"whitenoise.middleware.WhiteNoiseMiddleware",[1135,1635,1265],{"class":1264},[1135,1637,1392],{"class":1176},[1135,1639,1641,1643,1646,1648],{"class":1137,"line":1640},40,[1135,1642,1384],{"class":1264},[1135,1644,1645],{"class":1268},"django.contrib.sessions.middleware.SessionMiddleware",[1135,1647,1265],{"class":1264},[1135,1649,1392],{"class":1176},[1135,1651,1653,1655,1658,1660],{"class":1137,"line":1652},41,[1135,1654,1384],{"class":1264},[1135,1656,1657],{"class":1268},"django.middleware.common.CommonMiddleware",[1135,1659,1265],{"class":1264},[1135,1661,1392],{"class":1176},[1135,1663,1665,1667,1670,1672],{"class":1137,"line":1664},42,[1135,1666,1384],{"class":1264},[1135,1668,1669],{"class":1268},"django.middleware.csrf.CsrfViewMiddleware",[1135,1671,1265],{"class":1264},[1135,1673,1392],{"class":1176},[1135,1675,1677,1679,1682,1684],{"class":1137,"line":1676},43,[1135,1678,1384],{"class":1264},[1135,1680,1681],{"class":1268},"django.contrib.auth.middleware.AuthenticationMiddleware",[1135,1683,1265],{"class":1264},[1135,1685,1392],{"class":1176},[1135,1687,1689,1691,1694,1696],{"class":1137,"line":1688},44,[1135,1690,1384],{"class":1264},[1135,1692,1693],{"class":1268},"django.contrib.messages.middleware.MessageMiddleware",[1135,1695,1265],{"class":1264},[1135,1697,1392],{"class":1176},[1135,1699,1701,1703,1706,1708],{"class":1137,"line":1700},45,[1135,1702,1384],{"class":1264},[1135,1704,1705],{"class":1268},"django.middleware.clickjacking.XFrameOptionsMiddleware",[1135,1707,1265],{"class":1264},[1135,1709,1392],{"class":1176},[1135,1711,1713],{"class":1137,"line":1712},46,[1135,1714,1458],{"class":1176},[1135,1716,1718],{"class":1137,"line":1717},47,[1135,1719,1187],{"emptyLinePlaceholder":1186},[1135,1721,1723,1726,1728,1731,1734],{"class":1137,"line":1722},48,[1135,1724,1725],{"class":1200},"ROOT_URLCONF",[1135,1727,1204],{"class":1176},[1135,1729,1730],{"class":1264}," '",[1135,1732,1733],{"class":1268},"config.urls",[1135,1735,1736],{"class":1264},"'\n",[1135,1738,1740],{"class":1137,"line":1739},49,[1135,1741,1187],{"emptyLinePlaceholder":1186},[1135,1743,1745],{"class":1137,"line":1744},50,[1135,1746,1747],{"class":1193},"# Templates\n",[1135,1749,1751,1754,1756],{"class":1137,"line":1750},51,[1135,1752,1753],{"class":1200},"TEMPLATES",[1135,1755,1204],{"class":1176},[1135,1757,1378],{"class":1176},[1135,1759,1761],{"class":1137,"line":1760},52,[1135,1762,1763],{"class":1176},"    {\n",[1135,1765,1767,1770,1773,1775,1778,1780,1783,1785],{"class":1137,"line":1766},53,[1135,1768,1769],{"class":1264},"        '",[1135,1771,1772],{"class":1268},"BACKEND",[1135,1774,1265],{"class":1264},[1135,1776,1777],{"class":1176},":",[1135,1779,1730],{"class":1264},[1135,1781,1782],{"class":1268},"django.template.backends.django.DjangoTemplates",[1135,1784,1265],{"class":1264},[1135,1786,1392],{"class":1176},[1135,1788,1790,1792,1795,1797,1799,1802,1804,1807,1809,1812,1814],{"class":1137,"line":1789},54,[1135,1791,1769],{"class":1264},[1135,1793,1794],{"class":1268},"DIRS",[1135,1796,1265],{"class":1264},[1135,1798,1777],{"class":1176},[1135,1800,1801],{"class":1176}," [",[1135,1803,1201],{"class":1200},[1135,1805,1806],{"class":1577}," /",[1135,1808,1730],{"class":1264},[1135,1810,1811],{"class":1268},"templates",[1135,1813,1265],{"class":1264},[1135,1815,1816],{"class":1176},"],\n",[1135,1818,1820,1822,1825,1827,1829,1832],{"class":1137,"line":1819},55,[1135,1821,1769],{"class":1264},[1135,1823,1824],{"class":1268},"APP_DIRS",[1135,1826,1265],{"class":1264},[1135,1828,1777],{"class":1176},[1135,1830,1831],{"class":1303}," True",[1135,1833,1392],{"class":1176},[1135,1835,1837,1839,1842,1844,1846],{"class":1137,"line":1836},56,[1135,1838,1769],{"class":1264},[1135,1840,1841],{"class":1268},"OPTIONS",[1135,1843,1265],{"class":1264},[1135,1845,1777],{"class":1176},[1135,1847,1848],{"class":1176}," {\n",[1135,1850,1852,1855,1858,1860,1862],{"class":1137,"line":1851},57,[1135,1853,1854],{"class":1264},"            '",[1135,1856,1857],{"class":1268},"context_processors",[1135,1859,1265],{"class":1264},[1135,1861,1777],{"class":1176},[1135,1863,1378],{"class":1176},[1135,1865,1867,1870,1873,1875],{"class":1137,"line":1866},58,[1135,1868,1869],{"class":1264},"                '",[1135,1871,1872],{"class":1268},"django.template.context_processors.debug",[1135,1874,1265],{"class":1264},[1135,1876,1392],{"class":1176},[1135,1878,1880,1882,1885,1887],{"class":1137,"line":1879},59,[1135,1881,1869],{"class":1264},[1135,1883,1884],{"class":1268},"django.template.context_processors.request",[1135,1886,1265],{"class":1264},[1135,1888,1392],{"class":1176},[1135,1890,1892,1894,1897,1899],{"class":1137,"line":1891},60,[1135,1893,1869],{"class":1264},[1135,1895,1896],{"class":1268},"django.contrib.auth.context_processors.auth",[1135,1898,1265],{"class":1264},[1135,1900,1392],{"class":1176},[1135,1902,1904,1906,1909,1911],{"class":1137,"line":1903},61,[1135,1905,1869],{"class":1264},[1135,1907,1908],{"class":1268},"django.contrib.messages.context_processors.messages",[1135,1910,1265],{"class":1264},[1135,1912,1392],{"class":1176},[1135,1914,1916],{"class":1137,"line":1915},62,[1135,1917,1918],{"class":1176},"            ],\n",[1135,1920,1922],{"class":1137,"line":1921},63,[1135,1923,1924],{"class":1176},"        },\n",[1135,1926,1928],{"class":1137,"line":1927},64,[1135,1929,1930],{"class":1176},"    },\n",[1135,1932,1934],{"class":1137,"line":1933},65,[1135,1935,1458],{"class":1176},[1135,1937,1939],{"class":1137,"line":1938},66,[1135,1940,1187],{"emptyLinePlaceholder":1186},[1135,1942,1944],{"class":1137,"line":1943},67,[1135,1945,1946],{"class":1193},"# WSGI/ASGI\n",[1135,1948,1950,1953,1955,1957,1960],{"class":1137,"line":1949},68,[1135,1951,1952],{"class":1200},"WSGI_APPLICATION",[1135,1954,1204],{"class":1176},[1135,1956,1730],{"class":1264},[1135,1958,1959],{"class":1268},"config.wsgi.application",[1135,1961,1736],{"class":1264},[1135,1963,1965,1968,1970,1972,1975],{"class":1137,"line":1964},69,[1135,1966,1967],{"class":1200},"ASGI_APPLICATION",[1135,1969,1204],{"class":1176},[1135,1971,1730],{"class":1264},[1135,1973,1974],{"class":1268},"config.asgi.application",[1135,1976,1736],{"class":1264},[1135,1978,1980],{"class":1137,"line":1979},70,[1135,1981,1187],{"emptyLinePlaceholder":1186},[1135,1983,1985],{"class":1137,"line":1984},71,[1135,1986,1987],{"class":1193},"# Internationalization\n",[1135,1989,1991,1994,1996,1998,2001],{"class":1137,"line":1990},72,[1135,1992,1993],{"class":1200},"LANGUAGE_CODE",[1135,1995,1204],{"class":1176},[1135,1997,1730],{"class":1264},[1135,1999,2000],{"class":1268},"en-us",[1135,2002,1736],{"class":1264},[1135,2004,2006,2009,2011,2013,2016],{"class":1137,"line":2005},73,[1135,2007,2008],{"class":1200},"TIME_ZONE",[1135,2010,1204],{"class":1176},[1135,2012,1730],{"class":1264},[1135,2014,2015],{"class":1268},"UTC",[1135,2017,1736],{"class":1264},[1135,2019,2021,2024,2026],{"class":1137,"line":2020},74,[1135,2022,2023],{"class":1200},"USE_I18N",[1135,2025,1204],{"class":1176},[1135,2027,2028],{"class":1303}," True\n",[1135,2030,2032,2035,2037],{"class":1137,"line":2031},75,[1135,2033,2034],{"class":1200},"USE_L10N",[1135,2036,1204],{"class":1176},[1135,2038,2028],{"class":1303},[1135,2040,2042,2045,2047],{"class":1137,"line":2041},76,[1135,2043,2044],{"class":1200},"USE_TZ",[1135,2046,1204],{"class":1176},[1135,2048,2028],{"class":1303},[1135,2050,2052],{"class":1137,"line":2051},77,[1135,2053,1187],{"emptyLinePlaceholder":1186},[1135,2055,2057],{"class":1137,"line":2056},78,[1135,2058,2059],{"class":1193},"# Static files\n",[1135,2061,2063,2066,2068,2070,2073],{"class":1137,"line":2062},79,[1135,2064,2065],{"class":1200},"STATIC_URL",[1135,2067,1204],{"class":1176},[1135,2069,1730],{"class":1264},[1135,2071,2072],{"class":1268},"/static/",[1135,2074,1736],{"class":1264},[1135,2076,2078,2081,2083,2086,2088,2090,2093],{"class":1137,"line":2077},80,[1135,2079,2080],{"class":1200},"STATIC_ROOT",[1135,2082,1204],{"class":1176},[1135,2084,2085],{"class":1200}," BASE_DIR",[1135,2087,1806],{"class":1577},[1135,2089,1730],{"class":1264},[1135,2091,2092],{"class":1268},"staticfiles",[1135,2094,1736],{"class":1264},[1135,2096,2098,2101,2103,2105,2107,2109,2111,2114,2116],{"class":1137,"line":2097},81,[1135,2099,2100],{"class":1200},"STATICFILES_DIRS",[1135,2102,1204],{"class":1176},[1135,2104,1801],{"class":1176},[1135,2106,1201],{"class":1200},[1135,2108,1806],{"class":1577},[1135,2110,1730],{"class":1264},[1135,2112,2113],{"class":1268},"static",[1135,2115,1265],{"class":1264},[1135,2117,1458],{"class":1176},[1135,2119,2121],{"class":1137,"line":2120},82,[1135,2122,1187],{"emptyLinePlaceholder":1186},[1135,2124,2126],{"class":1137,"line":2125},83,[1135,2127,2128],{"class":1193},"# Media files\n",[1135,2130,2132,2135,2137,2139,2142],{"class":1137,"line":2131},84,[1135,2133,2134],{"class":1200},"MEDIA_URL",[1135,2136,1204],{"class":1176},[1135,2138,1730],{"class":1264},[1135,2140,2141],{"class":1268},"/media/",[1135,2143,1736],{"class":1264},[1135,2145,2147,2150,2152,2154,2156,2158,2161],{"class":1137,"line":2146},85,[1135,2148,2149],{"class":1200},"MEDIA_ROOT",[1135,2151,1204],{"class":1176},[1135,2153,2085],{"class":1200},[1135,2155,1806],{"class":1577},[1135,2157,1730],{"class":1264},[1135,2159,2160],{"class":1268},"media",[1135,2162,1736],{"class":1264},[1135,2164,2166],{"class":1137,"line":2165},86,[1135,2167,1187],{"emptyLinePlaceholder":1186},[1135,2169,2171],{"class":1137,"line":2170},87,[1135,2172,2173],{"class":1193},"# Default primary key field type\n",[1135,2175,2177,2180,2182,2184,2187],{"class":1137,"line":2176},88,[1135,2178,2179],{"class":1200},"DEFAULT_AUTO_FIELD",[1135,2181,1204],{"class":1176},[1135,2183,1730],{"class":1264},[1135,2185,2186],{"class":1268},"django.db.models.BigAutoField",[1135,2188,1736],{"class":1264},[1135,2190,2192],{"class":1137,"line":2191},89,[1135,2193,1187],{"emptyLinePlaceholder":1186},[1135,2195,2197],{"class":1137,"line":2196},90,[1135,2198,2199],{"class":1193},"# Email configuration\n",[1135,2201,2203,2206,2208,2210,2213],{"class":1137,"line":2202},91,[1135,2204,2205],{"class":1200},"EMAIL_BACKEND",[1135,2207,1204],{"class":1176},[1135,2209,1730],{"class":1264},[1135,2211,2212],{"class":1268},"django.core.mail.backends.smtp.EmailBackend",[1135,2214,1736],{"class":1264},[1135,2216,2218,2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2244,2246],{"class":1137,"line":2217},92,[1135,2219,2220],{"class":1200},"EMAIL_HOST",[1135,2222,1204],{"class":1176},[1135,2224,1173],{"class":1207},[1135,2226,1211],{"class":1176},[1135,2228,1265],{"class":1264},[1135,2230,2220],{"class":1268},[1135,2232,1265],{"class":1264},[1135,2234,1177],{"class":1176},[1135,2236,1297],{"class":1296},[1135,2238,1300],{"class":1176},[1135,2240,1265],{"class":1264},[1135,2242,2243],{"class":1268},"localhost",[1135,2245,1265],{"class":1264},[1135,2247,1273],{"class":1176},[1135,2249,2251,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2276,2278,2280,2282,2285],{"class":1137,"line":2250},93,[1135,2252,2253],{"class":1200},"EMAIL_PORT",[1135,2255,1204],{"class":1176},[1135,2257,1173],{"class":1207},[1135,2259,1211],{"class":1176},[1135,2261,1265],{"class":1264},[1135,2263,2253],{"class":1268},[1135,2265,1265],{"class":1264},[1135,2267,1177],{"class":1176},[1135,2269,1297],{"class":1296},[1135,2271,1300],{"class":1176},[1135,2273,2275],{"class":2274},"s7CZa","587",[1135,2277,1177],{"class":1176},[1135,2279,1309],{"class":1296},[1135,2281,1300],{"class":1176},[1135,2283,2284],{"class":1314},"int",[1135,2286,1273],{"class":1176},[1135,2288,2290,2293,2295,2297,2299,2301,2303,2305,2307,2309,2311,2314,2316,2318,2320,2322],{"class":1137,"line":2289},94,[1135,2291,2292],{"class":1200},"EMAIL_USE_TLS",[1135,2294,1204],{"class":1176},[1135,2296,1173],{"class":1207},[1135,2298,1211],{"class":1176},[1135,2300,1265],{"class":1264},[1135,2302,2292],{"class":1268},[1135,2304,1265],{"class":1264},[1135,2306,1177],{"class":1176},[1135,2308,1297],{"class":1296},[1135,2310,1300],{"class":1176},[1135,2312,2313],{"class":1303},"True",[1135,2315,1177],{"class":1176},[1135,2317,1309],{"class":1296},[1135,2319,1300],{"class":1176},[1135,2321,1315],{"class":1314},[1135,2323,1273],{"class":1176},[1135,2325,2327,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350],{"class":1137,"line":2326},95,[1135,2328,2329],{"class":1200},"EMAIL_HOST_USER",[1135,2331,1204],{"class":1176},[1135,2333,1173],{"class":1207},[1135,2335,1211],{"class":1176},[1135,2337,1265],{"class":1264},[1135,2339,2329],{"class":1268},[1135,2341,1265],{"class":1264},[1135,2343,1177],{"class":1176},[1135,2345,1297],{"class":1296},[1135,2347,1300],{"class":1176},[1135,2349,1344],{"class":1264},[1135,2351,1273],{"class":1176},[1135,2353,2355,2358,2360,2362,2364,2366,2368,2370,2372,2374,2376,2378],{"class":1137,"line":2354},96,[1135,2356,2357],{"class":1200},"EMAIL_HOST_PASSWORD",[1135,2359,1204],{"class":1176},[1135,2361,1173],{"class":1207},[1135,2363,1211],{"class":1176},[1135,2365,1265],{"class":1264},[1135,2367,2357],{"class":1268},[1135,2369,1265],{"class":1264},[1135,2371,1177],{"class":1176},[1135,2373,1297],{"class":1296},[1135,2375,1300],{"class":1176},[1135,2377,1344],{"class":1264},[1135,2379,1273],{"class":1176},[1135,2381,2383,2386,2388,2390,2392,2394,2396,2398,2400,2402,2404,2406,2409,2411],{"class":1137,"line":2382},97,[1135,2384,2385],{"class":1200},"DEFAULT_FROM_EMAIL",[1135,2387,1204],{"class":1176},[1135,2389,1173],{"class":1207},[1135,2391,1211],{"class":1176},[1135,2393,1265],{"class":1264},[1135,2395,2385],{"class":1268},[1135,2397,1265],{"class":1264},[1135,2399,1177],{"class":1176},[1135,2401,1297],{"class":1296},[1135,2403,1300],{"class":1176},[1135,2405,1265],{"class":1264},[1135,2407,2408],{"class":1268},"noreply@example.com",[1135,2410,1265],{"class":1264},[1135,2412,1273],{"class":1176},[1135,2414,2416],{"class":1137,"line":2415},98,[1135,2417,1187],{"emptyLinePlaceholder":1186},[1135,2419,2421],{"class":1137,"line":2420},99,[1135,2422,2423],{"class":1193},"# Logging\n",[1135,2425,2427,2430,2432],{"class":1137,"line":2426},100,[1135,2428,2429],{"class":1200},"LOGGING",[1135,2431,1204],{"class":1176},[1135,2433,1848],{"class":1176},[1135,2435,2437,2439,2442,2444,2446,2449],{"class":1137,"line":2436},101,[1135,2438,1384],{"class":1264},[1135,2440,2441],{"class":1268},"version",[1135,2443,1265],{"class":1264},[1135,2445,1777],{"class":1176},[1135,2447,2448],{"class":2274}," 1",[1135,2450,1392],{"class":1176},[1135,2452,2454,2456,2459,2461,2463,2466],{"class":1137,"line":2453},102,[1135,2455,1384],{"class":1264},[1135,2457,2458],{"class":1268},"disable_existing_loggers",[1135,2460,1265],{"class":1264},[1135,2462,1777],{"class":1176},[1135,2464,2465],{"class":1303}," False",[1135,2467,1392],{"class":1176},[1135,2469,2471,2473,2476,2478,2480],{"class":1137,"line":2470},103,[1135,2472,1384],{"class":1264},[1135,2474,2475],{"class":1268},"formatters",[1135,2477,1265],{"class":1264},[1135,2479,1777],{"class":1176},[1135,2481,1848],{"class":1176},[1135,2483,2485,2487,2490,2492,2494],{"class":1137,"line":2484},104,[1135,2486,1769],{"class":1264},[1135,2488,2489],{"class":1268},"verbose",[1135,2491,1265],{"class":1264},[1135,2493,1777],{"class":1176},[1135,2495,1848],{"class":1176},[1135,2497,2499,2501,2504,2506,2508,2510,2514,2517,2520,2523,2527,2530,2533,2535,2537,2540,2542],{"class":1137,"line":2498},105,[1135,2500,1854],{"class":1264},[1135,2502,2503],{"class":1268},"format",[1135,2505,1265],{"class":1264},[1135,2507,1777],{"class":1176},[1135,2509,1730],{"class":1264},[1135,2511,2513],{"class":2512},"s3h35","{levelname}",[1135,2515,2516],{"class":2512}," {asctime}",[1135,2518,2519],{"class":2512}," {module}",[1135,2521,2522],{"class":2512}," {process",[1135,2524,2526],{"class":2525},"s5Kfy",":d",[1135,2528,2529],{"class":2512},"}",[1135,2531,2532],{"class":2512}," {thread",[1135,2534,2526],{"class":2525},[1135,2536,2529],{"class":2512},[1135,2538,2539],{"class":2512}," {message}",[1135,2541,1265],{"class":1264},[1135,2543,1392],{"class":1176},[1135,2545,2547,2549,2552,2554,2556,2558,2561,2563],{"class":1137,"line":2546},106,[1135,2548,1854],{"class":1264},[1135,2550,2551],{"class":1268},"style",[1135,2553,1265],{"class":1264},[1135,2555,1777],{"class":1176},[1135,2557,1730],{"class":1264},[1135,2559,2560],{"class":1268},"{",[1135,2562,1265],{"class":1264},[1135,2564,1392],{"class":1176},[1135,2566,2568],{"class":1137,"line":2567},107,[1135,2569,1924],{"class":1176},[1135,2571,2573,2575,2578,2580,2582],{"class":1137,"line":2572},108,[1135,2574,1769],{"class":1264},[1135,2576,2577],{"class":1268},"simple",[1135,2579,1265],{"class":1264},[1135,2581,1777],{"class":1176},[1135,2583,1848],{"class":1176},[1135,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603],{"class":1137,"line":2586},109,[1135,2588,1854],{"class":1264},[1135,2590,2503],{"class":1268},[1135,2592,1265],{"class":1264},[1135,2594,1777],{"class":1176},[1135,2596,1730],{"class":1264},[1135,2598,2513],{"class":2512},[1135,2600,2539],{"class":2512},[1135,2602,1265],{"class":1264},[1135,2604,1392],{"class":1176},[1135,2606,2608,2610,2612,2614,2616,2618,2620,2622],{"class":1137,"line":2607},110,[1135,2609,1854],{"class":1264},[1135,2611,2551],{"class":1268},[1135,2613,1265],{"class":1264},[1135,2615,1777],{"class":1176},[1135,2617,1730],{"class":1264},[1135,2619,2560],{"class":1268},[1135,2621,1265],{"class":1264},[1135,2623,1392],{"class":1176},[1135,2625,2627],{"class":1137,"line":2626},111,[1135,2628,1924],{"class":1176},[1135,2630,2632],{"class":1137,"line":2631},112,[1135,2633,1930],{"class":1176},[1135,2635,2637,2639,2642,2644,2646],{"class":1137,"line":2636},113,[1135,2638,1384],{"class":1264},[1135,2640,2641],{"class":1268},"handlers",[1135,2643,1265],{"class":1264},[1135,2645,1777],{"class":1176},[1135,2647,1848],{"class":1176},[1135,2649,2651,2653,2656,2658,2660],{"class":1137,"line":2650},114,[1135,2652,1769],{"class":1264},[1135,2654,2655],{"class":1268},"console",[1135,2657,1265],{"class":1264},[1135,2659,1777],{"class":1176},[1135,2661,1848],{"class":1176},[1135,2663,2665,2667,2670,2672,2674,2676,2679,2681],{"class":1137,"line":2664},115,[1135,2666,1854],{"class":1264},[1135,2668,2669],{"class":1268},"level",[1135,2671,1265],{"class":1264},[1135,2673,1777],{"class":1176},[1135,2675,1730],{"class":1264},[1135,2677,2678],{"class":1268},"INFO",[1135,2680,1265],{"class":1264},[1135,2682,1392],{"class":1176},[1135,2684,2686,2688,2691,2693,2695,2697,2700,2702],{"class":1137,"line":2685},116,[1135,2687,1854],{"class":1264},[1135,2689,2690],{"class":1268},"class",[1135,2692,1265],{"class":1264},[1135,2694,1777],{"class":1176},[1135,2696,1730],{"class":1264},[1135,2698,2699],{"class":1268},"logging.StreamHandler",[1135,2701,1265],{"class":1264},[1135,2703,1392],{"class":1176},[1135,2705,2707,2709,2712,2714,2716,2718,2720,2722],{"class":1137,"line":2706},117,[1135,2708,1854],{"class":1264},[1135,2710,2711],{"class":1268},"formatter",[1135,2713,1265],{"class":1264},[1135,2715,1777],{"class":1176},[1135,2717,1730],{"class":1264},[1135,2719,2577],{"class":1268},[1135,2721,1265],{"class":1264},[1135,2723,1392],{"class":1176},[1135,2725,2727],{"class":1137,"line":2726},118,[1135,2728,1924],{"class":1176},[1135,2730,2732],{"class":1137,"line":2731},119,[1135,2733,1930],{"class":1176},[1135,2735,2737,2739,2742,2744,2746],{"class":1137,"line":2736},120,[1135,2738,1384],{"class":1264},[1135,2740,2741],{"class":1268},"root",[1135,2743,1265],{"class":1264},[1135,2745,1777],{"class":1176},[1135,2747,1848],{"class":1176},[1135,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767],{"class":1137,"line":2750},121,[1135,2752,1769],{"class":1264},[1135,2754,2641],{"class":1268},[1135,2756,1265],{"class":1264},[1135,2758,1777],{"class":1176},[1135,2760,1801],{"class":1176},[1135,2762,1265],{"class":1264},[1135,2764,2655],{"class":1268},[1135,2766,1265],{"class":1264},[1135,2768,1816],{"class":1176},[1135,2770,2772],{"class":1137,"line":2771},122,[1135,2773,1930],{"class":1176},[1135,2775,2777,2779,2782,2784,2786],{"class":1137,"line":2776},123,[1135,2778,1384],{"class":1264},[1135,2780,2781],{"class":1268},"loggers",[1135,2783,1265],{"class":1264},[1135,2785,1777],{"class":1176},[1135,2787,1848],{"class":1176},[1135,2789,2791,2793,2796,2798,2800],{"class":1137,"line":2790},124,[1135,2792,1769],{"class":1264},[1135,2794,2795],{"class":1268},"django",[1135,2797,1265],{"class":1264},[1135,2799,1777],{"class":1176},[1135,2801,1848],{"class":1176},[1135,2803,2805,2807,2809,2811,2813,2815,2817,2819,2821],{"class":1137,"line":2804},125,[1135,2806,1854],{"class":1264},[1135,2808,2641],{"class":1268},[1135,2810,1265],{"class":1264},[1135,2812,1777],{"class":1176},[1135,2814,1801],{"class":1176},[1135,2816,1265],{"class":1264},[1135,2818,2655],{"class":1268},[1135,2820,1265],{"class":1264},[1135,2822,1816],{"class":1176},[1135,2824,2826,2828,2830,2832,2834,2836,2838,2840],{"class":1137,"line":2825},126,[1135,2827,1854],{"class":1264},[1135,2829,2669],{"class":1268},[1135,2831,1265],{"class":1264},[1135,2833,1777],{"class":1176},[1135,2835,1730],{"class":1264},[1135,2837,2678],{"class":1268},[1135,2839,1265],{"class":1264},[1135,2841,1392],{"class":1176},[1135,2843,2845,2847,2850,2852,2854,2856],{"class":1137,"line":2844},127,[1135,2846,1854],{"class":1264},[1135,2848,2849],{"class":1268},"propagate",[1135,2851,1265],{"class":1264},[1135,2853,1777],{"class":1176},[1135,2855,2465],{"class":1303},[1135,2857,1392],{"class":1176},[1135,2859,2861],{"class":1137,"line":2860},128,[1135,2862,1924],{"class":1176},[1135,2864,2866],{"class":1137,"line":2865},129,[1135,2867,1930],{"class":1176},[1135,2869,2871],{"class":1137,"line":2870},130,[1135,2872,2873],{"class":1176},"}\n",[1030,2875,2877],{"id":2876},"local-development-environment","Local Development Environment",[1035,2879,2881],{"id":2880},"local-settings","Local Settings",[1026,2883,2884],{},[1042,2885,2886],{},"config/settings/local.py:",[1108,2888,2890],{"className":1129,"code":2889,"language":1131,"meta":1117,"style":1117},"from .base import *\n\n# Debug mode\nDEBUG = True\n\n# Allowed hosts\nALLOWED_HOSTS = ['localhost', '127.0.0.1', '0.0.0.0', '.ngrok.io']\n\n# Database\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.sqlite3',\n        'NAME': BASE_DIR / 'db.sqlite3',\n    }\n}\n\n# Alternative: PostgreSQL for local development\n# DATABASES = {\n#     'default': {\n#         'ENGINE': 'django.db.backends.postgresql',\n#         'NAME': config('DB_NAME', default='myproject_local'),\n#         'USER': config('DB_USER', default='postgres'),\n#         'PASSWORD': config('DB_PASSWORD', default=''),\n#         'HOST': config('DB_HOST', default='localhost'),\n#         'PORT': config('DB_PORT', default='5432'),\n#     }\n# }\n\n# Development-specific apps\nINSTALLED_APPS += [\n    'debug_toolbar',\n    'django_extensions',\n    'django_browser_reload',\n]\n\n# Development middleware\nMIDDLEWARE += [\n    'debug_toolbar.middleware.DebugToolbarMiddleware',\n    'django_browser_reload.middleware.BrowserReloadMiddleware',\n]\n\n# Debug toolbar configuration\nDEBUG_TOOLBAR_CONFIG = {\n    'SHOW_TOOLBAR_CALLBACK': lambda request: True,\n    'SHOW_COLLAPSED': True,\n    'INTERCEPT_REDIRECTS': False,\n}\n\n# Internal IPs for debug toolbar\nINTERNAL_IPS = [\n    '127.0.0.1',\n    'localhost',\n]\n\n# Email backend for development\nEMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'\n\n# Cache (dummy cache for development)\nCACHES = {\n    'default': {\n        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',\n    }\n}\n\n# CORS settings for development\nCORS_ALLOW_ALL_ORIGINS = True\nCORS_ALLOW_CREDENTIALS = True\n\n# Static files (development)\nSTATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'\n\n# Media files (development)\nMEDIA_ROOT = BASE_DIR / 'media'\n\n# Logging (development)\nLOGGING['loggers']['django']['level'] = 'DEBUG'\nLOGGING['loggers']['myproject'] = {\n    'handlers': ['console'],\n    'level': 'DEBUG',\n    'propagate': False,\n}\n\n# Development-specific settings\nSHELL_PLUS_PRINT_SQL = True\nSHELL_PLUS_PRINT_SQL_TRUNCATE = 1000\n\n# File upload settings (relaxed for development)\nFILE_UPLOAD_MAX_MEMORY_SIZE = 10485760  # 10MB\nDATA_UPLOAD_MAX_MEMORY_SIZE = 10485760  # 10MB\n",[1115,2891,2892,2907,2911,2916,2924,2928,2933,2976,2980,2985,2994,3007,3027,3051,3056,3060,3064,3069,3074,3079,3084,3089,3094,3099,3104,3109,3114,3119,3123,3128,3137,3148,3159,3170,3174,3178,3183,3191,3202,3213,3217,3221,3226,3235,3259,3274,3289,3293,3297,3302,3311,3321,3331,3335,3339,3344,3357,3361,3366,3375,3387,3406,3410,3414,3418,3423,3432,3441,3445,3450,3464,3468,3473,3489,3493,3498,3539,3566,3586,3604,3618,3622,3626,3631,3640,3650,3654,3659,3672],{"__ignoreMap":1117},[1135,2893,2894,2896,2899,2902,2904],{"class":1137,"line":1138},[1135,2895,1152],{"class":1141},[1135,2897,2898],{"class":1176}," .",[1135,2900,2901],{"class":1145},"base ",[1135,2903,1142],{"class":1141},[1135,2905,2906],{"class":1577}," *\n",[1135,2908,2909],{"class":1137,"line":1149},[1135,2910,1187],{"emptyLinePlaceholder":1186},[1135,2912,2913],{"class":1137,"line":1163},[1135,2914,2915],{"class":1193},"# Debug mode\n",[1135,2917,2918,2920,2922],{"class":1137,"line":1183},[1135,2919,1279],{"class":1200},[1135,2921,1204],{"class":1176},[1135,2923,2028],{"class":1303},[1135,2925,2926],{"class":1137,"line":1190},[1135,2927,1187],{"emptyLinePlaceholder":1186},[1135,2929,2930],{"class":1137,"line":1197},[1135,2931,2932],{"class":1193},"# Allowed hosts\n",[1135,2934,2935,2937,2939,2941,2943,2945,2947,2949,2951,2954,2956,2958,2960,2963,2965,2967,2969,2972,2974],{"class":1137,"line":1241},[1135,2936,1323],{"class":1200},[1135,2938,1204],{"class":1176},[1135,2940,1801],{"class":1176},[1135,2942,1265],{"class":1264},[1135,2944,2243],{"class":1268},[1135,2946,1265],{"class":1264},[1135,2948,1177],{"class":1176},[1135,2950,1730],{"class":1264},[1135,2952,2953],{"class":1268},"127.0.0.1",[1135,2955,1265],{"class":1264},[1135,2957,1177],{"class":1176},[1135,2959,1730],{"class":1264},[1135,2961,2962],{"class":1268},"0.0.0.0",[1135,2964,1265],{"class":1264},[1135,2966,1177],{"class":1176},[1135,2968,1730],{"class":1264},[1135,2970,2971],{"class":1268},".ngrok.io",[1135,2973,1265],{"class":1264},[1135,2975,1458],{"class":1176},[1135,2977,2978],{"class":1137,"line":1246},[1135,2979,1187],{"emptyLinePlaceholder":1186},[1135,2981,2982],{"class":1137,"line":1252},[1135,2983,2984],{"class":1193},"# Database\n",[1135,2986,2987,2990,2992],{"class":1137,"line":1276},[1135,2988,2989],{"class":1200},"DATABASES",[1135,2991,1204],{"class":1176},[1135,2993,1848],{"class":1176},[1135,2995,2996,2998,3001,3003,3005],{"class":1137,"line":1320},[1135,2997,1384],{"class":1264},[1135,2999,3000],{"class":1268},"default",[1135,3002,1265],{"class":1264},[1135,3004,1777],{"class":1176},[1135,3006,1848],{"class":1176},[1135,3008,3009,3011,3014,3016,3018,3020,3023,3025],{"class":1137,"line":1359},[1135,3010,1769],{"class":1264},[1135,3012,3013],{"class":1268},"ENGINE",[1135,3015,1265],{"class":1264},[1135,3017,1777],{"class":1176},[1135,3019,1730],{"class":1264},[1135,3021,3022],{"class":1268},"django.db.backends.sqlite3",[1135,3024,1265],{"class":1264},[1135,3026,1392],{"class":1176},[1135,3028,3029,3031,3034,3036,3038,3040,3042,3044,3047,3049],{"class":1137,"line":1364},[1135,3030,1769],{"class":1264},[1135,3032,3033],{"class":1268},"NAME",[1135,3035,1265],{"class":1264},[1135,3037,1777],{"class":1176},[1135,3039,2085],{"class":1200},[1135,3041,1806],{"class":1577},[1135,3043,1730],{"class":1264},[1135,3045,3046],{"class":1268},"db.sqlite3",[1135,3048,1265],{"class":1264},[1135,3050,1392],{"class":1176},[1135,3052,3053],{"class":1137,"line":1370},[1135,3054,3055],{"class":1176},"    }\n",[1135,3057,3058],{"class":1137,"line":1381},[1135,3059,2873],{"class":1176},[1135,3061,3062],{"class":1137,"line":1395},[1135,3063,1187],{"emptyLinePlaceholder":1186},[1135,3065,3066],{"class":1137,"line":1407},[1135,3067,3068],{"class":1193},"# Alternative: PostgreSQL for local development\n",[1135,3070,3071],{"class":1137,"line":1419},[1135,3072,3073],{"class":1193},"# DATABASES = {\n",[1135,3075,3076],{"class":1137,"line":1431},[1135,3077,3078],{"class":1193},"#     'default': {\n",[1135,3080,3081],{"class":1137,"line":1443},[1135,3082,3083],{"class":1193},"#         'ENGINE': 'django.db.backends.postgresql',\n",[1135,3085,3086],{"class":1137,"line":1455},[1135,3087,3088],{"class":1193},"#         'NAME': config('DB_NAME', default='myproject_local'),\n",[1135,3090,3091],{"class":1137,"line":1461},[1135,3092,3093],{"class":1193},"#         'USER': config('DB_USER', default='postgres'),\n",[1135,3095,3096],{"class":1137,"line":1466},[1135,3097,3098],{"class":1193},"#         'PASSWORD': config('DB_PASSWORD', default=''),\n",[1135,3100,3101],{"class":1137,"line":1476},[1135,3102,3103],{"class":1193},"#         'HOST': config('DB_HOST', default='localhost'),\n",[1135,3105,3106],{"class":1137,"line":1488},[1135,3107,3108],{"class":1193},"#         'PORT': config('DB_PORT', default='5432'),\n",[1135,3110,3111],{"class":1137,"line":1500},[1135,3112,3113],{"class":1193},"#     }\n",[1135,3115,3116],{"class":1137,"line":1505},[1135,3117,3118],{"class":1193},"# }\n",[1135,3120,3121],{"class":1137,"line":1510},[1135,3122,1187],{"emptyLinePlaceholder":1186},[1135,3124,3125],{"class":1137,"line":1520},[1135,3126,3127],{"class":1193},"# Development-specific apps\n",[1135,3129,3130,3132,3135],{"class":1137,"line":1532},[1135,3131,1569],{"class":1200},[1135,3133,3134],{"class":1176}," +=",[1135,3136,1378],{"class":1176},[1135,3138,3139,3141,3144,3146],{"class":1137,"line":1544},[1135,3140,1384],{"class":1264},[1135,3142,3143],{"class":1268},"debug_toolbar",[1135,3145,1265],{"class":1264},[1135,3147,1392],{"class":1176},[1135,3149,3150,3152,3155,3157],{"class":1137,"line":1556},[1135,3151,1384],{"class":1264},[1135,3153,3154],{"class":1268},"django_extensions",[1135,3156,1265],{"class":1264},[1135,3158,1392],{"class":1176},[1135,3160,3161,3163,3166,3168],{"class":1137,"line":1561},[1135,3162,1384],{"class":1264},[1135,3164,3165],{"class":1268},"django_browser_reload",[1135,3167,1265],{"class":1264},[1135,3169,1392],{"class":1176},[1135,3171,3172],{"class":1137,"line":1566},[1135,3173,1458],{"class":1176},[1135,3175,3176],{"class":1137,"line":1589},[1135,3177,1187],{"emptyLinePlaceholder":1186},[1135,3179,3180],{"class":1137,"line":1594},[1135,3181,3182],{"class":1193},"# Development middleware\n",[1135,3184,3185,3187,3189],{"class":1137,"line":1604},[1135,3186,1597],{"class":1200},[1135,3188,3134],{"class":1176},[1135,3190,1378],{"class":1176},[1135,3192,3193,3195,3198,3200],{"class":1137,"line":1616},[1135,3194,1384],{"class":1264},[1135,3196,3197],{"class":1268},"debug_toolbar.middleware.DebugToolbarMiddleware",[1135,3199,1265],{"class":1264},[1135,3201,1392],{"class":1176},[1135,3203,3204,3206,3209,3211],{"class":1137,"line":1628},[1135,3205,1384],{"class":1264},[1135,3207,3208],{"class":1268},"django_browser_reload.middleware.BrowserReloadMiddleware",[1135,3210,1265],{"class":1264},[1135,3212,1392],{"class":1176},[1135,3214,3215],{"class":1137,"line":1640},[1135,3216,1458],{"class":1176},[1135,3218,3219],{"class":1137,"line":1652},[1135,3220,1187],{"emptyLinePlaceholder":1186},[1135,3222,3223],{"class":1137,"line":1664},[1135,3224,3225],{"class":1193},"# Debug toolbar configuration\n",[1135,3227,3228,3231,3233],{"class":1137,"line":1676},[1135,3229,3230],{"class":1200},"DEBUG_TOOLBAR_CONFIG",[1135,3232,1204],{"class":1176},[1135,3234,1848],{"class":1176},[1135,3236,3237,3239,3242,3244,3246,3249,3253,3255,3257],{"class":1137,"line":1688},[1135,3238,1384],{"class":1264},[1135,3240,3241],{"class":1268},"SHOW_TOOLBAR_CALLBACK",[1135,3243,1265],{"class":1264},[1135,3245,1777],{"class":1176},[1135,3247,3248],{"class":2525}," lambda",[1135,3250,3252],{"class":3251},"sCyAa"," request",[1135,3254,1777],{"class":1176},[1135,3256,1831],{"class":1303},[1135,3258,1392],{"class":1176},[1135,3260,3261,3263,3266,3268,3270,3272],{"class":1137,"line":1700},[1135,3262,1384],{"class":1264},[1135,3264,3265],{"class":1268},"SHOW_COLLAPSED",[1135,3267,1265],{"class":1264},[1135,3269,1777],{"class":1176},[1135,3271,1831],{"class":1303},[1135,3273,1392],{"class":1176},[1135,3275,3276,3278,3281,3283,3285,3287],{"class":1137,"line":1712},[1135,3277,1384],{"class":1264},[1135,3279,3280],{"class":1268},"INTERCEPT_REDIRECTS",[1135,3282,1265],{"class":1264},[1135,3284,1777],{"class":1176},[1135,3286,2465],{"class":1303},[1135,3288,1392],{"class":1176},[1135,3290,3291],{"class":1137,"line":1717},[1135,3292,2873],{"class":1176},[1135,3294,3295],{"class":1137,"line":1722},[1135,3296,1187],{"emptyLinePlaceholder":1186},[1135,3298,3299],{"class":1137,"line":1739},[1135,3300,3301],{"class":1193},"# Internal IPs for debug toolbar\n",[1135,3303,3304,3307,3309],{"class":1137,"line":1744},[1135,3305,3306],{"class":1200},"INTERNAL_IPS",[1135,3308,1204],{"class":1176},[1135,3310,1378],{"class":1176},[1135,3312,3313,3315,3317,3319],{"class":1137,"line":1750},[1135,3314,1384],{"class":1264},[1135,3316,2953],{"class":1268},[1135,3318,1265],{"class":1264},[1135,3320,1392],{"class":1176},[1135,3322,3323,3325,3327,3329],{"class":1137,"line":1760},[1135,3324,1384],{"class":1264},[1135,3326,2243],{"class":1268},[1135,3328,1265],{"class":1264},[1135,3330,1392],{"class":1176},[1135,3332,3333],{"class":1137,"line":1766},[1135,3334,1458],{"class":1176},[1135,3336,3337],{"class":1137,"line":1789},[1135,3338,1187],{"emptyLinePlaceholder":1186},[1135,3340,3341],{"class":1137,"line":1819},[1135,3342,3343],{"class":1193},"# Email backend for development\n",[1135,3345,3346,3348,3350,3352,3355],{"class":1137,"line":1836},[1135,3347,2205],{"class":1200},[1135,3349,1204],{"class":1176},[1135,3351,1730],{"class":1264},[1135,3353,3354],{"class":1268},"django.core.mail.backends.console.EmailBackend",[1135,3356,1736],{"class":1264},[1135,3358,3359],{"class":1137,"line":1851},[1135,3360,1187],{"emptyLinePlaceholder":1186},[1135,3362,3363],{"class":1137,"line":1866},[1135,3364,3365],{"class":1193},"# Cache (dummy cache for development)\n",[1135,3367,3368,3371,3373],{"class":1137,"line":1879},[1135,3369,3370],{"class":1200},"CACHES",[1135,3372,1204],{"class":1176},[1135,3374,1848],{"class":1176},[1135,3376,3377,3379,3381,3383,3385],{"class":1137,"line":1891},[1135,3378,1384],{"class":1264},[1135,3380,3000],{"class":1268},[1135,3382,1265],{"class":1264},[1135,3384,1777],{"class":1176},[1135,3386,1848],{"class":1176},[1135,3388,3389,3391,3393,3395,3397,3399,3402,3404],{"class":1137,"line":1903},[1135,3390,1769],{"class":1264},[1135,3392,1772],{"class":1268},[1135,3394,1265],{"class":1264},[1135,3396,1777],{"class":1176},[1135,3398,1730],{"class":1264},[1135,3400,3401],{"class":1268},"django.core.cache.backends.dummy.DummyCache",[1135,3403,1265],{"class":1264},[1135,3405,1392],{"class":1176},[1135,3407,3408],{"class":1137,"line":1915},[1135,3409,3055],{"class":1176},[1135,3411,3412],{"class":1137,"line":1921},[1135,3413,2873],{"class":1176},[1135,3415,3416],{"class":1137,"line":1927},[1135,3417,1187],{"emptyLinePlaceholder":1186},[1135,3419,3420],{"class":1137,"line":1933},[1135,3421,3422],{"class":1193},"# CORS settings for development\n",[1135,3424,3425,3428,3430],{"class":1137,"line":1938},[1135,3426,3427],{"class":1200},"CORS_ALLOW_ALL_ORIGINS",[1135,3429,1204],{"class":1176},[1135,3431,2028],{"class":1303},[1135,3433,3434,3437,3439],{"class":1137,"line":1943},[1135,3435,3436],{"class":1200},"CORS_ALLOW_CREDENTIALS",[1135,3438,1204],{"class":1176},[1135,3440,2028],{"class":1303},[1135,3442,3443],{"class":1137,"line":1949},[1135,3444,1187],{"emptyLinePlaceholder":1186},[1135,3446,3447],{"class":1137,"line":1964},[1135,3448,3449],{"class":1193},"# Static files (development)\n",[1135,3451,3452,3455,3457,3459,3462],{"class":1137,"line":1979},[1135,3453,3454],{"class":1200},"STATICFILES_STORAGE",[1135,3456,1204],{"class":1176},[1135,3458,1730],{"class":1264},[1135,3460,3461],{"class":1268},"django.contrib.staticfiles.storage.StaticFilesStorage",[1135,3463,1736],{"class":1264},[1135,3465,3466],{"class":1137,"line":1984},[1135,3467,1187],{"emptyLinePlaceholder":1186},[1135,3469,3470],{"class":1137,"line":1990},[1135,3471,3472],{"class":1193},"# Media files (development)\n",[1135,3474,3475,3477,3479,3481,3483,3485,3487],{"class":1137,"line":2005},[1135,3476,2149],{"class":1200},[1135,3478,1204],{"class":1176},[1135,3480,2085],{"class":1200},[1135,3482,1806],{"class":1577},[1135,3484,1730],{"class":1264},[1135,3486,2160],{"class":1268},[1135,3488,1736],{"class":1264},[1135,3490,3491],{"class":1137,"line":2020},[1135,3492,1187],{"emptyLinePlaceholder":1186},[1135,3494,3495],{"class":1137,"line":2031},[1135,3496,3497],{"class":1193},"# Logging (development)\n",[1135,3499,3500,3502,3505,3507,3509,3511,3514,3516,3518,3520,3522,3524,3526,3528,3531,3533,3535,3537],{"class":1137,"line":2041},[1135,3501,2429],{"class":1200},[1135,3503,3504],{"class":1176},"[",[1135,3506,1265],{"class":1264},[1135,3508,2781],{"class":1268},[1135,3510,1265],{"class":1264},[1135,3512,3513],{"class":1176},"][",[1135,3515,1265],{"class":1264},[1135,3517,2795],{"class":1268},[1135,3519,1265],{"class":1264},[1135,3521,3513],{"class":1176},[1135,3523,1265],{"class":1264},[1135,3525,2669],{"class":1268},[1135,3527,1265],{"class":1264},[1135,3529,3530],{"class":1176},"]",[1135,3532,1204],{"class":1176},[1135,3534,1730],{"class":1264},[1135,3536,1279],{"class":1268},[1135,3538,1736],{"class":1264},[1135,3540,3541,3543,3545,3547,3549,3551,3553,3555,3558,3560,3562,3564],{"class":1137,"line":2051},[1135,3542,2429],{"class":1200},[1135,3544,3504],{"class":1176},[1135,3546,1265],{"class":1264},[1135,3548,2781],{"class":1268},[1135,3550,1265],{"class":1264},[1135,3552,3513],{"class":1176},[1135,3554,1265],{"class":1264},[1135,3556,3557],{"class":1268},"myproject",[1135,3559,1265],{"class":1264},[1135,3561,3530],{"class":1176},[1135,3563,1204],{"class":1176},[1135,3565,1848],{"class":1176},[1135,3567,3568,3570,3572,3574,3576,3578,3580,3582,3584],{"class":1137,"line":2056},[1135,3569,1384],{"class":1264},[1135,3571,2641],{"class":1268},[1135,3573,1265],{"class":1264},[1135,3575,1777],{"class":1176},[1135,3577,1801],{"class":1176},[1135,3579,1265],{"class":1264},[1135,3581,2655],{"class":1268},[1135,3583,1265],{"class":1264},[1135,3585,1816],{"class":1176},[1135,3587,3588,3590,3592,3594,3596,3598,3600,3602],{"class":1137,"line":2062},[1135,3589,1384],{"class":1264},[1135,3591,2669],{"class":1268},[1135,3593,1265],{"class":1264},[1135,3595,1777],{"class":1176},[1135,3597,1730],{"class":1264},[1135,3599,1279],{"class":1268},[1135,3601,1265],{"class":1264},[1135,3603,1392],{"class":1176},[1135,3605,3606,3608,3610,3612,3614,3616],{"class":1137,"line":2077},[1135,3607,1384],{"class":1264},[1135,3609,2849],{"class":1268},[1135,3611,1265],{"class":1264},[1135,3613,1777],{"class":1176},[1135,3615,2465],{"class":1303},[1135,3617,1392],{"class":1176},[1135,3619,3620],{"class":1137,"line":2097},[1135,3621,2873],{"class":1176},[1135,3623,3624],{"class":1137,"line":2120},[1135,3625,1187],{"emptyLinePlaceholder":1186},[1135,3627,3628],{"class":1137,"line":2125},[1135,3629,3630],{"class":1193},"# Development-specific settings\n",[1135,3632,3633,3636,3638],{"class":1137,"line":2131},[1135,3634,3635],{"class":1200},"SHELL_PLUS_PRINT_SQL",[1135,3637,1204],{"class":1176},[1135,3639,2028],{"class":1303},[1135,3641,3642,3645,3647],{"class":1137,"line":2146},[1135,3643,3644],{"class":1200},"SHELL_PLUS_PRINT_SQL_TRUNCATE",[1135,3646,1204],{"class":1176},[1135,3648,3649],{"class":2274}," 1000\n",[1135,3651,3652],{"class":1137,"line":2165},[1135,3653,1187],{"emptyLinePlaceholder":1186},[1135,3655,3656],{"class":1137,"line":2170},[1135,3657,3658],{"class":1193},"# File upload settings (relaxed for development)\n",[1135,3660,3661,3664,3666,3669],{"class":1137,"line":2176},[1135,3662,3663],{"class":1200},"FILE_UPLOAD_MAX_MEMORY_SIZE",[1135,3665,1204],{"class":1176},[1135,3667,3668],{"class":2274}," 10485760",[1135,3670,3671],{"class":1193},"  # 10MB\n",[1135,3673,3674,3677,3679,3681],{"class":1137,"line":2191},[1135,3675,3676],{"class":1200},"DATA_UPLOAD_MAX_MEMORY_SIZE",[1135,3678,1204],{"class":1176},[1135,3680,3668],{"class":2274},[1135,3682,3671],{"class":1193},[1035,3684,3686],{"id":3685},"local-environment-variables","Local Environment Variables",[1026,3688,3689],{},[1042,3690,3691],{},".env.local:",[1108,3693,3697],{"className":3694,"code":3695,"language":3696,"meta":1117,"style":1117},"language-bash shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Django settings\nSECRET_KEY=local-development-secret-key-not-for-production\nDEBUG=True\nALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0\n\n# Database\nDATABASE_URL=sqlite:///db.sqlite3\n# DATABASE_URL=postgresql://postgres:password@localhost:5432/myproject_local\n\n# Email (development)\nEMAIL_BACKEND=django.core.mail.backends.console.EmailBackend\nEMAIL_HOST=localhost\nEMAIL_PORT=1025\n\n# Cache\nCACHE_URL=dummy://\n\n# External services (development)\nREDIS_URL=redis://localhost:6379/0\nCELERY_BROKER_URL=redis://localhost:6379/0\n\n# API keys (development/testing values)\nSTRIPE_PUBLISHABLE_KEY=pk_test_...\nSTRIPE_SECRET_KEY=sk_test_...\nAWS_ACCESS_KEY_ID=test\nAWS_SECRET_ACCESS_KEY=test\n\n# Feature flags\nFEATURE_NEW_DASHBOARD=True\nFEATURE_BETA_FEATURES=True\n","bash",[1115,3698,3699,3704,3714,3723,3732,3736,3740,3750,3755,3759,3764,3773,3782,3791,3795,3800,3810,3814,3819,3829,3838,3842,3847,3857,3867,3877,3886,3890,3895,3904],{"__ignoreMap":1117},[1135,3700,3701],{"class":1137,"line":1138},[1135,3702,3703],{"class":1193},"# Django settings\n",[1135,3705,3706,3709,3711],{"class":1137,"line":1149},[1135,3707,1255],{"class":3708},"sSC40",[1135,3710,1300],{"class":1176},[1135,3712,3713],{"class":1268},"local-development-secret-key-not-for-production\n",[1135,3715,3716,3718,3720],{"class":1137,"line":1163},[1135,3717,1279],{"class":3708},[1135,3719,1300],{"class":1176},[1135,3721,3722],{"class":1268},"True\n",[1135,3724,3725,3727,3729],{"class":1137,"line":1183},[1135,3726,1323],{"class":3708},[1135,3728,1300],{"class":1176},[1135,3730,3731],{"class":1268},"localhost,127.0.0.1,0.0.0.0\n",[1135,3733,3734],{"class":1137,"line":1190},[1135,3735,1187],{"emptyLinePlaceholder":1186},[1135,3737,3738],{"class":1137,"line":1197},[1135,3739,2984],{"class":1193},[1135,3741,3742,3745,3747],{"class":1137,"line":1241},[1135,3743,3744],{"class":3708},"DATABASE_URL",[1135,3746,1300],{"class":1176},[1135,3748,3749],{"class":1268},"sqlite:///db.sqlite3\n",[1135,3751,3752],{"class":1137,"line":1246},[1135,3753,3754],{"class":1193},"# DATABASE_URL=postgresql://postgres:password@localhost:5432/myproject_local\n",[1135,3756,3757],{"class":1137,"line":1252},[1135,3758,1187],{"emptyLinePlaceholder":1186},[1135,3760,3761],{"class":1137,"line":1276},[1135,3762,3763],{"class":1193},"# Email (development)\n",[1135,3765,3766,3768,3770],{"class":1137,"line":1320},[1135,3767,2205],{"class":3708},[1135,3769,1300],{"class":1176},[1135,3771,3772],{"class":1268},"django.core.mail.backends.console.EmailBackend\n",[1135,3774,3775,3777,3779],{"class":1137,"line":1359},[1135,3776,2220],{"class":3708},[1135,3778,1300],{"class":1176},[1135,3780,3781],{"class":1268},"localhost\n",[1135,3783,3784,3786,3788],{"class":1137,"line":1364},[1135,3785,2253],{"class":3708},[1135,3787,1300],{"class":1176},[1135,3789,3790],{"class":1268},"1025\n",[1135,3792,3793],{"class":1137,"line":1370},[1135,3794,1187],{"emptyLinePlaceholder":1186},[1135,3796,3797],{"class":1137,"line":1381},[1135,3798,3799],{"class":1193},"# Cache\n",[1135,3801,3802,3805,3807],{"class":1137,"line":1395},[1135,3803,3804],{"class":3708},"CACHE_URL",[1135,3806,1300],{"class":1176},[1135,3808,3809],{"class":1268},"dummy://\n",[1135,3811,3812],{"class":1137,"line":1407},[1135,3813,1187],{"emptyLinePlaceholder":1186},[1135,3815,3816],{"class":1137,"line":1419},[1135,3817,3818],{"class":1193},"# External services (development)\n",[1135,3820,3821,3824,3826],{"class":1137,"line":1431},[1135,3822,3823],{"class":3708},"REDIS_URL",[1135,3825,1300],{"class":1176},[1135,3827,3828],{"class":1268},"redis://localhost:6379/0\n",[1135,3830,3831,3834,3836],{"class":1137,"line":1443},[1135,3832,3833],{"class":3708},"CELERY_BROKER_URL",[1135,3835,1300],{"class":1176},[1135,3837,3828],{"class":1268},[1135,3839,3840],{"class":1137,"line":1455},[1135,3841,1187],{"emptyLinePlaceholder":1186},[1135,3843,3844],{"class":1137,"line":1461},[1135,3845,3846],{"class":1193},"# API keys (development/testing values)\n",[1135,3848,3849,3852,3854],{"class":1137,"line":1466},[1135,3850,3851],{"class":3708},"STRIPE_PUBLISHABLE_KEY",[1135,3853,1300],{"class":1176},[1135,3855,3856],{"class":1268},"pk_test_...\n",[1135,3858,3859,3862,3864],{"class":1137,"line":1476},[1135,3860,3861],{"class":3708},"STRIPE_SECRET_KEY",[1135,3863,1300],{"class":1176},[1135,3865,3866],{"class":1268},"sk_test_...\n",[1135,3868,3869,3872,3874],{"class":1137,"line":1488},[1135,3870,3871],{"class":3708},"AWS_ACCESS_KEY_ID",[1135,3873,1300],{"class":1176},[1135,3875,3876],{"class":1268},"test\n",[1135,3878,3879,3882,3884],{"class":1137,"line":1500},[1135,3880,3881],{"class":3708},"AWS_SECRET_ACCESS_KEY",[1135,3883,1300],{"class":1176},[1135,3885,3876],{"class":1268},[1135,3887,3888],{"class":1137,"line":1505},[1135,3889,1187],{"emptyLinePlaceholder":1186},[1135,3891,3892],{"class":1137,"line":1510},[1135,3893,3894],{"class":1193},"# Feature flags\n",[1135,3896,3897,3900,3902],{"class":1137,"line":1520},[1135,3898,3899],{"class":3708},"FEATURE_NEW_DASHBOARD",[1135,3901,1300],{"class":1176},[1135,3903,3722],{"class":1268},[1135,3905,3906,3909,3911],{"class":1137,"line":1532},[1135,3907,3908],{"class":3708},"FEATURE_BETA_FEATURES",[1135,3910,1300],{"class":1176},[1135,3912,3722],{"class":1268},[1035,3914,3916],{"id":3915},"local-development-setup","Local Development Setup",[1026,3918,3919],{},[1042,3920,3921],{},"Setup Script (scripts/setup_local.sh):",[1108,3923,3925],{"className":3694,"code":3924,"language":3696,"meta":1117,"style":1117},"#!/bin/bash\nset -e\n\necho \"🚀 Setting up local development environment...\"\n\n# Create virtual environment\nif [ ! -d \"venv\" ]; then\n    echo \"📦 Creating virtual environment...\"\n    python -m venv venv\nfi\n\n# Activate virtual environment\nsource venv/bin/activate\n\n# Upgrade pip\necho \"⬆️ Upgrading pip...\"\npip install --upgrade pip\n\n# Install requirements\necho \"📋 Installing requirements...\"\npip install -r requirements/local.txt\n\n# Copy environment file\nif [ ! -f \".env\" ]; then\n    echo \"🔧 Creating .env file...\"\n    cp .env.local .env\nfi\n\n# Create logs directory\nmkdir -p logs\n\n# Run migrations\necho \"🗄️ Running migrations...\"\npython manage.py migrate\n\n# Create superuser if it doesn't exist\necho \"👤 Creating superuser...\"\npython manage.py shell -c \"\nfrom django.contrib.auth import get_user_model\nUser = get_user_model()\nif not User.objects.filter(username='admin').exists():\n    User.objects.create_superuser('admin', 'admin@example.com', 'admin123')\n    print('Superuser created: admin/admin123')\nelse:\n    print('Superuser already exists')\n\"\n\n# Load sample data\necho \"📊 Loading sample data...\"\npython manage.py loaddata fixtures/sample_data.json\n\necho \"✅ Local development environment setup complete!\"\necho \"💡 Run 'python manage.py runserver' to start the development server\"\n",[1115,3926,3927,3932,3942,3946,3960,3964,3969,3996,4008,4023,4028,4032,4037,4045,4049,4054,4065,4079,4083,4088,4099,4111,4115,4120,4142,4153,4164,4168,4172,4177,4188,4192,4197,4208,4218,4222,4227,4238,4253,4258,4263,4268,4273,4278,4283,4288,4292,4296,4301,4312,4324,4328,4339],{"__ignoreMap":1117},[1135,3928,3929],{"class":1137,"line":1138},[1135,3930,3931],{"class":1193},"#!/bin/bash\n",[1135,3933,3934,3938],{"class":1137,"line":1149},[1135,3935,3937],{"class":3936},"sJdAF","set",[1135,3939,3941],{"class":3940},"sz9Cv"," -e\n",[1135,3943,3944],{"class":1137,"line":1163},[1135,3945,1187],{"emptyLinePlaceholder":1186},[1135,3947,3948,3951,3954,3957],{"class":1137,"line":1183},[1135,3949,3950],{"class":3936},"echo",[1135,3952,3953],{"class":1264}," \"",[1135,3955,3956],{"class":1268},"🚀 Setting up local development environment...",[1135,3958,3959],{"class":1264},"\"\n",[1135,3961,3962],{"class":1137,"line":1190},[1135,3963,1187],{"emptyLinePlaceholder":1186},[1135,3965,3966],{"class":1137,"line":1197},[1135,3967,3968],{"class":1193},"# Create virtual environment\n",[1135,3970,3971,3974,3976,3979,3982,3984,3987,3990,3993],{"class":1137,"line":1241},[1135,3972,3973],{"class":1141},"if",[1135,3975,1801],{"class":1176},[1135,3977,3978],{"class":1577}," !",[1135,3980,3981],{"class":1577}," -d",[1135,3983,3953],{"class":1264},[1135,3985,3986],{"class":1268},"venv",[1135,3988,3989],{"class":1264},"\"",[1135,3991,3992],{"class":1176}," ];",[1135,3994,3995],{"class":1141}," then\n",[1135,3997,3998,4001,4003,4006],{"class":1137,"line":1246},[1135,3999,4000],{"class":3936},"    echo",[1135,4002,3953],{"class":1264},[1135,4004,4005],{"class":1268},"📦 Creating virtual environment...",[1135,4007,3959],{"class":1264},[1135,4009,4010,4014,4017,4020],{"class":1137,"line":1252},[1135,4011,4013],{"class":4012},"sYn-s","    python",[1135,4015,4016],{"class":3940}," -m",[1135,4018,4019],{"class":1268}," venv",[1135,4021,4022],{"class":1268}," venv\n",[1135,4024,4025],{"class":1137,"line":1276},[1135,4026,4027],{"class":1141},"fi\n",[1135,4029,4030],{"class":1137,"line":1320},[1135,4031,1187],{"emptyLinePlaceholder":1186},[1135,4033,4034],{"class":1137,"line":1359},[1135,4035,4036],{"class":1193},"# Activate virtual environment\n",[1135,4038,4039,4042],{"class":1137,"line":1364},[1135,4040,4041],{"class":3936},"source",[1135,4043,4044],{"class":1268}," venv/bin/activate\n",[1135,4046,4047],{"class":1137,"line":1370},[1135,4048,1187],{"emptyLinePlaceholder":1186},[1135,4050,4051],{"class":1137,"line":1381},[1135,4052,4053],{"class":1193},"# Upgrade pip\n",[1135,4055,4056,4058,4060,4063],{"class":1137,"line":1395},[1135,4057,3950],{"class":3936},[1135,4059,3953],{"class":1264},[1135,4061,4062],{"class":1268},"⬆️ Upgrading pip...",[1135,4064,3959],{"class":1264},[1135,4066,4067,4070,4073,4076],{"class":1137,"line":1407},[1135,4068,4069],{"class":4012},"pip",[1135,4071,4072],{"class":1268}," install",[1135,4074,4075],{"class":3940}," --upgrade",[1135,4077,4078],{"class":1268}," pip\n",[1135,4080,4081],{"class":1137,"line":1419},[1135,4082,1187],{"emptyLinePlaceholder":1186},[1135,4084,4085],{"class":1137,"line":1431},[1135,4086,4087],{"class":1193},"# Install requirements\n",[1135,4089,4090,4092,4094,4097],{"class":1137,"line":1443},[1135,4091,3950],{"class":3936},[1135,4093,3953],{"class":1264},[1135,4095,4096],{"class":1268},"📋 Installing requirements...",[1135,4098,3959],{"class":1264},[1135,4100,4101,4103,4105,4108],{"class":1137,"line":1455},[1135,4102,4069],{"class":4012},[1135,4104,4072],{"class":1268},[1135,4106,4107],{"class":3940}," -r",[1135,4109,4110],{"class":1268}," requirements/local.txt\n",[1135,4112,4113],{"class":1137,"line":1461},[1135,4114,1187],{"emptyLinePlaceholder":1186},[1135,4116,4117],{"class":1137,"line":1466},[1135,4118,4119],{"class":1193},"# Copy environment file\n",[1135,4121,4122,4124,4126,4128,4131,4133,4136,4138,4140],{"class":1137,"line":1476},[1135,4123,3973],{"class":1141},[1135,4125,1801],{"class":1176},[1135,4127,3978],{"class":1577},[1135,4129,4130],{"class":1577}," -f",[1135,4132,3953],{"class":1264},[1135,4134,4135],{"class":1268},".env",[1135,4137,3989],{"class":1264},[1135,4139,3992],{"class":1176},[1135,4141,3995],{"class":1141},[1135,4143,4144,4146,4148,4151],{"class":1137,"line":1488},[1135,4145,4000],{"class":3936},[1135,4147,3953],{"class":1264},[1135,4149,4150],{"class":1268},"🔧 Creating .env file...",[1135,4152,3959],{"class":1264},[1135,4154,4155,4158,4161],{"class":1137,"line":1500},[1135,4156,4157],{"class":4012},"    cp",[1135,4159,4160],{"class":1268}," .env.local",[1135,4162,4163],{"class":1268}," .env\n",[1135,4165,4166],{"class":1137,"line":1505},[1135,4167,4027],{"class":1141},[1135,4169,4170],{"class":1137,"line":1510},[1135,4171,1187],{"emptyLinePlaceholder":1186},[1135,4173,4174],{"class":1137,"line":1520},[1135,4175,4176],{"class":1193},"# Create logs directory\n",[1135,4178,4179,4182,4185],{"class":1137,"line":1532},[1135,4180,4181],{"class":4012},"mkdir",[1135,4183,4184],{"class":3940}," -p",[1135,4186,4187],{"class":1268}," logs\n",[1135,4189,4190],{"class":1137,"line":1544},[1135,4191,1187],{"emptyLinePlaceholder":1186},[1135,4193,4194],{"class":1137,"line":1556},[1135,4195,4196],{"class":1193},"# Run migrations\n",[1135,4198,4199,4201,4203,4206],{"class":1137,"line":1561},[1135,4200,3950],{"class":3936},[1135,4202,3953],{"class":1264},[1135,4204,4205],{"class":1268},"🗄️ Running migrations...",[1135,4207,3959],{"class":1264},[1135,4209,4210,4212,4215],{"class":1137,"line":1566},[1135,4211,1131],{"class":4012},[1135,4213,4214],{"class":1268}," manage.py",[1135,4216,4217],{"class":1268}," migrate\n",[1135,4219,4220],{"class":1137,"line":1589},[1135,4221,1187],{"emptyLinePlaceholder":1186},[1135,4223,4224],{"class":1137,"line":1594},[1135,4225,4226],{"class":1193},"# Create superuser if it doesn't exist\n",[1135,4228,4229,4231,4233,4236],{"class":1137,"line":1604},[1135,4230,3950],{"class":3936},[1135,4232,3953],{"class":1264},[1135,4234,4235],{"class":1268},"👤 Creating superuser...",[1135,4237,3959],{"class":1264},[1135,4239,4240,4242,4244,4247,4250],{"class":1137,"line":1616},[1135,4241,1131],{"class":4012},[1135,4243,4214],{"class":1268},[1135,4245,4246],{"class":1268}," shell",[1135,4248,4249],{"class":3940}," -c",[1135,4251,4252],{"class":1264}," \"\n",[1135,4254,4255],{"class":1137,"line":1628},[1135,4256,4257],{"class":1268},"from django.contrib.auth import get_user_model\n",[1135,4259,4260],{"class":1137,"line":1640},[1135,4261,4262],{"class":1268},"User = get_user_model()\n",[1135,4264,4265],{"class":1137,"line":1652},[1135,4266,4267],{"class":1268},"if not User.objects.filter(username='admin').exists():\n",[1135,4269,4270],{"class":1137,"line":1664},[1135,4271,4272],{"class":1268},"    User.objects.create_superuser('admin', 'admin@example.com', 'admin123')\n",[1135,4274,4275],{"class":1137,"line":1676},[1135,4276,4277],{"class":1268},"    print('Superuser created: admin/admin123')\n",[1135,4279,4280],{"class":1137,"line":1688},[1135,4281,4282],{"class":1268},"else:\n",[1135,4284,4285],{"class":1137,"line":1700},[1135,4286,4287],{"class":1268},"    print('Superuser already exists')\n",[1135,4289,4290],{"class":1137,"line":1712},[1135,4291,3959],{"class":1264},[1135,4293,4294],{"class":1137,"line":1717},[1135,4295,1187],{"emptyLinePlaceholder":1186},[1135,4297,4298],{"class":1137,"line":1722},[1135,4299,4300],{"class":1193},"# Load sample data\n",[1135,4302,4303,4305,4307,4310],{"class":1137,"line":1739},[1135,4304,3950],{"class":3936},[1135,4306,3953],{"class":1264},[1135,4308,4309],{"class":1268},"📊 Loading sample data...",[1135,4311,3959],{"class":1264},[1135,4313,4314,4316,4318,4321],{"class":1137,"line":1744},[1135,4315,1131],{"class":4012},[1135,4317,4214],{"class":1268},[1135,4319,4320],{"class":1268}," loaddata",[1135,4322,4323],{"class":1268}," fixtures/sample_data.json\n",[1135,4325,4326],{"class":1137,"line":1750},[1135,4327,1187],{"emptyLinePlaceholder":1186},[1135,4329,4330,4332,4334,4337],{"class":1137,"line":1760},[1135,4331,3950],{"class":3936},[1135,4333,3953],{"class":1264},[1135,4335,4336],{"class":1268},"✅ Local development environment setup complete!",[1135,4338,3959],{"class":1264},[1135,4340,4341,4343,4345,4348],{"class":1137,"line":1766},[1135,4342,3950],{"class":3936},[1135,4344,3953],{"class":1264},[1135,4346,4347],{"class":1268},"💡 Run 'python manage.py runserver' to start the development server",[1135,4349,3959],{"class":1264},[1030,4351,4353],{"id":4352},"staging-environment","Staging Environment",[1035,4355,4357],{"id":4356},"staging-settings","Staging Settings",[1026,4359,4360],{},[1042,4361,4362],{},"config/settings/staging.py:",[1108,4364,4366],{"className":1129,"code":4365,"language":1131,"meta":1117,"style":1117},"from .base import *\nimport dj_database_url\n\n# Debug mode (can be True for staging to help with debugging)\nDEBUG = config('DEBUG', default=False, cast=bool)\n\n# Allowed hosts\nALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=Csv())\n\n# Database\nDATABASES = {\n    'default': dj_database_url.config(\n        default=config('DATABASE_URL')\n    )\n}\n\n# Security settings (less strict than production)\nSECURE_SSL_REDIRECT = config('SECURE_SSL_REDIRECT', default=True, cast=bool)\nSECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')\nSESSION_COOKIE_SECURE = config('SESSION_COOKIE_SECURE', default=True, cast=bool)\nCSRF_COOKIE_SECURE = config('CSRF_COOKIE_SECURE', default=True, cast=bool)\n\n# Static files\nSTATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'\n\n# Cache\nCACHES = {\n    'default': {\n        'BACKEND': 'django_redis.cache.RedisCache',\n        'LOCATION': config('REDIS_URL'),\n        'OPTIONS': {\n            'CLIENT_CLASS': 'django_redis.client.DefaultClient',\n        }\n    }\n}\n\n# Email\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Logging\nLOGGING['handlers']['file'] = {\n    'level': 'INFO',\n    'class': 'logging.handlers.RotatingFileHandler',\n    'filename': '/var/log/django/staging.log',\n    'maxBytes': 1024*1024*10,  # 10MB\n    'backupCount': 5,\n    'formatter': 'verbose',\n}\n\nLOGGING['loggers']['django']['handlers'] = ['console', 'file']\nLOGGING['loggers']['myproject'] = {\n    'handlers': ['console', 'file'],\n    'level': 'INFO',\n    'propagate': False,\n}\n\n# Error reporting\nADMINS = [\n    ('Staging Admin', config('ADMIN_EMAIL', default='staging@example.com')),\n]\n\n# Staging-specific apps (for testing)\nINSTALLED_APPS += [\n    'django_extensions',  # Useful for staging debugging\n]\n\n# Performance monitoring (staging)\nif config('ENABLE_SILK', default=False, cast=bool):\n    INSTALLED_APPS += ['silk']\n    MIDDLEWARE += ['silk.middleware.SilkyMiddleware']\n",[1115,4367,4368,4380,4387,4391,4396,4430,4434,4438,4464,4468,4472,4480,4501,4520,4525,4529,4533,4538,4573,4601,4636,4671,4675,4679,4692,4696,4700,4708,4720,4739,4763,4775,4795,4800,4804,4808,4812,4817,4829,4833,4837,4864,4882,4901,4921,4950,4966,4984,4988,4992,5042,5068,5096,5114,5128,5132,5136,5141,5150,5191,5195,5199,5204,5212,5225,5229,5233,5238,5272,5290],{"__ignoreMap":1117},[1135,4369,4370,4372,4374,4376,4378],{"class":1137,"line":1138},[1135,4371,1152],{"class":1141},[1135,4373,2898],{"class":1176},[1135,4375,2901],{"class":1145},[1135,4377,1142],{"class":1141},[1135,4379,2906],{"class":1577},[1135,4381,4382,4384],{"class":1137,"line":1149},[1135,4383,1142],{"class":1141},[1135,4385,4386],{"class":1145}," dj_database_url\n",[1135,4388,4389],{"class":1137,"line":1163},[1135,4390,1187],{"emptyLinePlaceholder":1186},[1135,4392,4393],{"class":1137,"line":1183},[1135,4394,4395],{"class":1193},"# Debug mode (can be True for staging to help with debugging)\n",[1135,4397,4398,4400,4402,4404,4406,4408,4410,4412,4414,4416,4418,4420,4422,4424,4426,4428],{"class":1137,"line":1190},[1135,4399,1279],{"class":1200},[1135,4401,1204],{"class":1176},[1135,4403,1173],{"class":1207},[1135,4405,1211],{"class":1176},[1135,4407,1265],{"class":1264},[1135,4409,1279],{"class":1268},[1135,4411,1265],{"class":1264},[1135,4413,1177],{"class":1176},[1135,4415,1297],{"class":1296},[1135,4417,1300],{"class":1176},[1135,4419,1304],{"class":1303},[1135,4421,1177],{"class":1176},[1135,4423,1309],{"class":1296},[1135,4425,1300],{"class":1176},[1135,4427,1315],{"class":1314},[1135,4429,1273],{"class":1176},[1135,4431,4432],{"class":1137,"line":1197},[1135,4433,1187],{"emptyLinePlaceholder":1186},[1135,4435,4436],{"class":1137,"line":1241},[1135,4437,2932],{"class":1193},[1135,4439,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462],{"class":1137,"line":1246},[1135,4441,1323],{"class":1200},[1135,4443,1204],{"class":1176},[1135,4445,1173],{"class":1207},[1135,4447,1211],{"class":1176},[1135,4449,1265],{"class":1264},[1135,4451,1323],{"class":1268},[1135,4453,1265],{"class":1264},[1135,4455,1177],{"class":1176},[1135,4457,1309],{"class":1296},[1135,4459,1300],{"class":1176},[1135,4461,1353],{"class":1207},[1135,4463,1356],{"class":1176},[1135,4465,4466],{"class":1137,"line":1252},[1135,4467,1187],{"emptyLinePlaceholder":1186},[1135,4469,4470],{"class":1137,"line":1276},[1135,4471,2984],{"class":1193},[1135,4473,4474,4476,4478],{"class":1137,"line":1320},[1135,4475,2989],{"class":1200},[1135,4477,1204],{"class":1176},[1135,4479,1848],{"class":1176},[1135,4481,4482,4484,4486,4488,4490,4493,4495,4498],{"class":1137,"line":1359},[1135,4483,1384],{"class":1264},[1135,4485,3000],{"class":1268},[1135,4487,1265],{"class":1264},[1135,4489,1777],{"class":1176},[1135,4491,4492],{"class":1145}," dj_database_url",[1135,4494,1231],{"class":1176},[1135,4496,4497],{"class":1207},"config",[1135,4499,4500],{"class":1176},"(\n",[1135,4502,4503,4506,4508,4510,4512,4514,4516,4518],{"class":1137,"line":1364},[1135,4504,4505],{"class":1296},"        default",[1135,4507,1300],{"class":1176},[1135,4509,4497],{"class":1207},[1135,4511,1211],{"class":1176},[1135,4513,1265],{"class":1264},[1135,4515,3744],{"class":1268},[1135,4517,1265],{"class":1264},[1135,4519,1273],{"class":1176},[1135,4521,4522],{"class":1137,"line":1370},[1135,4523,4524],{"class":1176},"    )\n",[1135,4526,4527],{"class":1137,"line":1381},[1135,4528,2873],{"class":1176},[1135,4530,4531],{"class":1137,"line":1395},[1135,4532,1187],{"emptyLinePlaceholder":1186},[1135,4534,4535],{"class":1137,"line":1407},[1135,4536,4537],{"class":1193},"# Security settings (less strict than production)\n",[1135,4539,4540,4543,4545,4547,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571],{"class":1137,"line":1419},[1135,4541,4542],{"class":1200},"SECURE_SSL_REDIRECT",[1135,4544,1204],{"class":1176},[1135,4546,1173],{"class":1207},[1135,4548,1211],{"class":1176},[1135,4550,1265],{"class":1264},[1135,4552,4542],{"class":1268},[1135,4554,1265],{"class":1264},[1135,4556,1177],{"class":1176},[1135,4558,1297],{"class":1296},[1135,4560,1300],{"class":1176},[1135,4562,2313],{"class":1303},[1135,4564,1177],{"class":1176},[1135,4566,1309],{"class":1296},[1135,4568,1300],{"class":1176},[1135,4570,1315],{"class":1314},[1135,4572,1273],{"class":1176},[1135,4574,4575,4578,4580,4583,4585,4588,4590,4592,4594,4597,4599],{"class":1137,"line":1431},[1135,4576,4577],{"class":1200},"SECURE_PROXY_SSL_HEADER",[1135,4579,1204],{"class":1176},[1135,4581,4582],{"class":1176}," (",[1135,4584,1265],{"class":1264},[1135,4586,4587],{"class":1268},"HTTP_X_FORWARDED_PROTO",[1135,4589,1265],{"class":1264},[1135,4591,1177],{"class":1176},[1135,4593,1730],{"class":1264},[1135,4595,4596],{"class":1268},"https",[1135,4598,1265],{"class":1264},[1135,4600,1273],{"class":1176},[1135,4602,4603,4606,4608,4610,4612,4614,4616,4618,4620,4622,4624,4626,4628,4630,4632,4634],{"class":1137,"line":1443},[1135,4604,4605],{"class":1200},"SESSION_COOKIE_SECURE",[1135,4607,1204],{"class":1176},[1135,4609,1173],{"class":1207},[1135,4611,1211],{"class":1176},[1135,4613,1265],{"class":1264},[1135,4615,4605],{"class":1268},[1135,4617,1265],{"class":1264},[1135,4619,1177],{"class":1176},[1135,4621,1297],{"class":1296},[1135,4623,1300],{"class":1176},[1135,4625,2313],{"class":1303},[1135,4627,1177],{"class":1176},[1135,4629,1309],{"class":1296},[1135,4631,1300],{"class":1176},[1135,4633,1315],{"class":1314},[1135,4635,1273],{"class":1176},[1135,4637,4638,4641,4643,4645,4647,4649,4651,4653,4655,4657,4659,4661,4663,4665,4667,4669],{"class":1137,"line":1455},[1135,4639,4640],{"class":1200},"CSRF_COOKIE_SECURE",[1135,4642,1204],{"class":1176},[1135,4644,1173],{"class":1207},[1135,4646,1211],{"class":1176},[1135,4648,1265],{"class":1264},[1135,4650,4640],{"class":1268},[1135,4652,1265],{"class":1264},[1135,4654,1177],{"class":1176},[1135,4656,1297],{"class":1296},[1135,4658,1300],{"class":1176},[1135,4660,2313],{"class":1303},[1135,4662,1177],{"class":1176},[1135,4664,1309],{"class":1296},[1135,4666,1300],{"class":1176},[1135,4668,1315],{"class":1314},[1135,4670,1273],{"class":1176},[1135,4672,4673],{"class":1137,"line":1461},[1135,4674,1187],{"emptyLinePlaceholder":1186},[1135,4676,4677],{"class":1137,"line":1466},[1135,4678,2059],{"class":1193},[1135,4680,4681,4683,4685,4687,4690],{"class":1137,"line":1476},[1135,4682,3454],{"class":1200},[1135,4684,1204],{"class":1176},[1135,4686,1730],{"class":1264},[1135,4688,4689],{"class":1268},"whitenoise.storage.CompressedManifestStaticFilesStorage",[1135,4691,1736],{"class":1264},[1135,4693,4694],{"class":1137,"line":1488},[1135,4695,1187],{"emptyLinePlaceholder":1186},[1135,4697,4698],{"class":1137,"line":1500},[1135,4699,3799],{"class":1193},[1135,4701,4702,4704,4706],{"class":1137,"line":1505},[1135,4703,3370],{"class":1200},[1135,4705,1204],{"class":1176},[1135,4707,1848],{"class":1176},[1135,4709,4710,4712,4714,4716,4718],{"class":1137,"line":1510},[1135,4711,1384],{"class":1264},[1135,4713,3000],{"class":1268},[1135,4715,1265],{"class":1264},[1135,4717,1777],{"class":1176},[1135,4719,1848],{"class":1176},[1135,4721,4722,4724,4726,4728,4730,4732,4735,4737],{"class":1137,"line":1520},[1135,4723,1769],{"class":1264},[1135,4725,1772],{"class":1268},[1135,4727,1265],{"class":1264},[1135,4729,1777],{"class":1176},[1135,4731,1730],{"class":1264},[1135,4733,4734],{"class":1268},"django_redis.cache.RedisCache",[1135,4736,1265],{"class":1264},[1135,4738,1392],{"class":1176},[1135,4740,4741,4743,4746,4748,4750,4752,4754,4756,4758,4760],{"class":1137,"line":1532},[1135,4742,1769],{"class":1264},[1135,4744,4745],{"class":1268},"LOCATION",[1135,4747,1265],{"class":1264},[1135,4749,1777],{"class":1176},[1135,4751,1173],{"class":1207},[1135,4753,1211],{"class":1176},[1135,4755,1265],{"class":1264},[1135,4757,3823],{"class":1268},[1135,4759,1265],{"class":1264},[1135,4761,4762],{"class":1176},"),\n",[1135,4764,4765,4767,4769,4771,4773],{"class":1137,"line":1544},[1135,4766,1769],{"class":1264},[1135,4768,1841],{"class":1268},[1135,4770,1265],{"class":1264},[1135,4772,1777],{"class":1176},[1135,4774,1848],{"class":1176},[1135,4776,4777,4779,4782,4784,4786,4788,4791,4793],{"class":1137,"line":1556},[1135,4778,1854],{"class":1264},[1135,4780,4781],{"class":1268},"CLIENT_CLASS",[1135,4783,1265],{"class":1264},[1135,4785,1777],{"class":1176},[1135,4787,1730],{"class":1264},[1135,4789,4790],{"class":1268},"django_redis.client.DefaultClient",[1135,4792,1265],{"class":1264},[1135,4794,1392],{"class":1176},[1135,4796,4797],{"class":1137,"line":1561},[1135,4798,4799],{"class":1176},"        }\n",[1135,4801,4802],{"class":1137,"line":1566},[1135,4803,3055],{"class":1176},[1135,4805,4806],{"class":1137,"line":1589},[1135,4807,2873],{"class":1176},[1135,4809,4810],{"class":1137,"line":1594},[1135,4811,1187],{"emptyLinePlaceholder":1186},[1135,4813,4814],{"class":1137,"line":1604},[1135,4815,4816],{"class":1193},"# Email\n",[1135,4818,4819,4821,4823,4825,4827],{"class":1137,"line":1616},[1135,4820,2205],{"class":1200},[1135,4822,1204],{"class":1176},[1135,4824,1730],{"class":1264},[1135,4826,2212],{"class":1268},[1135,4828,1736],{"class":1264},[1135,4830,4831],{"class":1137,"line":1628},[1135,4832,1187],{"emptyLinePlaceholder":1186},[1135,4834,4835],{"class":1137,"line":1640},[1135,4836,2423],{"class":1193},[1135,4838,4839,4841,4843,4845,4847,4849,4851,4853,4856,4858,4860,4862],{"class":1137,"line":1652},[1135,4840,2429],{"class":1200},[1135,4842,3504],{"class":1176},[1135,4844,1265],{"class":1264},[1135,4846,2641],{"class":1268},[1135,4848,1265],{"class":1264},[1135,4850,3513],{"class":1176},[1135,4852,1265],{"class":1264},[1135,4854,4855],{"class":1268},"file",[1135,4857,1265],{"class":1264},[1135,4859,3530],{"class":1176},[1135,4861,1204],{"class":1176},[1135,4863,1848],{"class":1176},[1135,4865,4866,4868,4870,4872,4874,4876,4878,4880],{"class":1137,"line":1664},[1135,4867,1384],{"class":1264},[1135,4869,2669],{"class":1268},[1135,4871,1265],{"class":1264},[1135,4873,1777],{"class":1176},[1135,4875,1730],{"class":1264},[1135,4877,2678],{"class":1268},[1135,4879,1265],{"class":1264},[1135,4881,1392],{"class":1176},[1135,4883,4884,4886,4888,4890,4892,4894,4897,4899],{"class":1137,"line":1676},[1135,4885,1384],{"class":1264},[1135,4887,2690],{"class":1268},[1135,4889,1265],{"class":1264},[1135,4891,1777],{"class":1176},[1135,4893,1730],{"class":1264},[1135,4895,4896],{"class":1268},"logging.handlers.RotatingFileHandler",[1135,4898,1265],{"class":1264},[1135,4900,1392],{"class":1176},[1135,4902,4903,4905,4908,4910,4912,4914,4917,4919],{"class":1137,"line":1688},[1135,4904,1384],{"class":1264},[1135,4906,4907],{"class":1268},"filename",[1135,4909,1265],{"class":1264},[1135,4911,1777],{"class":1176},[1135,4913,1730],{"class":1264},[1135,4915,4916],{"class":1268},"/var/log/django/staging.log",[1135,4918,1265],{"class":1264},[1135,4920,1392],{"class":1176},[1135,4922,4923,4925,4928,4930,4932,4935,4938,4941,4943,4946,4948],{"class":1137,"line":1700},[1135,4924,1384],{"class":1264},[1135,4926,4927],{"class":1268},"maxBytes",[1135,4929,1265],{"class":1264},[1135,4931,1777],{"class":1176},[1135,4933,4934],{"class":2274}," 1024",[1135,4936,4937],{"class":1577},"*",[1135,4939,4940],{"class":2274},"1024",[1135,4942,4937],{"class":1577},[1135,4944,4945],{"class":2274},"10",[1135,4947,1177],{"class":1176},[1135,4949,3671],{"class":1193},[1135,4951,4952,4954,4957,4959,4961,4964],{"class":1137,"line":1712},[1135,4953,1384],{"class":1264},[1135,4955,4956],{"class":1268},"backupCount",[1135,4958,1265],{"class":1264},[1135,4960,1777],{"class":1176},[1135,4962,4963],{"class":2274}," 5",[1135,4965,1392],{"class":1176},[1135,4967,4968,4970,4972,4974,4976,4978,4980,4982],{"class":1137,"line":1717},[1135,4969,1384],{"class":1264},[1135,4971,2711],{"class":1268},[1135,4973,1265],{"class":1264},[1135,4975,1777],{"class":1176},[1135,4977,1730],{"class":1264},[1135,4979,2489],{"class":1268},[1135,4981,1265],{"class":1264},[1135,4983,1392],{"class":1176},[1135,4985,4986],{"class":1137,"line":1722},[1135,4987,2873],{"class":1176},[1135,4989,4990],{"class":1137,"line":1739},[1135,4991,1187],{"emptyLinePlaceholder":1186},[1135,4993,4994,4996,4998,5000,5002,5004,5006,5008,5010,5012,5014,5016,5018,5020,5022,5024,5026,5028,5030,5032,5034,5036,5038,5040],{"class":1137,"line":1744},[1135,4995,2429],{"class":1200},[1135,4997,3504],{"class":1176},[1135,4999,1265],{"class":1264},[1135,5001,2781],{"class":1268},[1135,5003,1265],{"class":1264},[1135,5005,3513],{"class":1176},[1135,5007,1265],{"class":1264},[1135,5009,2795],{"class":1268},[1135,5011,1265],{"class":1264},[1135,5013,3513],{"class":1176},[1135,5015,1265],{"class":1264},[1135,5017,2641],{"class":1268},[1135,5019,1265],{"class":1264},[1135,5021,3530],{"class":1176},[1135,5023,1204],{"class":1176},[1135,5025,1801],{"class":1176},[1135,5027,1265],{"class":1264},[1135,5029,2655],{"class":1268},[1135,5031,1265],{"class":1264},[1135,5033,1177],{"class":1176},[1135,5035,1730],{"class":1264},[1135,5037,4855],{"class":1268},[1135,5039,1265],{"class":1264},[1135,5041,1458],{"class":1176},[1135,5043,5044,5046,5048,5050,5052,5054,5056,5058,5060,5062,5064,5066],{"class":1137,"line":1750},[1135,5045,2429],{"class":1200},[1135,5047,3504],{"class":1176},[1135,5049,1265],{"class":1264},[1135,5051,2781],{"class":1268},[1135,5053,1265],{"class":1264},[1135,5055,3513],{"class":1176},[1135,5057,1265],{"class":1264},[1135,5059,3557],{"class":1268},[1135,5061,1265],{"class":1264},[1135,5063,3530],{"class":1176},[1135,5065,1204],{"class":1176},[1135,5067,1848],{"class":1176},[1135,5069,5070,5072,5074,5076,5078,5080,5082,5084,5086,5088,5090,5092,5094],{"class":1137,"line":1760},[1135,5071,1384],{"class":1264},[1135,5073,2641],{"class":1268},[1135,5075,1265],{"class":1264},[1135,5077,1777],{"class":1176},[1135,5079,1801],{"class":1176},[1135,5081,1265],{"class":1264},[1135,5083,2655],{"class":1268},[1135,5085,1265],{"class":1264},[1135,5087,1177],{"class":1176},[1135,5089,1730],{"class":1264},[1135,5091,4855],{"class":1268},[1135,5093,1265],{"class":1264},[1135,5095,1816],{"class":1176},[1135,5097,5098,5100,5102,5104,5106,5108,5110,5112],{"class":1137,"line":1766},[1135,5099,1384],{"class":1264},[1135,5101,2669],{"class":1268},[1135,5103,1265],{"class":1264},[1135,5105,1777],{"class":1176},[1135,5107,1730],{"class":1264},[1135,5109,2678],{"class":1268},[1135,5111,1265],{"class":1264},[1135,5113,1392],{"class":1176},[1135,5115,5116,5118,5120,5122,5124,5126],{"class":1137,"line":1789},[1135,5117,1384],{"class":1264},[1135,5119,2849],{"class":1268},[1135,5121,1265],{"class":1264},[1135,5123,1777],{"class":1176},[1135,5125,2465],{"class":1303},[1135,5127,1392],{"class":1176},[1135,5129,5130],{"class":1137,"line":1819},[1135,5131,2873],{"class":1176},[1135,5133,5134],{"class":1137,"line":1836},[1135,5135,1187],{"emptyLinePlaceholder":1186},[1135,5137,5138],{"class":1137,"line":1851},[1135,5139,5140],{"class":1193},"# Error reporting\n",[1135,5142,5143,5146,5148],{"class":1137,"line":1866},[1135,5144,5145],{"class":1200},"ADMINS",[1135,5147,1204],{"class":1176},[1135,5149,1378],{"class":1176},[1135,5151,5152,5155,5157,5160,5162,5164,5166,5168,5170,5173,5175,5177,5179,5181,5183,5186,5188],{"class":1137,"line":1879},[1135,5153,5154],{"class":1176},"    (",[1135,5156,1265],{"class":1264},[1135,5158,5159],{"class":1268},"Staging Admin",[1135,5161,1265],{"class":1264},[1135,5163,1177],{"class":1176},[1135,5165,1173],{"class":1207},[1135,5167,1211],{"class":1176},[1135,5169,1265],{"class":1264},[1135,5171,5172],{"class":1268},"ADMIN_EMAIL",[1135,5174,1265],{"class":1264},[1135,5176,1177],{"class":1176},[1135,5178,1297],{"class":1296},[1135,5180,1300],{"class":1176},[1135,5182,1265],{"class":1264},[1135,5184,5185],{"class":1268},"staging@example.com",[1135,5187,1265],{"class":1264},[1135,5189,5190],{"class":1176},")),\n",[1135,5192,5193],{"class":1137,"line":1891},[1135,5194,1458],{"class":1176},[1135,5196,5197],{"class":1137,"line":1903},[1135,5198,1187],{"emptyLinePlaceholder":1186},[1135,5200,5201],{"class":1137,"line":1915},[1135,5202,5203],{"class":1193},"# Staging-specific apps (for testing)\n",[1135,5205,5206,5208,5210],{"class":1137,"line":1921},[1135,5207,1569],{"class":1200},[1135,5209,3134],{"class":1176},[1135,5211,1378],{"class":1176},[1135,5213,5214,5216,5218,5220,5222],{"class":1137,"line":1927},[1135,5215,1384],{"class":1264},[1135,5217,3154],{"class":1268},[1135,5219,1265],{"class":1264},[1135,5221,1177],{"class":1176},[1135,5223,5224],{"class":1193},"  # Useful for staging debugging\n",[1135,5226,5227],{"class":1137,"line":1933},[1135,5228,1458],{"class":1176},[1135,5230,5231],{"class":1137,"line":1938},[1135,5232,1187],{"emptyLinePlaceholder":1186},[1135,5234,5235],{"class":1137,"line":1943},[1135,5236,5237],{"class":1193},"# Performance monitoring (staging)\n",[1135,5239,5240,5242,5244,5246,5248,5251,5253,5255,5257,5259,5261,5263,5265,5267,5269],{"class":1137,"line":1949},[1135,5241,3973],{"class":1141},[1135,5243,1173],{"class":1207},[1135,5245,1211],{"class":1176},[1135,5247,1265],{"class":1264},[1135,5249,5250],{"class":1268},"ENABLE_SILK",[1135,5252,1265],{"class":1264},[1135,5254,1177],{"class":1176},[1135,5256,1297],{"class":1296},[1135,5258,1300],{"class":1176},[1135,5260,1304],{"class":1303},[1135,5262,1177],{"class":1176},[1135,5264,1309],{"class":1296},[1135,5266,1300],{"class":1176},[1135,5268,1315],{"class":1314},[1135,5270,5271],{"class":1176},"):\n",[1135,5273,5274,5277,5279,5281,5283,5286,5288],{"class":1137,"line":1964},[1135,5275,5276],{"class":1200},"    INSTALLED_APPS",[1135,5278,3134],{"class":1176},[1135,5280,1801],{"class":1176},[1135,5282,1265],{"class":1264},[1135,5284,5285],{"class":1268},"silk",[1135,5287,1265],{"class":1264},[1135,5289,1458],{"class":1176},[1135,5291,5292,5295,5297,5299,5301,5304,5306],{"class":1137,"line":1979},[1135,5293,5294],{"class":1200},"    MIDDLEWARE",[1135,5296,3134],{"class":1176},[1135,5298,1801],{"class":1176},[1135,5300,1265],{"class":1264},[1135,5302,5303],{"class":1268},"silk.middleware.SilkyMiddleware",[1135,5305,1265],{"class":1264},[1135,5307,1458],{"class":1176},[1035,5309,5311],{"id":5310},"staging-environment-variables","Staging Environment Variables",[1026,5313,5314],{},[1042,5315,5316],{},".env.staging:",[1108,5318,5320],{"className":3694,"code":5319,"language":3696,"meta":1117,"style":1117},"# Django settings\nSECRET_KEY=staging-secret-key-different-from-production\nDEBUG=False\nALLOWED_HOSTS=staging.example.com\n\n# Database\nDATABASE_URL=postgresql://user:password@staging-db:5432/myproject_staging\n\n# Email\nEMAIL_HOST=smtp.mailgun.org\nEMAIL_PORT=587\nEMAIL_USE_TLS=True\nEMAIL_HOST_USER=staging@mg.example.com\nEMAIL_HOST_PASSWORD=staging-email-password\n\n# Cache\nREDIS_URL=redis://staging-redis:6379/0\n\n# External services (staging/testing)\nSTRIPE_PUBLISHABLE_KEY=pk_test_staging_...\nSTRIPE_SECRET_KEY=sk_test_staging_...\nAWS_ACCESS_KEY_ID=staging_access_key\nAWS_SECRET_ACCESS_KEY=staging_secret_key\nAWS_STORAGE_BUCKET_NAME=myproject-staging-media\n\n# Monitoring\nSENTRY_DSN=https://staging-sentry-dsn@sentry.io/project\n\n# Feature flags (staging can test new features)\nFEATURE_NEW_DASHBOARD=True\nFEATURE_BETA_FEATURES=True\n\n# Performance monitoring\nENABLE_SILK=True\n",[1115,5321,5322,5326,5335,5344,5353,5357,5361,5370,5374,5378,5387,5396,5404,5413,5422,5426,5430,5439,5443,5448,5457,5466,5475,5484,5494,5498,5503,5513,5517,5522,5530,5538,5542,5547],{"__ignoreMap":1117},[1135,5323,5324],{"class":1137,"line":1138},[1135,5325,3703],{"class":1193},[1135,5327,5328,5330,5332],{"class":1137,"line":1149},[1135,5329,1255],{"class":3708},[1135,5331,1300],{"class":1176},[1135,5333,5334],{"class":1268},"staging-secret-key-different-from-production\n",[1135,5336,5337,5339,5341],{"class":1137,"line":1163},[1135,5338,1279],{"class":3708},[1135,5340,1300],{"class":1176},[1135,5342,5343],{"class":1268},"False\n",[1135,5345,5346,5348,5350],{"class":1137,"line":1183},[1135,5347,1323],{"class":3708},[1135,5349,1300],{"class":1176},[1135,5351,5352],{"class":1268},"staging.example.com\n",[1135,5354,5355],{"class":1137,"line":1190},[1135,5356,1187],{"emptyLinePlaceholder":1186},[1135,5358,5359],{"class":1137,"line":1197},[1135,5360,2984],{"class":1193},[1135,5362,5363,5365,5367],{"class":1137,"line":1241},[1135,5364,3744],{"class":3708},[1135,5366,1300],{"class":1176},[1135,5368,5369],{"class":1268},"postgresql://user:password@staging-db:5432/myproject_staging\n",[1135,5371,5372],{"class":1137,"line":1246},[1135,5373,1187],{"emptyLinePlaceholder":1186},[1135,5375,5376],{"class":1137,"line":1252},[1135,5377,4816],{"class":1193},[1135,5379,5380,5382,5384],{"class":1137,"line":1276},[1135,5381,2220],{"class":3708},[1135,5383,1300],{"class":1176},[1135,5385,5386],{"class":1268},"smtp.mailgun.org\n",[1135,5388,5389,5391,5393],{"class":1137,"line":1320},[1135,5390,2253],{"class":3708},[1135,5392,1300],{"class":1176},[1135,5394,5395],{"class":1268},"587\n",[1135,5397,5398,5400,5402],{"class":1137,"line":1359},[1135,5399,2292],{"class":3708},[1135,5401,1300],{"class":1176},[1135,5403,3722],{"class":1268},[1135,5405,5406,5408,5410],{"class":1137,"line":1364},[1135,5407,2329],{"class":3708},[1135,5409,1300],{"class":1176},[1135,5411,5412],{"class":1268},"staging@mg.example.com\n",[1135,5414,5415,5417,5419],{"class":1137,"line":1370},[1135,5416,2357],{"class":3708},[1135,5418,1300],{"class":1176},[1135,5420,5421],{"class":1268},"staging-email-password\n",[1135,5423,5424],{"class":1137,"line":1381},[1135,5425,1187],{"emptyLinePlaceholder":1186},[1135,5427,5428],{"class":1137,"line":1395},[1135,5429,3799],{"class":1193},[1135,5431,5432,5434,5436],{"class":1137,"line":1407},[1135,5433,3823],{"class":3708},[1135,5435,1300],{"class":1176},[1135,5437,5438],{"class":1268},"redis://staging-redis:6379/0\n",[1135,5440,5441],{"class":1137,"line":1419},[1135,5442,1187],{"emptyLinePlaceholder":1186},[1135,5444,5445],{"class":1137,"line":1431},[1135,5446,5447],{"class":1193},"# External services (staging/testing)\n",[1135,5449,5450,5452,5454],{"class":1137,"line":1443},[1135,5451,3851],{"class":3708},[1135,5453,1300],{"class":1176},[1135,5455,5456],{"class":1268},"pk_test_staging_...\n",[1135,5458,5459,5461,5463],{"class":1137,"line":1455},[1135,5460,3861],{"class":3708},[1135,5462,1300],{"class":1176},[1135,5464,5465],{"class":1268},"sk_test_staging_...\n",[1135,5467,5468,5470,5472],{"class":1137,"line":1461},[1135,5469,3871],{"class":3708},[1135,5471,1300],{"class":1176},[1135,5473,5474],{"class":1268},"staging_access_key\n",[1135,5476,5477,5479,5481],{"class":1137,"line":1466},[1135,5478,3881],{"class":3708},[1135,5480,1300],{"class":1176},[1135,5482,5483],{"class":1268},"staging_secret_key\n",[1135,5485,5486,5489,5491],{"class":1137,"line":1476},[1135,5487,5488],{"class":3708},"AWS_STORAGE_BUCKET_NAME",[1135,5490,1300],{"class":1176},[1135,5492,5493],{"class":1268},"myproject-staging-media\n",[1135,5495,5496],{"class":1137,"line":1488},[1135,5497,1187],{"emptyLinePlaceholder":1186},[1135,5499,5500],{"class":1137,"line":1500},[1135,5501,5502],{"class":1193},"# Monitoring\n",[1135,5504,5505,5508,5510],{"class":1137,"line":1505},[1135,5506,5507],{"class":3708},"SENTRY_DSN",[1135,5509,1300],{"class":1176},[1135,5511,5512],{"class":1268},"https://staging-sentry-dsn@sentry.io/project\n",[1135,5514,5515],{"class":1137,"line":1510},[1135,5516,1187],{"emptyLinePlaceholder":1186},[1135,5518,5519],{"class":1137,"line":1520},[1135,5520,5521],{"class":1193},"# Feature flags (staging can test new features)\n",[1135,5523,5524,5526,5528],{"class":1137,"line":1532},[1135,5525,3899],{"class":3708},[1135,5527,1300],{"class":1176},[1135,5529,3722],{"class":1268},[1135,5531,5532,5534,5536],{"class":1137,"line":1544},[1135,5533,3908],{"class":3708},[1135,5535,1300],{"class":1176},[1135,5537,3722],{"class":1268},[1135,5539,5540],{"class":1137,"line":1556},[1135,5541,1187],{"emptyLinePlaceholder":1186},[1135,5543,5544],{"class":1137,"line":1561},[1135,5545,5546],{"class":1193},"# Performance monitoring\n",[1135,5548,5549,5551,5553],{"class":1137,"line":1566},[1135,5550,5250],{"class":3708},[1135,5552,1300],{"class":1176},[1135,5554,3722],{"class":1268},[1035,5556,5558],{"id":5557},"staging-deployment","Staging Deployment",[1026,5560,5561],{},[1042,5562,5563],{},"Docker Compose for Staging:",[1108,5565,5569],{"className":5566,"code":5567,"language":5568,"meta":1117,"style":1117},"language-yaml shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# docker-compose.staging.yml\nversion: '3.8'\n\nservices:\n  web:\n    build: .\n    ports:\n      - \"8000:8000\"\n    environment:\n      - DJANGO_SETTINGS_MODULE=config.settings.staging\n    env_file:\n      - .env.staging\n    depends_on:\n      - db\n      - redis\n    volumes:\n      - ./logs:/var/log/django\n    command: gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 2\n\n  db:\n    image: postgres:15\n    environment:\n      POSTGRES_DB: myproject_staging\n      POSTGRES_USER: postgres\n      POSTGRES_PASSWORD: staging_db_password\n    volumes:\n      - postgres_staging_data:/var/lib/postgresql/data\n    ports:\n      - \"5432:5432\"\n\n  redis:\n    image: redis:7-alpine\n    ports:\n      - \"6379:6379\"\n\n  nginx:\n    image: nginx:alpine\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    volumes:\n      - ./deploy/nginx/staging.conf:/etc/nginx/conf.d/default.conf\n      - ./staticfiles:/var/www/static\n    depends_on:\n      - web\n\nvolumes:\n  postgres_staging_data:\n","yaml",[1115,5570,5571,5576,5590,5594,5602,5609,5619,5626,5638,5645,5652,5659,5666,5673,5680,5687,5694,5701,5711,5715,5722,5732,5738,5748,5758,5768,5774,5781,5787,5798,5802,5809,5818,5824,5835,5839,5846,5855,5861,5872,5883,5889,5896,5903,5909,5916,5920,5927],{"__ignoreMap":1117},[1135,5572,5573],{"class":1137,"line":1138},[1135,5574,5575],{"class":1193},"# docker-compose.staging.yml\n",[1135,5577,5578,5581,5583,5585,5588],{"class":1137,"line":1149},[1135,5579,2441],{"class":5580},"suXOh",[1135,5582,1777],{"class":1176},[1135,5584,1730],{"class":1264},[1135,5586,5587],{"class":1268},"3.8",[1135,5589,1736],{"class":1264},[1135,5591,5592],{"class":1137,"line":1163},[1135,5593,1187],{"emptyLinePlaceholder":1186},[1135,5595,5596,5599],{"class":1137,"line":1183},[1135,5597,5598],{"class":5580},"services",[1135,5600,5601],{"class":1176},":\n",[1135,5603,5604,5607],{"class":1137,"line":1190},[1135,5605,5606],{"class":5580},"  web",[1135,5608,5601],{"class":1176},[1135,5610,5611,5614,5616],{"class":1137,"line":1197},[1135,5612,5613],{"class":5580},"    build",[1135,5615,1777],{"class":1176},[1135,5617,5618],{"class":2274}," .\n",[1135,5620,5621,5624],{"class":1137,"line":1241},[1135,5622,5623],{"class":5580},"    ports",[1135,5625,5601],{"class":1176},[1135,5627,5628,5631,5633,5636],{"class":1137,"line":1246},[1135,5629,5630],{"class":1176},"      -",[1135,5632,3953],{"class":1264},[1135,5634,5635],{"class":1268},"8000:8000",[1135,5637,3959],{"class":1264},[1135,5639,5640,5643],{"class":1137,"line":1252},[1135,5641,5642],{"class":5580},"    environment",[1135,5644,5601],{"class":1176},[1135,5646,5647,5649],{"class":1137,"line":1276},[1135,5648,5630],{"class":1176},[1135,5650,5651],{"class":1268}," DJANGO_SETTINGS_MODULE=config.settings.staging\n",[1135,5653,5654,5657],{"class":1137,"line":1320},[1135,5655,5656],{"class":5580},"    env_file",[1135,5658,5601],{"class":1176},[1135,5660,5661,5663],{"class":1137,"line":1359},[1135,5662,5630],{"class":1176},[1135,5664,5665],{"class":1268}," .env.staging\n",[1135,5667,5668,5671],{"class":1137,"line":1364},[1135,5669,5670],{"class":5580},"    depends_on",[1135,5672,5601],{"class":1176},[1135,5674,5675,5677],{"class":1137,"line":1370},[1135,5676,5630],{"class":1176},[1135,5678,5679],{"class":1268}," db\n",[1135,5681,5682,5684],{"class":1137,"line":1381},[1135,5683,5630],{"class":1176},[1135,5685,5686],{"class":1268}," redis\n",[1135,5688,5689,5692],{"class":1137,"line":1395},[1135,5690,5691],{"class":5580},"    volumes",[1135,5693,5601],{"class":1176},[1135,5695,5696,5698],{"class":1137,"line":1407},[1135,5697,5630],{"class":1176},[1135,5699,5700],{"class":1268}," ./logs:/var/log/django\n",[1135,5702,5703,5706,5708],{"class":1137,"line":1419},[1135,5704,5705],{"class":5580},"    command",[1135,5707,1777],{"class":1176},[1135,5709,5710],{"class":1268}," gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 2\n",[1135,5712,5713],{"class":1137,"line":1431},[1135,5714,1187],{"emptyLinePlaceholder":1186},[1135,5716,5717,5720],{"class":1137,"line":1443},[1135,5718,5719],{"class":5580},"  db",[1135,5721,5601],{"class":1176},[1135,5723,5724,5727,5729],{"class":1137,"line":1455},[1135,5725,5726],{"class":5580},"    image",[1135,5728,1777],{"class":1176},[1135,5730,5731],{"class":1268}," postgres:15\n",[1135,5733,5734,5736],{"class":1137,"line":1461},[1135,5735,5642],{"class":5580},[1135,5737,5601],{"class":1176},[1135,5739,5740,5743,5745],{"class":1137,"line":1466},[1135,5741,5742],{"class":5580},"      POSTGRES_DB",[1135,5744,1777],{"class":1176},[1135,5746,5747],{"class":1268}," myproject_staging\n",[1135,5749,5750,5753,5755],{"class":1137,"line":1476},[1135,5751,5752],{"class":5580},"      POSTGRES_USER",[1135,5754,1777],{"class":1176},[1135,5756,5757],{"class":1268}," postgres\n",[1135,5759,5760,5763,5765],{"class":1137,"line":1488},[1135,5761,5762],{"class":5580},"      POSTGRES_PASSWORD",[1135,5764,1777],{"class":1176},[1135,5766,5767],{"class":1268}," staging_db_password\n",[1135,5769,5770,5772],{"class":1137,"line":1500},[1135,5771,5691],{"class":5580},[1135,5773,5601],{"class":1176},[1135,5775,5776,5778],{"class":1137,"line":1505},[1135,5777,5630],{"class":1176},[1135,5779,5780],{"class":1268}," postgres_staging_data:/var/lib/postgresql/data\n",[1135,5782,5783,5785],{"class":1137,"line":1510},[1135,5784,5623],{"class":5580},[1135,5786,5601],{"class":1176},[1135,5788,5789,5791,5793,5796],{"class":1137,"line":1520},[1135,5790,5630],{"class":1176},[1135,5792,3953],{"class":1264},[1135,5794,5795],{"class":1268},"5432:5432",[1135,5797,3959],{"class":1264},[1135,5799,5800],{"class":1137,"line":1532},[1135,5801,1187],{"emptyLinePlaceholder":1186},[1135,5803,5804,5807],{"class":1137,"line":1544},[1135,5805,5806],{"class":5580},"  redis",[1135,5808,5601],{"class":1176},[1135,5810,5811,5813,5815],{"class":1137,"line":1556},[1135,5812,5726],{"class":5580},[1135,5814,1777],{"class":1176},[1135,5816,5817],{"class":1268}," redis:7-alpine\n",[1135,5819,5820,5822],{"class":1137,"line":1561},[1135,5821,5623],{"class":5580},[1135,5823,5601],{"class":1176},[1135,5825,5826,5828,5830,5833],{"class":1137,"line":1566},[1135,5827,5630],{"class":1176},[1135,5829,3953],{"class":1264},[1135,5831,5832],{"class":1268},"6379:6379",[1135,5834,3959],{"class":1264},[1135,5836,5837],{"class":1137,"line":1589},[1135,5838,1187],{"emptyLinePlaceholder":1186},[1135,5840,5841,5844],{"class":1137,"line":1594},[1135,5842,5843],{"class":5580},"  nginx",[1135,5845,5601],{"class":1176},[1135,5847,5848,5850,5852],{"class":1137,"line":1604},[1135,5849,5726],{"class":5580},[1135,5851,1777],{"class":1176},[1135,5853,5854],{"class":1268}," nginx:alpine\n",[1135,5856,5857,5859],{"class":1137,"line":1616},[1135,5858,5623],{"class":5580},[1135,5860,5601],{"class":1176},[1135,5862,5863,5865,5867,5870],{"class":1137,"line":1628},[1135,5864,5630],{"class":1176},[1135,5866,3953],{"class":1264},[1135,5868,5869],{"class":1268},"80:80",[1135,5871,3959],{"class":1264},[1135,5873,5874,5876,5878,5881],{"class":1137,"line":1640},[1135,5875,5630],{"class":1176},[1135,5877,3953],{"class":1264},[1135,5879,5880],{"class":1268},"443:443",[1135,5882,3959],{"class":1264},[1135,5884,5885,5887],{"class":1137,"line":1652},[1135,5886,5691],{"class":5580},[1135,5888,5601],{"class":1176},[1135,5890,5891,5893],{"class":1137,"line":1664},[1135,5892,5630],{"class":1176},[1135,5894,5895],{"class":1268}," ./deploy/nginx/staging.conf:/etc/nginx/conf.d/default.conf\n",[1135,5897,5898,5900],{"class":1137,"line":1676},[1135,5899,5630],{"class":1176},[1135,5901,5902],{"class":1268}," ./staticfiles:/var/www/static\n",[1135,5904,5905,5907],{"class":1137,"line":1688},[1135,5906,5670],{"class":5580},[1135,5908,5601],{"class":1176},[1135,5910,5911,5913],{"class":1137,"line":1700},[1135,5912,5630],{"class":1176},[1135,5914,5915],{"class":1268}," web\n",[1135,5917,5918],{"class":1137,"line":1712},[1135,5919,1187],{"emptyLinePlaceholder":1186},[1135,5921,5922,5925],{"class":1137,"line":1717},[1135,5923,5924],{"class":5580},"volumes",[1135,5926,5601],{"class":1176},[1135,5928,5929,5932],{"class":1137,"line":1722},[1135,5930,5931],{"class":5580},"  postgres_staging_data",[1135,5933,5601],{"class":1176},[1030,5935,5937],{"id":5936},"production-environment","Production Environment",[1035,5939,5941],{"id":5940},"production-settings","Production Settings",[1026,5943,5944],{},[1042,5945,5946],{},"config/settings/production.py:",[1108,5948,5950],{"className":1129,"code":5949,"language":1131,"meta":1117,"style":1117},"from .base import *\nimport dj_database_url\nimport sentry_sdk\nfrom sentry_sdk.integrations.django import DjangoIntegration\nfrom sentry_sdk.integrations.redis import RedisIntegration\n\n# Security\nDEBUG = False\nSECRET_KEY = config('SECRET_KEY')\nALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=Csv())\n\n# Database\nDATABASES = {\n    'default': dj_database_url.config(\n        default=config('DATABASE_URL'),\n        conn_max_age=60,\n        conn_health_checks=True,\n    )\n}\n\n# Security settings\nSECURE_BROWSER_XSS_FILTER = True\nSECURE_CONTENT_TYPE_NOSNIFF = True\nSECURE_HSTS_INCLUDE_SUBDOMAINS = True\nSECURE_HSTS_PRELOAD = True\nSECURE_HSTS_SECONDS = 31536000\nSECURE_REDIRECT_EXEMPT = []\nSECURE_SSL_REDIRECT = True\nSECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')\nSESSION_COOKIE_SECURE = True\nSESSION_COOKIE_HTTPONLY = True\nSESSION_COOKIE_AGE = 3600  # 1 hour\nCSRF_COOKIE_SECURE = True\nCSRF_COOKIE_HTTPONLY = True\nX_FRAME_OPTIONS = 'DENY'\n\n# Static files\nSTATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'\nWHITENOISE_USE_FINDERS = True\nWHITENOISE_AUTOREFRESH = False\nWHITENOISE_MAX_AGE = 31536000\n\n# Media files (use cloud storage in production)\nDEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'\nAWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')\nAWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')\nAWS_STORAGE_BUCKET_NAME = config('AWS_STORAGE_BUCKET_NAME')\nAWS_S3_REGION_NAME = config('AWS_S3_REGION_NAME', default='us-east-1')\nAWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'\nAWS_DEFAULT_ACL = 'public-read'\n\n# Cache\nCACHES = {\n    'default': {\n        'BACKEND': 'django_redis.cache.RedisCache',\n        'LOCATION': config('REDIS_URL'),\n        'OPTIONS': {\n            'CLIENT_CLASS': 'django_redis.client.DefaultClient',\n            'CONNECTION_POOL_KWARGS': {\n                'max_connections': 50,\n                'retry_on_timeout': True,\n            },\n            'COMPRESSOR': 'django_redis.compressors.zlib.ZlibCompressor',\n            'SERIALIZER': 'django_redis.serializers.json.JSONSerializer',\n        },\n        'KEY_PREFIX': 'myproject_prod',\n        'TIMEOUT': 300,\n    }\n}\n\n# Session engine\nSESSION_ENGINE = 'django.contrib.sessions.backends.cache'\nSESSION_CACHE_ALIAS = 'default'\n\n# Email\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Logging\nLOGGING['handlers']['file'] = {\n    'level': 'WARNING',\n    'class': 'logging.handlers.RotatingFileHandler',\n    'filename': '/var/log/django/production.log',\n    'maxBytes': 1024*1024*50,  # 50MB\n    'backupCount': 10,\n    'formatter': 'verbose',\n}\n\nLOGGING['handlers']['error_file'] = {\n    'level': 'ERROR',\n    'class': 'logging.handlers.RotatingFileHandler',\n    'filename': '/var/log/django/error.log',\n    'maxBytes': 1024*1024*50,  # 50MB\n    'backupCount': 10,\n    'formatter': 'verbose',\n}\n\nLOGGING['loggers']['django'] = {\n    'handlers': ['file', 'error_file'],\n    'level': 'WARNING',\n    'propagate': False,\n}\n\nLOGGING['loggers']['myproject'] = {\n    'handlers': ['file', 'error_file'],\n    'level': 'INFO',\n    'propagate': False,\n}\n\n# Error reporting\nADMINS = [\n    ('Production Admin', config('ADMIN_EMAIL')),\n]\nMANAGERS = ADMINS\n\n# Sentry error tracking\nsentry_sdk.init(\n    dsn=config('SENTRY_DSN'),\n    integrations=[\n        DjangoIntegration(\n            transaction_style='url',\n            middleware_spans=True,\n            signals_spans=True,\n        ),\n        RedisIntegration(),\n    ],\n    traces_sample_rate=0.1,\n    send_default_pii=False,\n    environment='production',\n)\n\n# Performance optimizations\nCONN_MAX_AGE = 60\nUSE_TZ = True\n\n# File upload restrictions\nFILE_UPLOAD_MAX_MEMORY_SIZE = 5242880  # 5MB\nDATA_UPLOAD_MAX_MEMORY_SIZE = 5242880  # 5MB\nDATA_UPLOAD_MAX_NUMBER_FIELDS = 1000\n\n# Admin URL (security through obscurity)\nADMIN_URL = config('ADMIN_URL', default='admin/')\n",[1115,5951,5952,5964,5970,5977,5999,6019,6023,6028,6037,6055,6081,6085,6089,6097,6115,6133,6145,6156,6160,6164,6168,6173,6182,6191,6200,6209,6219,6229,6237,6261,6269,6278,6291,6299,6308,6322,6326,6330,6342,6351,6360,6369,6373,6378,6392,6410,6428,6446,6478,6499,6513,6517,6521,6529,6541,6559,6581,6593,6611,6624,6640,6655,6660,6680,6700,6704,6724,6740,6744,6748,6752,6757,6771,6784,6788,6792,6804,6808,6812,6838,6857,6875,6894,6920,6935,6953,6957,6961,6988,7007,7025,7044,7068,7082,7100,7104,7108,7134,7162,7180,7194,7198,7202,7228,7256,7274,7288,7292,7296,7300,7308,7333,7337,7347,7351,7356,7368,7387,7395,7402,7418,7429,7440,7445,7453,7458,7470,7481,7496,7500,7504,7510,7521,7530,7535,7541,7554,7565,7575,7580,7586],{"__ignoreMap":1117},[1135,5953,5954,5956,5958,5960,5962],{"class":1137,"line":1138},[1135,5955,1152],{"class":1141},[1135,5957,2898],{"class":1176},[1135,5959,2901],{"class":1145},[1135,5961,1142],{"class":1141},[1135,5963,2906],{"class":1577},[1135,5965,5966,5968],{"class":1137,"line":1149},[1135,5967,1142],{"class":1141},[1135,5969,4386],{"class":1145},[1135,5971,5972,5974],{"class":1137,"line":1163},[1135,5973,1142],{"class":1141},[1135,5975,5976],{"class":1145}," sentry_sdk\n",[1135,5978,5979,5981,5984,5986,5989,5991,5994,5996],{"class":1137,"line":1183},[1135,5980,1152],{"class":1141},[1135,5982,5983],{"class":1145}," sentry_sdk",[1135,5985,1231],{"class":1176},[1135,5987,5988],{"class":1145},"integrations",[1135,5990,1231],{"class":1176},[1135,5992,5993],{"class":1145},"django ",[1135,5995,1142],{"class":1141},[1135,5997,5998],{"class":1145}," DjangoIntegration\n",[1135,6000,6001,6003,6005,6007,6009,6011,6014,6016],{"class":1137,"line":1190},[1135,6002,1152],{"class":1141},[1135,6004,5983],{"class":1145},[1135,6006,1231],{"class":1176},[1135,6008,5988],{"class":1145},[1135,6010,1231],{"class":1176},[1135,6012,6013],{"class":1145},"redis ",[1135,6015,1142],{"class":1141},[1135,6017,6018],{"class":1145}," RedisIntegration\n",[1135,6020,6021],{"class":1137,"line":1197},[1135,6022,1187],{"emptyLinePlaceholder":1186},[1135,6024,6025],{"class":1137,"line":1241},[1135,6026,6027],{"class":1193},"# Security\n",[1135,6029,6030,6032,6034],{"class":1137,"line":1246},[1135,6031,1279],{"class":1200},[1135,6033,1204],{"class":1176},[1135,6035,6036],{"class":1303}," False\n",[1135,6038,6039,6041,6043,6045,6047,6049,6051,6053],{"class":1137,"line":1252},[1135,6040,1255],{"class":1200},[1135,6042,1204],{"class":1176},[1135,6044,1173],{"class":1207},[1135,6046,1211],{"class":1176},[1135,6048,1265],{"class":1264},[1135,6050,1255],{"class":1268},[1135,6052,1265],{"class":1264},[1135,6054,1273],{"class":1176},[1135,6056,6057,6059,6061,6063,6065,6067,6069,6071,6073,6075,6077,6079],{"class":1137,"line":1276},[1135,6058,1323],{"class":1200},[1135,6060,1204],{"class":1176},[1135,6062,1173],{"class":1207},[1135,6064,1211],{"class":1176},[1135,6066,1265],{"class":1264},[1135,6068,1323],{"class":1268},[1135,6070,1265],{"class":1264},[1135,6072,1177],{"class":1176},[1135,6074,1309],{"class":1296},[1135,6076,1300],{"class":1176},[1135,6078,1353],{"class":1207},[1135,6080,1356],{"class":1176},[1135,6082,6083],{"class":1137,"line":1320},[1135,6084,1187],{"emptyLinePlaceholder":1186},[1135,6086,6087],{"class":1137,"line":1359},[1135,6088,2984],{"class":1193},[1135,6090,6091,6093,6095],{"class":1137,"line":1364},[1135,6092,2989],{"class":1200},[1135,6094,1204],{"class":1176},[1135,6096,1848],{"class":1176},[1135,6098,6099,6101,6103,6105,6107,6109,6111,6113],{"class":1137,"line":1370},[1135,6100,1384],{"class":1264},[1135,6102,3000],{"class":1268},[1135,6104,1265],{"class":1264},[1135,6106,1777],{"class":1176},[1135,6108,4492],{"class":1145},[1135,6110,1231],{"class":1176},[1135,6112,4497],{"class":1207},[1135,6114,4500],{"class":1176},[1135,6116,6117,6119,6121,6123,6125,6127,6129,6131],{"class":1137,"line":1381},[1135,6118,4505],{"class":1296},[1135,6120,1300],{"class":1176},[1135,6122,4497],{"class":1207},[1135,6124,1211],{"class":1176},[1135,6126,1265],{"class":1264},[1135,6128,3744],{"class":1268},[1135,6130,1265],{"class":1264},[1135,6132,4762],{"class":1176},[1135,6134,6135,6138,6140,6143],{"class":1137,"line":1395},[1135,6136,6137],{"class":1296},"        conn_max_age",[1135,6139,1300],{"class":1176},[1135,6141,6142],{"class":2274},"60",[1135,6144,1392],{"class":1176},[1135,6146,6147,6150,6152,6154],{"class":1137,"line":1407},[1135,6148,6149],{"class":1296},"        conn_health_checks",[1135,6151,1300],{"class":1176},[1135,6153,2313],{"class":1303},[1135,6155,1392],{"class":1176},[1135,6157,6158],{"class":1137,"line":1419},[1135,6159,4524],{"class":1176},[1135,6161,6162],{"class":1137,"line":1431},[1135,6163,2873],{"class":1176},[1135,6165,6166],{"class":1137,"line":1443},[1135,6167,1187],{"emptyLinePlaceholder":1186},[1135,6169,6170],{"class":1137,"line":1455},[1135,6171,6172],{"class":1193},"# Security settings\n",[1135,6174,6175,6178,6180],{"class":1137,"line":1461},[1135,6176,6177],{"class":1200},"SECURE_BROWSER_XSS_FILTER",[1135,6179,1204],{"class":1176},[1135,6181,2028],{"class":1303},[1135,6183,6184,6187,6189],{"class":1137,"line":1466},[1135,6185,6186],{"class":1200},"SECURE_CONTENT_TYPE_NOSNIFF",[1135,6188,1204],{"class":1176},[1135,6190,2028],{"class":1303},[1135,6192,6193,6196,6198],{"class":1137,"line":1476},[1135,6194,6195],{"class":1200},"SECURE_HSTS_INCLUDE_SUBDOMAINS",[1135,6197,1204],{"class":1176},[1135,6199,2028],{"class":1303},[1135,6201,6202,6205,6207],{"class":1137,"line":1488},[1135,6203,6204],{"class":1200},"SECURE_HSTS_PRELOAD",[1135,6206,1204],{"class":1176},[1135,6208,2028],{"class":1303},[1135,6210,6211,6214,6216],{"class":1137,"line":1500},[1135,6212,6213],{"class":1200},"SECURE_HSTS_SECONDS",[1135,6215,1204],{"class":1176},[1135,6217,6218],{"class":2274}," 31536000\n",[1135,6220,6221,6224,6226],{"class":1137,"line":1505},[1135,6222,6223],{"class":1200},"SECURE_REDIRECT_EXEMPT",[1135,6225,1204],{"class":1176},[1135,6227,6228],{"class":1176}," []\n",[1135,6230,6231,6233,6235],{"class":1137,"line":1510},[1135,6232,4542],{"class":1200},[1135,6234,1204],{"class":1176},[1135,6236,2028],{"class":1303},[1135,6238,6239,6241,6243,6245,6247,6249,6251,6253,6255,6257,6259],{"class":1137,"line":1520},[1135,6240,4577],{"class":1200},[1135,6242,1204],{"class":1176},[1135,6244,4582],{"class":1176},[1135,6246,1265],{"class":1264},[1135,6248,4587],{"class":1268},[1135,6250,1265],{"class":1264},[1135,6252,1177],{"class":1176},[1135,6254,1730],{"class":1264},[1135,6256,4596],{"class":1268},[1135,6258,1265],{"class":1264},[1135,6260,1273],{"class":1176},[1135,6262,6263,6265,6267],{"class":1137,"line":1532},[1135,6264,4605],{"class":1200},[1135,6266,1204],{"class":1176},[1135,6268,2028],{"class":1303},[1135,6270,6271,6274,6276],{"class":1137,"line":1544},[1135,6272,6273],{"class":1200},"SESSION_COOKIE_HTTPONLY",[1135,6275,1204],{"class":1176},[1135,6277,2028],{"class":1303},[1135,6279,6280,6283,6285,6288],{"class":1137,"line":1556},[1135,6281,6282],{"class":1200},"SESSION_COOKIE_AGE",[1135,6284,1204],{"class":1176},[1135,6286,6287],{"class":2274}," 3600",[1135,6289,6290],{"class":1193},"  # 1 hour\n",[1135,6292,6293,6295,6297],{"class":1137,"line":1561},[1135,6294,4640],{"class":1200},[1135,6296,1204],{"class":1176},[1135,6298,2028],{"class":1303},[1135,6300,6301,6304,6306],{"class":1137,"line":1566},[1135,6302,6303],{"class":1200},"CSRF_COOKIE_HTTPONLY",[1135,6305,1204],{"class":1176},[1135,6307,2028],{"class":1303},[1135,6309,6310,6313,6315,6317,6320],{"class":1137,"line":1589},[1135,6311,6312],{"class":1200},"X_FRAME_OPTIONS",[1135,6314,1204],{"class":1176},[1135,6316,1730],{"class":1264},[1135,6318,6319],{"class":1268},"DENY",[1135,6321,1736],{"class":1264},[1135,6323,6324],{"class":1137,"line":1594},[1135,6325,1187],{"emptyLinePlaceholder":1186},[1135,6327,6328],{"class":1137,"line":1604},[1135,6329,2059],{"class":1193},[1135,6331,6332,6334,6336,6338,6340],{"class":1137,"line":1616},[1135,6333,3454],{"class":1200},[1135,6335,1204],{"class":1176},[1135,6337,1730],{"class":1264},[1135,6339,4689],{"class":1268},[1135,6341,1736],{"class":1264},[1135,6343,6344,6347,6349],{"class":1137,"line":1628},[1135,6345,6346],{"class":1200},"WHITENOISE_USE_FINDERS",[1135,6348,1204],{"class":1176},[1135,6350,2028],{"class":1303},[1135,6352,6353,6356,6358],{"class":1137,"line":1640},[1135,6354,6355],{"class":1200},"WHITENOISE_AUTOREFRESH",[1135,6357,1204],{"class":1176},[1135,6359,6036],{"class":1303},[1135,6361,6362,6365,6367],{"class":1137,"line":1652},[1135,6363,6364],{"class":1200},"WHITENOISE_MAX_AGE",[1135,6366,1204],{"class":1176},[1135,6368,6218],{"class":2274},[1135,6370,6371],{"class":1137,"line":1664},[1135,6372,1187],{"emptyLinePlaceholder":1186},[1135,6374,6375],{"class":1137,"line":1676},[1135,6376,6377],{"class":1193},"# Media files (use cloud storage in production)\n",[1135,6379,6380,6383,6385,6387,6390],{"class":1137,"line":1688},[1135,6381,6382],{"class":1200},"DEFAULT_FILE_STORAGE",[1135,6384,1204],{"class":1176},[1135,6386,1730],{"class":1264},[1135,6388,6389],{"class":1268},"storages.backends.s3boto3.S3Boto3Storage",[1135,6391,1736],{"class":1264},[1135,6393,6394,6396,6398,6400,6402,6404,6406,6408],{"class":1137,"line":1700},[1135,6395,3871],{"class":1200},[1135,6397,1204],{"class":1176},[1135,6399,1173],{"class":1207},[1135,6401,1211],{"class":1176},[1135,6403,1265],{"class":1264},[1135,6405,3871],{"class":1268},[1135,6407,1265],{"class":1264},[1135,6409,1273],{"class":1176},[1135,6411,6412,6414,6416,6418,6420,6422,6424,6426],{"class":1137,"line":1712},[1135,6413,3881],{"class":1200},[1135,6415,1204],{"class":1176},[1135,6417,1173],{"class":1207},[1135,6419,1211],{"class":1176},[1135,6421,1265],{"class":1264},[1135,6423,3881],{"class":1268},[1135,6425,1265],{"class":1264},[1135,6427,1273],{"class":1176},[1135,6429,6430,6432,6434,6436,6438,6440,6442,6444],{"class":1137,"line":1717},[1135,6431,5488],{"class":1200},[1135,6433,1204],{"class":1176},[1135,6435,1173],{"class":1207},[1135,6437,1211],{"class":1176},[1135,6439,1265],{"class":1264},[1135,6441,5488],{"class":1268},[1135,6443,1265],{"class":1264},[1135,6445,1273],{"class":1176},[1135,6447,6448,6451,6453,6455,6457,6459,6461,6463,6465,6467,6469,6471,6474,6476],{"class":1137,"line":1722},[1135,6449,6450],{"class":1200},"AWS_S3_REGION_NAME",[1135,6452,1204],{"class":1176},[1135,6454,1173],{"class":1207},[1135,6456,1211],{"class":1176},[1135,6458,1265],{"class":1264},[1135,6460,6450],{"class":1268},[1135,6462,1265],{"class":1264},[1135,6464,1177],{"class":1176},[1135,6466,1297],{"class":1296},[1135,6468,1300],{"class":1176},[1135,6470,1265],{"class":1264},[1135,6472,6473],{"class":1268},"us-east-1",[1135,6475,1265],{"class":1264},[1135,6477,1273],{"class":1176},[1135,6479,6480,6483,6485,6488,6490,6492,6494,6496],{"class":1137,"line":1739},[1135,6481,6482],{"class":1200},"AWS_S3_CUSTOM_DOMAIN",[1135,6484,1204],{"class":1176},[1135,6486,6487],{"class":2525}," f",[1135,6489,1265],{"class":1268},[1135,6491,2560],{"class":2512},[1135,6493,5488],{"class":1200},[1135,6495,2529],{"class":2512},[1135,6497,6498],{"class":1268},".s3.amazonaws.com'\n",[1135,6500,6501,6504,6506,6508,6511],{"class":1137,"line":1744},[1135,6502,6503],{"class":1200},"AWS_DEFAULT_ACL",[1135,6505,1204],{"class":1176},[1135,6507,1730],{"class":1264},[1135,6509,6510],{"class":1268},"public-read",[1135,6512,1736],{"class":1264},[1135,6514,6515],{"class":1137,"line":1750},[1135,6516,1187],{"emptyLinePlaceholder":1186},[1135,6518,6519],{"class":1137,"line":1760},[1135,6520,3799],{"class":1193},[1135,6522,6523,6525,6527],{"class":1137,"line":1766},[1135,6524,3370],{"class":1200},[1135,6526,1204],{"class":1176},[1135,6528,1848],{"class":1176},[1135,6530,6531,6533,6535,6537,6539],{"class":1137,"line":1789},[1135,6532,1384],{"class":1264},[1135,6534,3000],{"class":1268},[1135,6536,1265],{"class":1264},[1135,6538,1777],{"class":1176},[1135,6540,1848],{"class":1176},[1135,6542,6543,6545,6547,6549,6551,6553,6555,6557],{"class":1137,"line":1819},[1135,6544,1769],{"class":1264},[1135,6546,1772],{"class":1268},[1135,6548,1265],{"class":1264},[1135,6550,1777],{"class":1176},[1135,6552,1730],{"class":1264},[1135,6554,4734],{"class":1268},[1135,6556,1265],{"class":1264},[1135,6558,1392],{"class":1176},[1135,6560,6561,6563,6565,6567,6569,6571,6573,6575,6577,6579],{"class":1137,"line":1836},[1135,6562,1769],{"class":1264},[1135,6564,4745],{"class":1268},[1135,6566,1265],{"class":1264},[1135,6568,1777],{"class":1176},[1135,6570,1173],{"class":1207},[1135,6572,1211],{"class":1176},[1135,6574,1265],{"class":1264},[1135,6576,3823],{"class":1268},[1135,6578,1265],{"class":1264},[1135,6580,4762],{"class":1176},[1135,6582,6583,6585,6587,6589,6591],{"class":1137,"line":1851},[1135,6584,1769],{"class":1264},[1135,6586,1841],{"class":1268},[1135,6588,1265],{"class":1264},[1135,6590,1777],{"class":1176},[1135,6592,1848],{"class":1176},[1135,6594,6595,6597,6599,6601,6603,6605,6607,6609],{"class":1137,"line":1866},[1135,6596,1854],{"class":1264},[1135,6598,4781],{"class":1268},[1135,6600,1265],{"class":1264},[1135,6602,1777],{"class":1176},[1135,6604,1730],{"class":1264},[1135,6606,4790],{"class":1268},[1135,6608,1265],{"class":1264},[1135,6610,1392],{"class":1176},[1135,6612,6613,6615,6618,6620,6622],{"class":1137,"line":1879},[1135,6614,1854],{"class":1264},[1135,6616,6617],{"class":1268},"CONNECTION_POOL_KWARGS",[1135,6619,1265],{"class":1264},[1135,6621,1777],{"class":1176},[1135,6623,1848],{"class":1176},[1135,6625,6626,6628,6631,6633,6635,6638],{"class":1137,"line":1891},[1135,6627,1869],{"class":1264},[1135,6629,6630],{"class":1268},"max_connections",[1135,6632,1265],{"class":1264},[1135,6634,1777],{"class":1176},[1135,6636,6637],{"class":2274}," 50",[1135,6639,1392],{"class":1176},[1135,6641,6642,6644,6647,6649,6651,6653],{"class":1137,"line":1903},[1135,6643,1869],{"class":1264},[1135,6645,6646],{"class":1268},"retry_on_timeout",[1135,6648,1265],{"class":1264},[1135,6650,1777],{"class":1176},[1135,6652,1831],{"class":1303},[1135,6654,1392],{"class":1176},[1135,6656,6657],{"class":1137,"line":1915},[1135,6658,6659],{"class":1176},"            },\n",[1135,6661,6662,6664,6667,6669,6671,6673,6676,6678],{"class":1137,"line":1921},[1135,6663,1854],{"class":1264},[1135,6665,6666],{"class":1268},"COMPRESSOR",[1135,6668,1265],{"class":1264},[1135,6670,1777],{"class":1176},[1135,6672,1730],{"class":1264},[1135,6674,6675],{"class":1268},"django_redis.compressors.zlib.ZlibCompressor",[1135,6677,1265],{"class":1264},[1135,6679,1392],{"class":1176},[1135,6681,6682,6684,6687,6689,6691,6693,6696,6698],{"class":1137,"line":1927},[1135,6683,1854],{"class":1264},[1135,6685,6686],{"class":1268},"SERIALIZER",[1135,6688,1265],{"class":1264},[1135,6690,1777],{"class":1176},[1135,6692,1730],{"class":1264},[1135,6694,6695],{"class":1268},"django_redis.serializers.json.JSONSerializer",[1135,6697,1265],{"class":1264},[1135,6699,1392],{"class":1176},[1135,6701,6702],{"class":1137,"line":1933},[1135,6703,1924],{"class":1176},[1135,6705,6706,6708,6711,6713,6715,6717,6720,6722],{"class":1137,"line":1938},[1135,6707,1769],{"class":1264},[1135,6709,6710],{"class":1268},"KEY_PREFIX",[1135,6712,1265],{"class":1264},[1135,6714,1777],{"class":1176},[1135,6716,1730],{"class":1264},[1135,6718,6719],{"class":1268},"myproject_prod",[1135,6721,1265],{"class":1264},[1135,6723,1392],{"class":1176},[1135,6725,6726,6728,6731,6733,6735,6738],{"class":1137,"line":1943},[1135,6727,1769],{"class":1264},[1135,6729,6730],{"class":1268},"TIMEOUT",[1135,6732,1265],{"class":1264},[1135,6734,1777],{"class":1176},[1135,6736,6737],{"class":2274}," 300",[1135,6739,1392],{"class":1176},[1135,6741,6742],{"class":1137,"line":1949},[1135,6743,3055],{"class":1176},[1135,6745,6746],{"class":1137,"line":1964},[1135,6747,2873],{"class":1176},[1135,6749,6750],{"class":1137,"line":1979},[1135,6751,1187],{"emptyLinePlaceholder":1186},[1135,6753,6754],{"class":1137,"line":1984},[1135,6755,6756],{"class":1193},"# Session engine\n",[1135,6758,6759,6762,6764,6766,6769],{"class":1137,"line":1990},[1135,6760,6761],{"class":1200},"SESSION_ENGINE",[1135,6763,1204],{"class":1176},[1135,6765,1730],{"class":1264},[1135,6767,6768],{"class":1268},"django.contrib.sessions.backends.cache",[1135,6770,1736],{"class":1264},[1135,6772,6773,6776,6778,6780,6782],{"class":1137,"line":2005},[1135,6774,6775],{"class":1200},"SESSION_CACHE_ALIAS",[1135,6777,1204],{"class":1176},[1135,6779,1730],{"class":1264},[1135,6781,3000],{"class":1268},[1135,6783,1736],{"class":1264},[1135,6785,6786],{"class":1137,"line":2020},[1135,6787,1187],{"emptyLinePlaceholder":1186},[1135,6789,6790],{"class":1137,"line":2031},[1135,6791,4816],{"class":1193},[1135,6793,6794,6796,6798,6800,6802],{"class":1137,"line":2041},[1135,6795,2205],{"class":1200},[1135,6797,1204],{"class":1176},[1135,6799,1730],{"class":1264},[1135,6801,2212],{"class":1268},[1135,6803,1736],{"class":1264},[1135,6805,6806],{"class":1137,"line":2051},[1135,6807,1187],{"emptyLinePlaceholder":1186},[1135,6809,6810],{"class":1137,"line":2056},[1135,6811,2423],{"class":1193},[1135,6813,6814,6816,6818,6820,6822,6824,6826,6828,6830,6832,6834,6836],{"class":1137,"line":2062},[1135,6815,2429],{"class":1200},[1135,6817,3504],{"class":1176},[1135,6819,1265],{"class":1264},[1135,6821,2641],{"class":1268},[1135,6823,1265],{"class":1264},[1135,6825,3513],{"class":1176},[1135,6827,1265],{"class":1264},[1135,6829,4855],{"class":1268},[1135,6831,1265],{"class":1264},[1135,6833,3530],{"class":1176},[1135,6835,1204],{"class":1176},[1135,6837,1848],{"class":1176},[1135,6839,6840,6842,6844,6846,6848,6850,6853,6855],{"class":1137,"line":2077},[1135,6841,1384],{"class":1264},[1135,6843,2669],{"class":1268},[1135,6845,1265],{"class":1264},[1135,6847,1777],{"class":1176},[1135,6849,1730],{"class":1264},[1135,6851,6852],{"class":1268},"WARNING",[1135,6854,1265],{"class":1264},[1135,6856,1392],{"class":1176},[1135,6858,6859,6861,6863,6865,6867,6869,6871,6873],{"class":1137,"line":2097},[1135,6860,1384],{"class":1264},[1135,6862,2690],{"class":1268},[1135,6864,1265],{"class":1264},[1135,6866,1777],{"class":1176},[1135,6868,1730],{"class":1264},[1135,6870,4896],{"class":1268},[1135,6872,1265],{"class":1264},[1135,6874,1392],{"class":1176},[1135,6876,6877,6879,6881,6883,6885,6887,6890,6892],{"class":1137,"line":2120},[1135,6878,1384],{"class":1264},[1135,6880,4907],{"class":1268},[1135,6882,1265],{"class":1264},[1135,6884,1777],{"class":1176},[1135,6886,1730],{"class":1264},[1135,6888,6889],{"class":1268},"/var/log/django/production.log",[1135,6891,1265],{"class":1264},[1135,6893,1392],{"class":1176},[1135,6895,6896,6898,6900,6902,6904,6906,6908,6910,6912,6915,6917],{"class":1137,"line":2125},[1135,6897,1384],{"class":1264},[1135,6899,4927],{"class":1268},[1135,6901,1265],{"class":1264},[1135,6903,1777],{"class":1176},[1135,6905,4934],{"class":2274},[1135,6907,4937],{"class":1577},[1135,6909,4940],{"class":2274},[1135,6911,4937],{"class":1577},[1135,6913,6914],{"class":2274},"50",[1135,6916,1177],{"class":1176},[1135,6918,6919],{"class":1193},"  # 50MB\n",[1135,6921,6922,6924,6926,6928,6930,6933],{"class":1137,"line":2131},[1135,6923,1384],{"class":1264},[1135,6925,4956],{"class":1268},[1135,6927,1265],{"class":1264},[1135,6929,1777],{"class":1176},[1135,6931,6932],{"class":2274}," 10",[1135,6934,1392],{"class":1176},[1135,6936,6937,6939,6941,6943,6945,6947,6949,6951],{"class":1137,"line":2146},[1135,6938,1384],{"class":1264},[1135,6940,2711],{"class":1268},[1135,6942,1265],{"class":1264},[1135,6944,1777],{"class":1176},[1135,6946,1730],{"class":1264},[1135,6948,2489],{"class":1268},[1135,6950,1265],{"class":1264},[1135,6952,1392],{"class":1176},[1135,6954,6955],{"class":1137,"line":2165},[1135,6956,2873],{"class":1176},[1135,6958,6959],{"class":1137,"line":2170},[1135,6960,1187],{"emptyLinePlaceholder":1186},[1135,6962,6963,6965,6967,6969,6971,6973,6975,6977,6980,6982,6984,6986],{"class":1137,"line":2176},[1135,6964,2429],{"class":1200},[1135,6966,3504],{"class":1176},[1135,6968,1265],{"class":1264},[1135,6970,2641],{"class":1268},[1135,6972,1265],{"class":1264},[1135,6974,3513],{"class":1176},[1135,6976,1265],{"class":1264},[1135,6978,6979],{"class":1268},"error_file",[1135,6981,1265],{"class":1264},[1135,6983,3530],{"class":1176},[1135,6985,1204],{"class":1176},[1135,6987,1848],{"class":1176},[1135,6989,6990,6992,6994,6996,6998,7000,7003,7005],{"class":1137,"line":2191},[1135,6991,1384],{"class":1264},[1135,6993,2669],{"class":1268},[1135,6995,1265],{"class":1264},[1135,6997,1777],{"class":1176},[1135,6999,1730],{"class":1264},[1135,7001,7002],{"class":1268},"ERROR",[1135,7004,1265],{"class":1264},[1135,7006,1392],{"class":1176},[1135,7008,7009,7011,7013,7015,7017,7019,7021,7023],{"class":1137,"line":2196},[1135,7010,1384],{"class":1264},[1135,7012,2690],{"class":1268},[1135,7014,1265],{"class":1264},[1135,7016,1777],{"class":1176},[1135,7018,1730],{"class":1264},[1135,7020,4896],{"class":1268},[1135,7022,1265],{"class":1264},[1135,7024,1392],{"class":1176},[1135,7026,7027,7029,7031,7033,7035,7037,7040,7042],{"class":1137,"line":2202},[1135,7028,1384],{"class":1264},[1135,7030,4907],{"class":1268},[1135,7032,1265],{"class":1264},[1135,7034,1777],{"class":1176},[1135,7036,1730],{"class":1264},[1135,7038,7039],{"class":1268},"/var/log/django/error.log",[1135,7041,1265],{"class":1264},[1135,7043,1392],{"class":1176},[1135,7045,7046,7048,7050,7052,7054,7056,7058,7060,7062,7064,7066],{"class":1137,"line":2217},[1135,7047,1384],{"class":1264},[1135,7049,4927],{"class":1268},[1135,7051,1265],{"class":1264},[1135,7053,1777],{"class":1176},[1135,7055,4934],{"class":2274},[1135,7057,4937],{"class":1577},[1135,7059,4940],{"class":2274},[1135,7061,4937],{"class":1577},[1135,7063,6914],{"class":2274},[1135,7065,1177],{"class":1176},[1135,7067,6919],{"class":1193},[1135,7069,7070,7072,7074,7076,7078,7080],{"class":1137,"line":2250},[1135,7071,1384],{"class":1264},[1135,7073,4956],{"class":1268},[1135,7075,1265],{"class":1264},[1135,7077,1777],{"class":1176},[1135,7079,6932],{"class":2274},[1135,7081,1392],{"class":1176},[1135,7083,7084,7086,7088,7090,7092,7094,7096,7098],{"class":1137,"line":2289},[1135,7085,1384],{"class":1264},[1135,7087,2711],{"class":1268},[1135,7089,1265],{"class":1264},[1135,7091,1777],{"class":1176},[1135,7093,1730],{"class":1264},[1135,7095,2489],{"class":1268},[1135,7097,1265],{"class":1264},[1135,7099,1392],{"class":1176},[1135,7101,7102],{"class":1137,"line":2326},[1135,7103,2873],{"class":1176},[1135,7105,7106],{"class":1137,"line":2354},[1135,7107,1187],{"emptyLinePlaceholder":1186},[1135,7109,7110,7112,7114,7116,7118,7120,7122,7124,7126,7128,7130,7132],{"class":1137,"line":2382},[1135,7111,2429],{"class":1200},[1135,7113,3504],{"class":1176},[1135,7115,1265],{"class":1264},[1135,7117,2781],{"class":1268},[1135,7119,1265],{"class":1264},[1135,7121,3513],{"class":1176},[1135,7123,1265],{"class":1264},[1135,7125,2795],{"class":1268},[1135,7127,1265],{"class":1264},[1135,7129,3530],{"class":1176},[1135,7131,1204],{"class":1176},[1135,7133,1848],{"class":1176},[1135,7135,7136,7138,7140,7142,7144,7146,7148,7150,7152,7154,7156,7158,7160],{"class":1137,"line":2415},[1135,7137,1384],{"class":1264},[1135,7139,2641],{"class":1268},[1135,7141,1265],{"class":1264},[1135,7143,1777],{"class":1176},[1135,7145,1801],{"class":1176},[1135,7147,1265],{"class":1264},[1135,7149,4855],{"class":1268},[1135,7151,1265],{"class":1264},[1135,7153,1177],{"class":1176},[1135,7155,1730],{"class":1264},[1135,7157,6979],{"class":1268},[1135,7159,1265],{"class":1264},[1135,7161,1816],{"class":1176},[1135,7163,7164,7166,7168,7170,7172,7174,7176,7178],{"class":1137,"line":2420},[1135,7165,1384],{"class":1264},[1135,7167,2669],{"class":1268},[1135,7169,1265],{"class":1264},[1135,7171,1777],{"class":1176},[1135,7173,1730],{"class":1264},[1135,7175,6852],{"class":1268},[1135,7177,1265],{"class":1264},[1135,7179,1392],{"class":1176},[1135,7181,7182,7184,7186,7188,7190,7192],{"class":1137,"line":2426},[1135,7183,1384],{"class":1264},[1135,7185,2849],{"class":1268},[1135,7187,1265],{"class":1264},[1135,7189,1777],{"class":1176},[1135,7191,2465],{"class":1303},[1135,7193,1392],{"class":1176},[1135,7195,7196],{"class":1137,"line":2436},[1135,7197,2873],{"class":1176},[1135,7199,7200],{"class":1137,"line":2453},[1135,7201,1187],{"emptyLinePlaceholder":1186},[1135,7203,7204,7206,7208,7210,7212,7214,7216,7218,7220,7222,7224,7226],{"class":1137,"line":2470},[1135,7205,2429],{"class":1200},[1135,7207,3504],{"class":1176},[1135,7209,1265],{"class":1264},[1135,7211,2781],{"class":1268},[1135,7213,1265],{"class":1264},[1135,7215,3513],{"class":1176},[1135,7217,1265],{"class":1264},[1135,7219,3557],{"class":1268},[1135,7221,1265],{"class":1264},[1135,7223,3530],{"class":1176},[1135,7225,1204],{"class":1176},[1135,7227,1848],{"class":1176},[1135,7229,7230,7232,7234,7236,7238,7240,7242,7244,7246,7248,7250,7252,7254],{"class":1137,"line":2484},[1135,7231,1384],{"class":1264},[1135,7233,2641],{"class":1268},[1135,7235,1265],{"class":1264},[1135,7237,1777],{"class":1176},[1135,7239,1801],{"class":1176},[1135,7241,1265],{"class":1264},[1135,7243,4855],{"class":1268},[1135,7245,1265],{"class":1264},[1135,7247,1177],{"class":1176},[1135,7249,1730],{"class":1264},[1135,7251,6979],{"class":1268},[1135,7253,1265],{"class":1264},[1135,7255,1816],{"class":1176},[1135,7257,7258,7260,7262,7264,7266,7268,7270,7272],{"class":1137,"line":2498},[1135,7259,1384],{"class":1264},[1135,7261,2669],{"class":1268},[1135,7263,1265],{"class":1264},[1135,7265,1777],{"class":1176},[1135,7267,1730],{"class":1264},[1135,7269,2678],{"class":1268},[1135,7271,1265],{"class":1264},[1135,7273,1392],{"class":1176},[1135,7275,7276,7278,7280,7282,7284,7286],{"class":1137,"line":2546},[1135,7277,1384],{"class":1264},[1135,7279,2849],{"class":1268},[1135,7281,1265],{"class":1264},[1135,7283,1777],{"class":1176},[1135,7285,2465],{"class":1303},[1135,7287,1392],{"class":1176},[1135,7289,7290],{"class":1137,"line":2567},[1135,7291,2873],{"class":1176},[1135,7293,7294],{"class":1137,"line":2572},[1135,7295,1187],{"emptyLinePlaceholder":1186},[1135,7297,7298],{"class":1137,"line":2586},[1135,7299,5140],{"class":1193},[1135,7301,7302,7304,7306],{"class":1137,"line":2607},[1135,7303,5145],{"class":1200},[1135,7305,1204],{"class":1176},[1135,7307,1378],{"class":1176},[1135,7309,7310,7312,7314,7317,7319,7321,7323,7325,7327,7329,7331],{"class":1137,"line":2626},[1135,7311,5154],{"class":1176},[1135,7313,1265],{"class":1264},[1135,7315,7316],{"class":1268},"Production Admin",[1135,7318,1265],{"class":1264},[1135,7320,1177],{"class":1176},[1135,7322,1173],{"class":1207},[1135,7324,1211],{"class":1176},[1135,7326,1265],{"class":1264},[1135,7328,5172],{"class":1268},[1135,7330,1265],{"class":1264},[1135,7332,5190],{"class":1176},[1135,7334,7335],{"class":1137,"line":2631},[1135,7336,1458],{"class":1176},[1135,7338,7339,7342,7344],{"class":1137,"line":2636},[1135,7340,7341],{"class":1200},"MANAGERS",[1135,7343,1204],{"class":1176},[1135,7345,7346],{"class":1200}," ADMINS\n",[1135,7348,7349],{"class":1137,"line":2650},[1135,7350,1187],{"emptyLinePlaceholder":1186},[1135,7352,7353],{"class":1137,"line":2664},[1135,7354,7355],{"class":1193},"# Sentry error tracking\n",[1135,7357,7358,7361,7363,7366],{"class":1137,"line":2685},[1135,7359,7360],{"class":1145},"sentry_sdk",[1135,7362,1231],{"class":1176},[1135,7364,7365],{"class":1207},"init",[1135,7367,4500],{"class":1176},[1135,7369,7370,7373,7375,7377,7379,7381,7383,7385],{"class":1137,"line":2706},[1135,7371,7372],{"class":1296},"    dsn",[1135,7374,1300],{"class":1176},[1135,7376,4497],{"class":1207},[1135,7378,1211],{"class":1176},[1135,7380,1265],{"class":1264},[1135,7382,5507],{"class":1268},[1135,7384,1265],{"class":1264},[1135,7386,4762],{"class":1176},[1135,7388,7389,7392],{"class":1137,"line":2726},[1135,7390,7391],{"class":1296},"    integrations",[1135,7393,7394],{"class":1176},"=[\n",[1135,7396,7397,7400],{"class":1137,"line":2731},[1135,7398,7399],{"class":1207},"        DjangoIntegration",[1135,7401,4500],{"class":1176},[1135,7403,7404,7407,7409,7411,7414,7416],{"class":1137,"line":2736},[1135,7405,7406],{"class":1296},"            transaction_style",[1135,7408,1300],{"class":1176},[1135,7410,1265],{"class":1264},[1135,7412,7413],{"class":1268},"url",[1135,7415,1265],{"class":1264},[1135,7417,1392],{"class":1176},[1135,7419,7420,7423,7425,7427],{"class":1137,"line":2750},[1135,7421,7422],{"class":1296},"            middleware_spans",[1135,7424,1300],{"class":1176},[1135,7426,2313],{"class":1303},[1135,7428,1392],{"class":1176},[1135,7430,7431,7434,7436,7438],{"class":1137,"line":2771},[1135,7432,7433],{"class":1296},"            signals_spans",[1135,7435,1300],{"class":1176},[1135,7437,2313],{"class":1303},[1135,7439,1392],{"class":1176},[1135,7441,7442],{"class":1137,"line":2776},[1135,7443,7444],{"class":1176},"        ),\n",[1135,7446,7447,7450],{"class":1137,"line":2790},[1135,7448,7449],{"class":1207},"        RedisIntegration",[1135,7451,7452],{"class":1176},"(),\n",[1135,7454,7455],{"class":1137,"line":2804},[1135,7456,7457],{"class":1176},"    ],\n",[1135,7459,7460,7463,7465,7468],{"class":1137,"line":2825},[1135,7461,7462],{"class":1296},"    traces_sample_rate",[1135,7464,1300],{"class":1176},[1135,7466,7467],{"class":2274},"0.1",[1135,7469,1392],{"class":1176},[1135,7471,7472,7475,7477,7479],{"class":1137,"line":2844},[1135,7473,7474],{"class":1296},"    send_default_pii",[1135,7476,1300],{"class":1176},[1135,7478,1304],{"class":1303},[1135,7480,1392],{"class":1176},[1135,7482,7483,7485,7487,7489,7492,7494],{"class":1137,"line":2860},[1135,7484,5642],{"class":1296},[1135,7486,1300],{"class":1176},[1135,7488,1265],{"class":1264},[1135,7490,7491],{"class":1268},"production",[1135,7493,1265],{"class":1264},[1135,7495,1392],{"class":1176},[1135,7497,7498],{"class":1137,"line":2865},[1135,7499,1273],{"class":1176},[1135,7501,7502],{"class":1137,"line":2870},[1135,7503,1187],{"emptyLinePlaceholder":1186},[1135,7505,7507],{"class":1137,"line":7506},131,[1135,7508,7509],{"class":1193},"# Performance optimizations\n",[1135,7511,7513,7516,7518],{"class":1137,"line":7512},132,[1135,7514,7515],{"class":1200},"CONN_MAX_AGE",[1135,7517,1204],{"class":1176},[1135,7519,7520],{"class":2274}," 60\n",[1135,7522,7524,7526,7528],{"class":1137,"line":7523},133,[1135,7525,2044],{"class":1200},[1135,7527,1204],{"class":1176},[1135,7529,2028],{"class":1303},[1135,7531,7533],{"class":1137,"line":7532},134,[1135,7534,1187],{"emptyLinePlaceholder":1186},[1135,7536,7538],{"class":1137,"line":7537},135,[1135,7539,7540],{"class":1193},"# File upload restrictions\n",[1135,7542,7544,7546,7548,7551],{"class":1137,"line":7543},136,[1135,7545,3663],{"class":1200},[1135,7547,1204],{"class":1176},[1135,7549,7550],{"class":2274}," 5242880",[1135,7552,7553],{"class":1193},"  # 5MB\n",[1135,7555,7557,7559,7561,7563],{"class":1137,"line":7556},137,[1135,7558,3676],{"class":1200},[1135,7560,1204],{"class":1176},[1135,7562,7550],{"class":2274},[1135,7564,7553],{"class":1193},[1135,7566,7568,7571,7573],{"class":1137,"line":7567},138,[1135,7569,7570],{"class":1200},"DATA_UPLOAD_MAX_NUMBER_FIELDS",[1135,7572,1204],{"class":1176},[1135,7574,3649],{"class":2274},[1135,7576,7578],{"class":1137,"line":7577},139,[1135,7579,1187],{"emptyLinePlaceholder":1186},[1135,7581,7583],{"class":1137,"line":7582},140,[1135,7584,7585],{"class":1193},"# Admin URL (security through obscurity)\n",[1135,7587,7589,7592,7594,7596,7598,7600,7602,7604,7606,7608,7610,7612,7615,7617],{"class":1137,"line":7588},141,[1135,7590,7591],{"class":1200},"ADMIN_URL",[1135,7593,1204],{"class":1176},[1135,7595,1173],{"class":1207},[1135,7597,1211],{"class":1176},[1135,7599,1265],{"class":1264},[1135,7601,7591],{"class":1268},[1135,7603,1265],{"class":1264},[1135,7605,1177],{"class":1176},[1135,7607,1297],{"class":1296},[1135,7609,1300],{"class":1176},[1135,7611,1265],{"class":1264},[1135,7613,7614],{"class":1268},"admin/",[1135,7616,1265],{"class":1264},[1135,7618,1273],{"class":1176},[1035,7620,7622],{"id":7621},"production-environment-variables","Production Environment Variables",[1026,7624,7625],{},[1042,7626,7627],{},".env.production:",[1108,7629,7631],{"className":3694,"code":7630,"language":3696,"meta":1117,"style":1117},"# Django settings\nSECRET_KEY=super-secure-production-secret-key-change-this\nDEBUG=False\nALLOWED_HOSTS=example.com,www.example.com\n\n# Database\nDATABASE_URL=postgresql://prod_user:secure_password@prod-db:5432/myproject_prod\n\n# Email\nEMAIL_HOST=smtp.sendgrid.net\nEMAIL_PORT=587\nEMAIL_USE_TLS=True\nEMAIL_HOST_USER=apikey\nEMAIL_HOST_PASSWORD=production-sendgrid-api-key\nDEFAULT_FROM_EMAIL=noreply@example.com\n\n# Cache\nREDIS_URL=redis://prod-redis:6379/0\n\n# AWS S3 (media files)\nAWS_ACCESS_KEY_ID=production_access_key\nAWS_SECRET_ACCESS_KEY=production_secret_key\nAWS_STORAGE_BUCKET_NAME=myproject-production-media\nAWS_S3_REGION_NAME=us-east-1\n\n# External services (production)\nSTRIPE_PUBLISHABLE_KEY=pk_live_...\nSTRIPE_SECRET_KEY=sk_live_...\n\n# Monitoring\nSENTRY_DSN=https://production-sentry-dsn@sentry.io/project\n\n# Admin\nADMIN_EMAIL=admin@example.com\nADMIN_URL=secure-admin-url/\n\n# Feature flags (production - conservative)\nFEATURE_NEW_DASHBOARD=False\nFEATURE_BETA_FEATURES=False\n",[1115,7632,7633,7637,7646,7654,7663,7667,7671,7680,7684,7688,7697,7705,7713,7722,7731,7740,7744,7748,7757,7761,7766,7775,7784,7793,7802,7806,7811,7820,7829,7833,7837,7846,7850,7855,7864,7873,7877,7882,7890],{"__ignoreMap":1117},[1135,7634,7635],{"class":1137,"line":1138},[1135,7636,3703],{"class":1193},[1135,7638,7639,7641,7643],{"class":1137,"line":1149},[1135,7640,1255],{"class":3708},[1135,7642,1300],{"class":1176},[1135,7644,7645],{"class":1268},"super-secure-production-secret-key-change-this\n",[1135,7647,7648,7650,7652],{"class":1137,"line":1163},[1135,7649,1279],{"class":3708},[1135,7651,1300],{"class":1176},[1135,7653,5343],{"class":1268},[1135,7655,7656,7658,7660],{"class":1137,"line":1183},[1135,7657,1323],{"class":3708},[1135,7659,1300],{"class":1176},[1135,7661,7662],{"class":1268},"example.com,www.example.com\n",[1135,7664,7665],{"class":1137,"line":1190},[1135,7666,1187],{"emptyLinePlaceholder":1186},[1135,7668,7669],{"class":1137,"line":1197},[1135,7670,2984],{"class":1193},[1135,7672,7673,7675,7677],{"class":1137,"line":1241},[1135,7674,3744],{"class":3708},[1135,7676,1300],{"class":1176},[1135,7678,7679],{"class":1268},"postgresql://prod_user:secure_password@prod-db:5432/myproject_prod\n",[1135,7681,7682],{"class":1137,"line":1246},[1135,7683,1187],{"emptyLinePlaceholder":1186},[1135,7685,7686],{"class":1137,"line":1252},[1135,7687,4816],{"class":1193},[1135,7689,7690,7692,7694],{"class":1137,"line":1276},[1135,7691,2220],{"class":3708},[1135,7693,1300],{"class":1176},[1135,7695,7696],{"class":1268},"smtp.sendgrid.net\n",[1135,7698,7699,7701,7703],{"class":1137,"line":1320},[1135,7700,2253],{"class":3708},[1135,7702,1300],{"class":1176},[1135,7704,5395],{"class":1268},[1135,7706,7707,7709,7711],{"class":1137,"line":1359},[1135,7708,2292],{"class":3708},[1135,7710,1300],{"class":1176},[1135,7712,3722],{"class":1268},[1135,7714,7715,7717,7719],{"class":1137,"line":1364},[1135,7716,2329],{"class":3708},[1135,7718,1300],{"class":1176},[1135,7720,7721],{"class":1268},"apikey\n",[1135,7723,7724,7726,7728],{"class":1137,"line":1370},[1135,7725,2357],{"class":3708},[1135,7727,1300],{"class":1176},[1135,7729,7730],{"class":1268},"production-sendgrid-api-key\n",[1135,7732,7733,7735,7737],{"class":1137,"line":1381},[1135,7734,2385],{"class":3708},[1135,7736,1300],{"class":1176},[1135,7738,7739],{"class":1268},"noreply@example.com\n",[1135,7741,7742],{"class":1137,"line":1395},[1135,7743,1187],{"emptyLinePlaceholder":1186},[1135,7745,7746],{"class":1137,"line":1407},[1135,7747,3799],{"class":1193},[1135,7749,7750,7752,7754],{"class":1137,"line":1419},[1135,7751,3823],{"class":3708},[1135,7753,1300],{"class":1176},[1135,7755,7756],{"class":1268},"redis://prod-redis:6379/0\n",[1135,7758,7759],{"class":1137,"line":1431},[1135,7760,1187],{"emptyLinePlaceholder":1186},[1135,7762,7763],{"class":1137,"line":1443},[1135,7764,7765],{"class":1193},"# AWS S3 (media files)\n",[1135,7767,7768,7770,7772],{"class":1137,"line":1455},[1135,7769,3871],{"class":3708},[1135,7771,1300],{"class":1176},[1135,7773,7774],{"class":1268},"production_access_key\n",[1135,7776,7777,7779,7781],{"class":1137,"line":1461},[1135,7778,3881],{"class":3708},[1135,7780,1300],{"class":1176},[1135,7782,7783],{"class":1268},"production_secret_key\n",[1135,7785,7786,7788,7790],{"class":1137,"line":1466},[1135,7787,5488],{"class":3708},[1135,7789,1300],{"class":1176},[1135,7791,7792],{"class":1268},"myproject-production-media\n",[1135,7794,7795,7797,7799],{"class":1137,"line":1476},[1135,7796,6450],{"class":3708},[1135,7798,1300],{"class":1176},[1135,7800,7801],{"class":1268},"us-east-1\n",[1135,7803,7804],{"class":1137,"line":1488},[1135,7805,1187],{"emptyLinePlaceholder":1186},[1135,7807,7808],{"class":1137,"line":1500},[1135,7809,7810],{"class":1193},"# External services (production)\n",[1135,7812,7813,7815,7817],{"class":1137,"line":1505},[1135,7814,3851],{"class":3708},[1135,7816,1300],{"class":1176},[1135,7818,7819],{"class":1268},"pk_live_...\n",[1135,7821,7822,7824,7826],{"class":1137,"line":1510},[1135,7823,3861],{"class":3708},[1135,7825,1300],{"class":1176},[1135,7827,7828],{"class":1268},"sk_live_...\n",[1135,7830,7831],{"class":1137,"line":1520},[1135,7832,1187],{"emptyLinePlaceholder":1186},[1135,7834,7835],{"class":1137,"line":1532},[1135,7836,5502],{"class":1193},[1135,7838,7839,7841,7843],{"class":1137,"line":1544},[1135,7840,5507],{"class":3708},[1135,7842,1300],{"class":1176},[1135,7844,7845],{"class":1268},"https://production-sentry-dsn@sentry.io/project\n",[1135,7847,7848],{"class":1137,"line":1556},[1135,7849,1187],{"emptyLinePlaceholder":1186},[1135,7851,7852],{"class":1137,"line":1561},[1135,7853,7854],{"class":1193},"# Admin\n",[1135,7856,7857,7859,7861],{"class":1137,"line":1566},[1135,7858,5172],{"class":3708},[1135,7860,1300],{"class":1176},[1135,7862,7863],{"class":1268},"admin@example.com\n",[1135,7865,7866,7868,7870],{"class":1137,"line":1589},[1135,7867,7591],{"class":3708},[1135,7869,1300],{"class":1176},[1135,7871,7872],{"class":1268},"secure-admin-url/\n",[1135,7874,7875],{"class":1137,"line":1594},[1135,7876,1187],{"emptyLinePlaceholder":1186},[1135,7878,7879],{"class":1137,"line":1604},[1135,7880,7881],{"class":1193},"# Feature flags (production - conservative)\n",[1135,7883,7884,7886,7888],{"class":1137,"line":1616},[1135,7885,3899],{"class":3708},[1135,7887,1300],{"class":1176},[1135,7889,5343],{"class":1268},[1135,7891,7892,7894,7896],{"class":1137,"line":1628},[1135,7893,3908],{"class":3708},[1135,7895,1300],{"class":1176},[1135,7897,5343],{"class":1268},[1035,7899,7901],{"id":7900},"production-deployment","Production Deployment",[1026,7903,7904],{},[1042,7905,7906],{},"Docker Compose for Production:",[1108,7908,7910],{"className":5566,"code":7909,"language":5568,"meta":1117,"style":1117},"# docker-compose.production.yml\nversion: '3.8'\n\nservices:\n  web:\n    build: .\n    environment:\n      - DJANGO_SETTINGS_MODULE=config.settings.production\n    env_file:\n      - .env.production\n    depends_on:\n      - db\n      - redis\n    volumes:\n      - ./logs:/var/log/django\n      - ./staticfiles:/app/staticfiles\n    command: gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 4 --worker-class gevent\n    restart: unless-stopped\n\n  db:\n    image: postgres:15\n    environment:\n      POSTGRES_DB: myproject_prod\n      POSTGRES_USER: prod_user\n      POSTGRES_PASSWORD: secure_db_password\n    volumes:\n      - postgres_prod_data:/var/lib/postgresql/data\n    restart: unless-stopped\n\n  redis:\n    image: redis:7-alpine\n    command: redis-server --appendonly yes\n    volumes:\n      - redis_prod_data:/data\n    restart: unless-stopped\n\n  nginx:\n    image: nginx:alpine\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    volumes:\n      - ./deploy/nginx/production.conf:/etc/nginx/conf.d/default.conf\n      - ./deploy/ssl:/etc/nginx/ssl\n      - ./staticfiles:/var/www/static\n    depends_on:\n      - web\n    restart: unless-stopped\n\n  celery:\n    build: .\n    environment:\n      - DJANGO_SETTINGS_MODULE=config.settings.production\n    env_file:\n      - .env.production\n    depends_on:\n      - db\n      - redis\n    command: celery -A config worker -l info\n    restart: unless-stopped\n\n  celery-beat:\n    build: .\n    environment:\n      - DJANGO_SETTINGS_MODULE=config.settings.production\n    env_file:\n      - .env.production\n    depends_on:\n      - db\n      - redis\n    command: celery -A config beat -l info\n    restart: unless-stopped\n\nvolumes:\n  postgres_prod_data:\n  redis_prod_data:\n",[1115,7911,7912,7917,7929,7933,7939,7945,7953,7959,7966,7972,7979,7985,7991,7997,8003,8009,8016,8025,8035,8039,8045,8053,8059,8068,8077,8086,8092,8099,8107,8111,8117,8125,8134,8140,8147,8155,8159,8165,8173,8179,8189,8199,8205,8212,8219,8225,8231,8237,8245,8249,8256,8264,8270,8276,8282,8288,8294,8300,8306,8315,8323,8327,8334,8342,8348,8354,8360,8366,8372,8378,8384,8393,8401,8405,8411,8418],{"__ignoreMap":1117},[1135,7913,7914],{"class":1137,"line":1138},[1135,7915,7916],{"class":1193},"# docker-compose.production.yml\n",[1135,7918,7919,7921,7923,7925,7927],{"class":1137,"line":1149},[1135,7920,2441],{"class":5580},[1135,7922,1777],{"class":1176},[1135,7924,1730],{"class":1264},[1135,7926,5587],{"class":1268},[1135,7928,1736],{"class":1264},[1135,7930,7931],{"class":1137,"line":1163},[1135,7932,1187],{"emptyLinePlaceholder":1186},[1135,7934,7935,7937],{"class":1137,"line":1183},[1135,7936,5598],{"class":5580},[1135,7938,5601],{"class":1176},[1135,7940,7941,7943],{"class":1137,"line":1190},[1135,7942,5606],{"class":5580},[1135,7944,5601],{"class":1176},[1135,7946,7947,7949,7951],{"class":1137,"line":1197},[1135,7948,5613],{"class":5580},[1135,7950,1777],{"class":1176},[1135,7952,5618],{"class":2274},[1135,7954,7955,7957],{"class":1137,"line":1241},[1135,7956,5642],{"class":5580},[1135,7958,5601],{"class":1176},[1135,7960,7961,7963],{"class":1137,"line":1246},[1135,7962,5630],{"class":1176},[1135,7964,7965],{"class":1268}," DJANGO_SETTINGS_MODULE=config.settings.production\n",[1135,7967,7968,7970],{"class":1137,"line":1252},[1135,7969,5656],{"class":5580},[1135,7971,5601],{"class":1176},[1135,7973,7974,7976],{"class":1137,"line":1276},[1135,7975,5630],{"class":1176},[1135,7977,7978],{"class":1268}," .env.production\n",[1135,7980,7981,7983],{"class":1137,"line":1320},[1135,7982,5670],{"class":5580},[1135,7984,5601],{"class":1176},[1135,7986,7987,7989],{"class":1137,"line":1359},[1135,7988,5630],{"class":1176},[1135,7990,5679],{"class":1268},[1135,7992,7993,7995],{"class":1137,"line":1364},[1135,7994,5630],{"class":1176},[1135,7996,5686],{"class":1268},[1135,7998,7999,8001],{"class":1137,"line":1370},[1135,8000,5691],{"class":5580},[1135,8002,5601],{"class":1176},[1135,8004,8005,8007],{"class":1137,"line":1381},[1135,8006,5630],{"class":1176},[1135,8008,5700],{"class":1268},[1135,8010,8011,8013],{"class":1137,"line":1395},[1135,8012,5630],{"class":1176},[1135,8014,8015],{"class":1268}," ./staticfiles:/app/staticfiles\n",[1135,8017,8018,8020,8022],{"class":1137,"line":1407},[1135,8019,5705],{"class":5580},[1135,8021,1777],{"class":1176},[1135,8023,8024],{"class":1268}," gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 4 --worker-class gevent\n",[1135,8026,8027,8030,8032],{"class":1137,"line":1419},[1135,8028,8029],{"class":5580},"    restart",[1135,8031,1777],{"class":1176},[1135,8033,8034],{"class":1268}," unless-stopped\n",[1135,8036,8037],{"class":1137,"line":1431},[1135,8038,1187],{"emptyLinePlaceholder":1186},[1135,8040,8041,8043],{"class":1137,"line":1443},[1135,8042,5719],{"class":5580},[1135,8044,5601],{"class":1176},[1135,8046,8047,8049,8051],{"class":1137,"line":1455},[1135,8048,5726],{"class":5580},[1135,8050,1777],{"class":1176},[1135,8052,5731],{"class":1268},[1135,8054,8055,8057],{"class":1137,"line":1461},[1135,8056,5642],{"class":5580},[1135,8058,5601],{"class":1176},[1135,8060,8061,8063,8065],{"class":1137,"line":1466},[1135,8062,5742],{"class":5580},[1135,8064,1777],{"class":1176},[1135,8066,8067],{"class":1268}," myproject_prod\n",[1135,8069,8070,8072,8074],{"class":1137,"line":1476},[1135,8071,5752],{"class":5580},[1135,8073,1777],{"class":1176},[1135,8075,8076],{"class":1268}," prod_user\n",[1135,8078,8079,8081,8083],{"class":1137,"line":1488},[1135,8080,5762],{"class":5580},[1135,8082,1777],{"class":1176},[1135,8084,8085],{"class":1268}," secure_db_password\n",[1135,8087,8088,8090],{"class":1137,"line":1500},[1135,8089,5691],{"class":5580},[1135,8091,5601],{"class":1176},[1135,8093,8094,8096],{"class":1137,"line":1505},[1135,8095,5630],{"class":1176},[1135,8097,8098],{"class":1268}," postgres_prod_data:/var/lib/postgresql/data\n",[1135,8100,8101,8103,8105],{"class":1137,"line":1510},[1135,8102,8029],{"class":5580},[1135,8104,1777],{"class":1176},[1135,8106,8034],{"class":1268},[1135,8108,8109],{"class":1137,"line":1520},[1135,8110,1187],{"emptyLinePlaceholder":1186},[1135,8112,8113,8115],{"class":1137,"line":1532},[1135,8114,5806],{"class":5580},[1135,8116,5601],{"class":1176},[1135,8118,8119,8121,8123],{"class":1137,"line":1544},[1135,8120,5726],{"class":5580},[1135,8122,1777],{"class":1176},[1135,8124,5817],{"class":1268},[1135,8126,8127,8129,8131],{"class":1137,"line":1556},[1135,8128,5705],{"class":5580},[1135,8130,1777],{"class":1176},[1135,8132,8133],{"class":1268}," redis-server --appendonly yes\n",[1135,8135,8136,8138],{"class":1137,"line":1561},[1135,8137,5691],{"class":5580},[1135,8139,5601],{"class":1176},[1135,8141,8142,8144],{"class":1137,"line":1566},[1135,8143,5630],{"class":1176},[1135,8145,8146],{"class":1268}," redis_prod_data:/data\n",[1135,8148,8149,8151,8153],{"class":1137,"line":1589},[1135,8150,8029],{"class":5580},[1135,8152,1777],{"class":1176},[1135,8154,8034],{"class":1268},[1135,8156,8157],{"class":1137,"line":1594},[1135,8158,1187],{"emptyLinePlaceholder":1186},[1135,8160,8161,8163],{"class":1137,"line":1604},[1135,8162,5843],{"class":5580},[1135,8164,5601],{"class":1176},[1135,8166,8167,8169,8171],{"class":1137,"line":1616},[1135,8168,5726],{"class":5580},[1135,8170,1777],{"class":1176},[1135,8172,5854],{"class":1268},[1135,8174,8175,8177],{"class":1137,"line":1628},[1135,8176,5623],{"class":5580},[1135,8178,5601],{"class":1176},[1135,8180,8181,8183,8185,8187],{"class":1137,"line":1640},[1135,8182,5630],{"class":1176},[1135,8184,3953],{"class":1264},[1135,8186,5869],{"class":1268},[1135,8188,3959],{"class":1264},[1135,8190,8191,8193,8195,8197],{"class":1137,"line":1652},[1135,8192,5630],{"class":1176},[1135,8194,3953],{"class":1264},[1135,8196,5880],{"class":1268},[1135,8198,3959],{"class":1264},[1135,8200,8201,8203],{"class":1137,"line":1664},[1135,8202,5691],{"class":5580},[1135,8204,5601],{"class":1176},[1135,8206,8207,8209],{"class":1137,"line":1676},[1135,8208,5630],{"class":1176},[1135,8210,8211],{"class":1268}," ./deploy/nginx/production.conf:/etc/nginx/conf.d/default.conf\n",[1135,8213,8214,8216],{"class":1137,"line":1688},[1135,8215,5630],{"class":1176},[1135,8217,8218],{"class":1268}," ./deploy/ssl:/etc/nginx/ssl\n",[1135,8220,8221,8223],{"class":1137,"line":1700},[1135,8222,5630],{"class":1176},[1135,8224,5902],{"class":1268},[1135,8226,8227,8229],{"class":1137,"line":1712},[1135,8228,5670],{"class":5580},[1135,8230,5601],{"class":1176},[1135,8232,8233,8235],{"class":1137,"line":1717},[1135,8234,5630],{"class":1176},[1135,8236,5915],{"class":1268},[1135,8238,8239,8241,8243],{"class":1137,"line":1722},[1135,8240,8029],{"class":5580},[1135,8242,1777],{"class":1176},[1135,8244,8034],{"class":1268},[1135,8246,8247],{"class":1137,"line":1739},[1135,8248,1187],{"emptyLinePlaceholder":1186},[1135,8250,8251,8254],{"class":1137,"line":1744},[1135,8252,8253],{"class":5580},"  celery",[1135,8255,5601],{"class":1176},[1135,8257,8258,8260,8262],{"class":1137,"line":1750},[1135,8259,5613],{"class":5580},[1135,8261,1777],{"class":1176},[1135,8263,5618],{"class":2274},[1135,8265,8266,8268],{"class":1137,"line":1760},[1135,8267,5642],{"class":5580},[1135,8269,5601],{"class":1176},[1135,8271,8272,8274],{"class":1137,"line":1766},[1135,8273,5630],{"class":1176},[1135,8275,7965],{"class":1268},[1135,8277,8278,8280],{"class":1137,"line":1789},[1135,8279,5656],{"class":5580},[1135,8281,5601],{"class":1176},[1135,8283,8284,8286],{"class":1137,"line":1819},[1135,8285,5630],{"class":1176},[1135,8287,7978],{"class":1268},[1135,8289,8290,8292],{"class":1137,"line":1836},[1135,8291,5670],{"class":5580},[1135,8293,5601],{"class":1176},[1135,8295,8296,8298],{"class":1137,"line":1851},[1135,8297,5630],{"class":1176},[1135,8299,5679],{"class":1268},[1135,8301,8302,8304],{"class":1137,"line":1866},[1135,8303,5630],{"class":1176},[1135,8305,5686],{"class":1268},[1135,8307,8308,8310,8312],{"class":1137,"line":1879},[1135,8309,5705],{"class":5580},[1135,8311,1777],{"class":1176},[1135,8313,8314],{"class":1268}," celery -A config worker -l info\n",[1135,8316,8317,8319,8321],{"class":1137,"line":1891},[1135,8318,8029],{"class":5580},[1135,8320,1777],{"class":1176},[1135,8322,8034],{"class":1268},[1135,8324,8325],{"class":1137,"line":1903},[1135,8326,1187],{"emptyLinePlaceholder":1186},[1135,8328,8329,8332],{"class":1137,"line":1915},[1135,8330,8331],{"class":5580},"  celery-beat",[1135,8333,5601],{"class":1176},[1135,8335,8336,8338,8340],{"class":1137,"line":1921},[1135,8337,5613],{"class":5580},[1135,8339,1777],{"class":1176},[1135,8341,5618],{"class":2274},[1135,8343,8344,8346],{"class":1137,"line":1927},[1135,8345,5642],{"class":5580},[1135,8347,5601],{"class":1176},[1135,8349,8350,8352],{"class":1137,"line":1933},[1135,8351,5630],{"class":1176},[1135,8353,7965],{"class":1268},[1135,8355,8356,8358],{"class":1137,"line":1938},[1135,8357,5656],{"class":5580},[1135,8359,5601],{"class":1176},[1135,8361,8362,8364],{"class":1137,"line":1943},[1135,8363,5630],{"class":1176},[1135,8365,7978],{"class":1268},[1135,8367,8368,8370],{"class":1137,"line":1949},[1135,8369,5670],{"class":5580},[1135,8371,5601],{"class":1176},[1135,8373,8374,8376],{"class":1137,"line":1964},[1135,8375,5630],{"class":1176},[1135,8377,5679],{"class":1268},[1135,8379,8380,8382],{"class":1137,"line":1979},[1135,8381,5630],{"class":1176},[1135,8383,5686],{"class":1268},[1135,8385,8386,8388,8390],{"class":1137,"line":1984},[1135,8387,5705],{"class":5580},[1135,8389,1777],{"class":1176},[1135,8391,8392],{"class":1268}," celery -A config beat -l info\n",[1135,8394,8395,8397,8399],{"class":1137,"line":1990},[1135,8396,8029],{"class":5580},[1135,8398,1777],{"class":1176},[1135,8400,8034],{"class":1268},[1135,8402,8403],{"class":1137,"line":2005},[1135,8404,1187],{"emptyLinePlaceholder":1186},[1135,8406,8407,8409],{"class":1137,"line":2020},[1135,8408,5924],{"class":5580},[1135,8410,5601],{"class":1176},[1135,8412,8413,8416],{"class":1137,"line":2031},[1135,8414,8415],{"class":5580},"  postgres_prod_data",[1135,8417,5601],{"class":1176},[1135,8419,8420,8423],{"class":1137,"line":2041},[1135,8421,8422],{"class":5580},"  redis_prod_data",[1135,8424,5601],{"class":1176},[1030,8426,8428],{"id":8427},"environment-management-scripts","Environment Management Scripts",[1035,8430,8432],{"id":8431},"environment-switcher","Environment Switcher",[1026,8434,8435],{},[1042,8436,8437],{},"scripts/switch_env.py:",[1108,8439,8441],{"className":1129,"code":8440,"language":1131,"meta":1117,"style":1117},"#!/usr/bin/env python\n\"\"\"\nEnvironment switcher script\nUsage: python scripts/switch_env.py local|staging|production\n\"\"\"\nimport os\nimport sys\nimport shutil\nfrom pathlib import Path\n\ndef switch_environment(env_name):\n    \"\"\"Switch to specified environment.\"\"\"\n    \n    valid_envs = ['local', 'staging', 'production']\n    if env_name not in valid_envs:\n        print(f\"Invalid environment. Choose from: {', '.join(valid_envs)}\")\n        return False\n    \n    # Copy environment file\n    env_file = f'.env.{env_name}'\n    if not os.path.exists(env_file):\n        print(f\"Environment file {env_file} not found\")\n        return False\n    \n    shutil.copy(env_file, '.env')\n    print(f\"✓ Switched to {env_name} environment\")\n    \n    # Update manage.py settings module\n    settings_module = f'config.settings.{env_name}'\n    \n    # Create or update .django_settings file\n    with open('.django_settings', 'w') as f:\n        f.write(settings_module)\n    \n    print(f\"✓ Django settings module: {settings_module}\")\n    \n    # Show current configuration\n    print(\"\\nCurrent configuration:\")\n    print(f\"Environment: {env_name}\")\n    print(f\"Settings module: {settings_module}\")\n    print(f\"Environment file: {env_file}\")\n    \n    return True\n\nif __name__ == '__main__':\n    if len(sys.argv) != 2:\n        print(\"Usage: python scripts/switch_env.py \u003Cenvironment>\")\n        print(\"Environments: local, staging, production\")\n        sys.exit(1)\n    \n    env_name = sys.argv[1]\n    success = switch_environment(env_name)\n    sys.exit(0 if success else 1)\n",[1115,8442,8443,8448,8454,8460,8465,8469,8475,8482,8489,8499,8503,8519,8529,8534,8569,8588,8629,8636,8640,8645,8665,8692,8714,8720,8724,8748,8771,8775,8780,8800,8804,8809,8844,8861,8865,8886,8890,8895,8913,8934,8955,8976,8980,8987,8991,9010,9037,9052,9067,9084,9088,9108,9123],{"__ignoreMap":1117},[1135,8444,8445],{"class":1137,"line":1138},[1135,8446,8447],{"class":1193},"#!/usr/bin/env python\n",[1135,8449,8450],{"class":1137,"line":1149},[1135,8451,8453],{"class":8452},"sm7ve","\"\"\"\n",[1135,8455,8456],{"class":1137,"line":1163},[1135,8457,8459],{"class":8458},"sVyVU","Environment switcher script\n",[1135,8461,8462],{"class":1137,"line":1183},[1135,8463,8464],{"class":8458},"Usage: python scripts/switch_env.py local|staging|production\n",[1135,8466,8467],{"class":1137,"line":1190},[1135,8468,8453],{"class":8452},[1135,8470,8471,8473],{"class":1137,"line":1197},[1135,8472,1142],{"class":1141},[1135,8474,1146],{"class":1145},[1135,8476,8477,8479],{"class":1137,"line":1241},[1135,8478,1142],{"class":1141},[1135,8480,8481],{"class":1145}," sys\n",[1135,8483,8484,8486],{"class":1137,"line":1246},[1135,8485,1142],{"class":1141},[1135,8487,8488],{"class":1145}," shutil\n",[1135,8490,8491,8493,8495,8497],{"class":1137,"line":1252},[1135,8492,1152],{"class":1141},[1135,8494,1155],{"class":1145},[1135,8496,1142],{"class":1141},[1135,8498,1160],{"class":1145},[1135,8500,8501],{"class":1137,"line":1276},[1135,8502,1187],{"emptyLinePlaceholder":1186},[1135,8504,8505,8508,8512,8514,8517],{"class":1137,"line":1320},[1135,8506,8507],{"class":2525},"def",[1135,8509,8511],{"class":8510},"sljsM"," switch_environment",[1135,8513,1211],{"class":1176},[1135,8515,8516],{"class":3251},"env_name",[1135,8518,5271],{"class":1176},[1135,8520,8521,8524,8527],{"class":1137,"line":1359},[1135,8522,8523],{"class":8452},"    \"\"\"",[1135,8525,8526],{"class":8458},"Switch to specified environment.",[1135,8528,8453],{"class":8452},[1135,8530,8531],{"class":1137,"line":1364},[1135,8532,8533],{"class":1145},"    \n",[1135,8535,8536,8539,8541,8543,8545,8548,8550,8552,8554,8557,8559,8561,8563,8565,8567],{"class":1137,"line":1370},[1135,8537,8538],{"class":1145},"    valid_envs ",[1135,8540,1300],{"class":1176},[1135,8542,1801],{"class":1176},[1135,8544,1265],{"class":1264},[1135,8546,8547],{"class":1268},"local",[1135,8549,1265],{"class":1264},[1135,8551,1177],{"class":1176},[1135,8553,1730],{"class":1264},[1135,8555,8556],{"class":1268},"staging",[1135,8558,1265],{"class":1264},[1135,8560,1177],{"class":1176},[1135,8562,1730],{"class":1264},[1135,8564,7491],{"class":1268},[1135,8566,1265],{"class":1264},[1135,8568,1458],{"class":1176},[1135,8570,8571,8574,8577,8580,8583,8586],{"class":1137,"line":1381},[1135,8572,8573],{"class":1141},"    if",[1135,8575,8576],{"class":1145}," env_name ",[1135,8578,8579],{"class":1577},"not",[1135,8581,8582],{"class":1577}," in",[1135,8584,8585],{"class":1145}," valid_envs",[1135,8587,5601],{"class":1176},[1135,8589,8590,8593,8595,8598,8601,8603,8605,8608,8610,8612,8615,8617,8620,8623,8625,8627],{"class":1137,"line":1395},[1135,8591,8592],{"class":3936},"        print",[1135,8594,1211],{"class":1176},[1135,8596,8597],{"class":2525},"f",[1135,8599,8600],{"class":1268},"\"Invalid environment. Choose from: ",[1135,8602,2560],{"class":2512},[1135,8604,1265],{"class":1264},[1135,8606,8607],{"class":1268},", ",[1135,8609,1265],{"class":1264},[1135,8611,1231],{"class":1176},[1135,8613,8614],{"class":1207},"join",[1135,8616,1211],{"class":1176},[1135,8618,8619],{"class":1207},"valid_envs",[1135,8621,8622],{"class":1176},")",[1135,8624,2529],{"class":2512},[1135,8626,3989],{"class":1268},[1135,8628,1273],{"class":1176},[1135,8630,8631,8634],{"class":1137,"line":1407},[1135,8632,8633],{"class":1141},"        return",[1135,8635,6036],{"class":1303},[1135,8637,8638],{"class":1137,"line":1419},[1135,8639,8533],{"class":1145},[1135,8641,8642],{"class":1137,"line":1431},[1135,8643,8644],{"class":1193},"    # Copy environment file\n",[1135,8646,8647,8650,8652,8654,8657,8659,8661,8663],{"class":1137,"line":1443},[1135,8648,8649],{"class":1145},"    env_file ",[1135,8651,1300],{"class":1176},[1135,8653,6487],{"class":2525},[1135,8655,8656],{"class":1268},"'.env.",[1135,8658,2560],{"class":2512},[1135,8660,8516],{"class":1145},[1135,8662,2529],{"class":2512},[1135,8664,1736],{"class":1268},[1135,8666,8667,8669,8672,8675,8677,8680,8682,8685,8687,8690],{"class":1137,"line":1455},[1135,8668,8573],{"class":1141},[1135,8670,8671],{"class":1577}," not",[1135,8673,8674],{"class":1145}," os",[1135,8676,1231],{"class":1176},[1135,8678,8679],{"class":1227},"path",[1135,8681,1231],{"class":1176},[1135,8683,8684],{"class":1207},"exists",[1135,8686,1211],{"class":1176},[1135,8688,8689],{"class":1207},"env_file",[1135,8691,5271],{"class":1176},[1135,8693,8694,8696,8698,8700,8703,8705,8707,8709,8712],{"class":1137,"line":1461},[1135,8695,8592],{"class":3936},[1135,8697,1211],{"class":1176},[1135,8699,8597],{"class":2525},[1135,8701,8702],{"class":1268},"\"Environment file ",[1135,8704,2560],{"class":2512},[1135,8706,8689],{"class":1207},[1135,8708,2529],{"class":2512},[1135,8710,8711],{"class":1268}," not found\"",[1135,8713,1273],{"class":1176},[1135,8715,8716,8718],{"class":1137,"line":1466},[1135,8717,8633],{"class":1141},[1135,8719,6036],{"class":1303},[1135,8721,8722],{"class":1137,"line":1476},[1135,8723,8533],{"class":1145},[1135,8725,8726,8729,8731,8734,8736,8738,8740,8742,8744,8746],{"class":1137,"line":1488},[1135,8727,8728],{"class":1145},"    shutil",[1135,8730,1231],{"class":1176},[1135,8732,8733],{"class":1207},"copy",[1135,8735,1211],{"class":1176},[1135,8737,8689],{"class":1207},[1135,8739,1177],{"class":1176},[1135,8741,1730],{"class":1264},[1135,8743,4135],{"class":1268},[1135,8745,1265],{"class":1264},[1135,8747,1273],{"class":1176},[1135,8749,8750,8753,8755,8757,8760,8762,8764,8766,8769],{"class":1137,"line":1500},[1135,8751,8752],{"class":3936},"    print",[1135,8754,1211],{"class":1176},[1135,8756,8597],{"class":2525},[1135,8758,8759],{"class":1268},"\"✓ Switched to ",[1135,8761,2560],{"class":2512},[1135,8763,8516],{"class":1207},[1135,8765,2529],{"class":2512},[1135,8767,8768],{"class":1268}," environment\"",[1135,8770,1273],{"class":1176},[1135,8772,8773],{"class":1137,"line":1505},[1135,8774,8533],{"class":1145},[1135,8776,8777],{"class":1137,"line":1510},[1135,8778,8779],{"class":1193},"    # Update manage.py settings module\n",[1135,8781,8782,8785,8787,8789,8792,8794,8796,8798],{"class":1137,"line":1520},[1135,8783,8784],{"class":1145},"    settings_module ",[1135,8786,1300],{"class":1176},[1135,8788,6487],{"class":2525},[1135,8790,8791],{"class":1268},"'config.settings.",[1135,8793,2560],{"class":2512},[1135,8795,8516],{"class":1145},[1135,8797,2529],{"class":2512},[1135,8799,1736],{"class":1268},[1135,8801,8802],{"class":1137,"line":1532},[1135,8803,8533],{"class":1145},[1135,8805,8806],{"class":1137,"line":1544},[1135,8807,8808],{"class":1193},"    # Create or update .django_settings file\n",[1135,8810,8811,8814,8817,8819,8821,8824,8826,8828,8830,8833,8835,8837,8840,8842],{"class":1137,"line":1556},[1135,8812,8813],{"class":1141},"    with",[1135,8815,8816],{"class":3936}," open",[1135,8818,1211],{"class":1176},[1135,8820,1265],{"class":1264},[1135,8822,8823],{"class":1268},".django_settings",[1135,8825,1265],{"class":1264},[1135,8827,1177],{"class":1176},[1135,8829,1730],{"class":1264},[1135,8831,8832],{"class":1268},"w",[1135,8834,1265],{"class":1264},[1135,8836,8622],{"class":1176},[1135,8838,8839],{"class":1141}," as",[1135,8841,6487],{"class":1145},[1135,8843,5601],{"class":1176},[1135,8845,8846,8849,8851,8854,8856,8859],{"class":1137,"line":1561},[1135,8847,8848],{"class":1145},"        f",[1135,8850,1231],{"class":1176},[1135,8852,8853],{"class":1207},"write",[1135,8855,1211],{"class":1176},[1135,8857,8858],{"class":1207},"settings_module",[1135,8860,1273],{"class":1176},[1135,8862,8863],{"class":1137,"line":1566},[1135,8864,8533],{"class":1145},[1135,8866,8867,8869,8871,8873,8876,8878,8880,8882,8884],{"class":1137,"line":1589},[1135,8868,8752],{"class":3936},[1135,8870,1211],{"class":1176},[1135,8872,8597],{"class":2525},[1135,8874,8875],{"class":1268},"\"✓ Django settings module: ",[1135,8877,2560],{"class":2512},[1135,8879,8858],{"class":1207},[1135,8881,2529],{"class":2512},[1135,8883,3989],{"class":1268},[1135,8885,1273],{"class":1176},[1135,8887,8888],{"class":1137,"line":1594},[1135,8889,8533],{"class":1145},[1135,8891,8892],{"class":1137,"line":1604},[1135,8893,8894],{"class":1193},"    # Show current configuration\n",[1135,8896,8897,8899,8901,8903,8906,8909,8911],{"class":1137,"line":1616},[1135,8898,8752],{"class":3936},[1135,8900,1211],{"class":1176},[1135,8902,3989],{"class":1264},[1135,8904,8905],{"class":1200},"\\n",[1135,8907,8908],{"class":1268},"Current configuration:",[1135,8910,3989],{"class":1264},[1135,8912,1273],{"class":1176},[1135,8914,8915,8917,8919,8921,8924,8926,8928,8930,8932],{"class":1137,"line":1628},[1135,8916,8752],{"class":3936},[1135,8918,1211],{"class":1176},[1135,8920,8597],{"class":2525},[1135,8922,8923],{"class":1268},"\"Environment: ",[1135,8925,2560],{"class":2512},[1135,8927,8516],{"class":1207},[1135,8929,2529],{"class":2512},[1135,8931,3989],{"class":1268},[1135,8933,1273],{"class":1176},[1135,8935,8936,8938,8940,8942,8945,8947,8949,8951,8953],{"class":1137,"line":1640},[1135,8937,8752],{"class":3936},[1135,8939,1211],{"class":1176},[1135,8941,8597],{"class":2525},[1135,8943,8944],{"class":1268},"\"Settings module: ",[1135,8946,2560],{"class":2512},[1135,8948,8858],{"class":1207},[1135,8950,2529],{"class":2512},[1135,8952,3989],{"class":1268},[1135,8954,1273],{"class":1176},[1135,8956,8957,8959,8961,8963,8966,8968,8970,8972,8974],{"class":1137,"line":1652},[1135,8958,8752],{"class":3936},[1135,8960,1211],{"class":1176},[1135,8962,8597],{"class":2525},[1135,8964,8965],{"class":1268},"\"Environment file: ",[1135,8967,2560],{"class":2512},[1135,8969,8689],{"class":1207},[1135,8971,2529],{"class":2512},[1135,8973,3989],{"class":1268},[1135,8975,1273],{"class":1176},[1135,8977,8978],{"class":1137,"line":1664},[1135,8979,8533],{"class":1145},[1135,8981,8982,8985],{"class":1137,"line":1676},[1135,8983,8984],{"class":1141},"    return",[1135,8986,2028],{"class":1303},[1135,8988,8989],{"class":1137,"line":1688},[1135,8990,1187],{"emptyLinePlaceholder":1186},[1135,8992,8993,8995,8998,9001,9003,9006,9008],{"class":1137,"line":1700},[1135,8994,3973],{"class":1141},[1135,8996,8997],{"class":1214}," __name__",[1135,8999,9000],{"class":1577}," ==",[1135,9002,1730],{"class":1264},[1135,9004,9005],{"class":1268},"__main__",[1135,9007,1265],{"class":1264},[1135,9009,5601],{"class":1176},[1135,9011,9012,9014,9017,9019,9022,9024,9027,9029,9032,9035],{"class":1137,"line":1712},[1135,9013,8573],{"class":1141},[1135,9015,9016],{"class":3936}," len",[1135,9018,1211],{"class":1176},[1135,9020,9021],{"class":1207},"sys",[1135,9023,1231],{"class":1176},[1135,9025,9026],{"class":1227},"argv",[1135,9028,8622],{"class":1176},[1135,9030,9031],{"class":1577}," !=",[1135,9033,9034],{"class":2274}," 2",[1135,9036,5601],{"class":1176},[1135,9038,9039,9041,9043,9045,9048,9050],{"class":1137,"line":1717},[1135,9040,8592],{"class":3936},[1135,9042,1211],{"class":1176},[1135,9044,3989],{"class":1264},[1135,9046,9047],{"class":1268},"Usage: python scripts/switch_env.py \u003Cenvironment>",[1135,9049,3989],{"class":1264},[1135,9051,1273],{"class":1176},[1135,9053,9054,9056,9058,9060,9063,9065],{"class":1137,"line":1722},[1135,9055,8592],{"class":3936},[1135,9057,1211],{"class":1176},[1135,9059,3989],{"class":1264},[1135,9061,9062],{"class":1268},"Environments: local, staging, production",[1135,9064,3989],{"class":1264},[1135,9066,1273],{"class":1176},[1135,9068,9069,9072,9074,9077,9079,9082],{"class":1137,"line":1739},[1135,9070,9071],{"class":1145},"        sys",[1135,9073,1231],{"class":1176},[1135,9075,9076],{"class":1207},"exit",[1135,9078,1211],{"class":1176},[1135,9080,9081],{"class":2274},"1",[1135,9083,1273],{"class":1176},[1135,9085,9086],{"class":1137,"line":1744},[1135,9087,8533],{"class":1145},[1135,9089,9090,9093,9095,9098,9100,9102,9104,9106],{"class":1137,"line":1750},[1135,9091,9092],{"class":1145},"    env_name ",[1135,9094,1300],{"class":1176},[1135,9096,9097],{"class":1145}," sys",[1135,9099,1231],{"class":1176},[1135,9101,9026],{"class":1227},[1135,9103,3504],{"class":1176},[1135,9105,9081],{"class":2274},[1135,9107,1458],{"class":1176},[1135,9109,9110,9113,9115,9117,9119,9121],{"class":1137,"line":1760},[1135,9111,9112],{"class":1145},"    success ",[1135,9114,1300],{"class":1176},[1135,9116,8511],{"class":1207},[1135,9118,1211],{"class":1176},[1135,9120,8516],{"class":1207},[1135,9122,1273],{"class":1176},[1135,9124,9125,9128,9130,9132,9134,9137,9140,9143,9146,9148],{"class":1137,"line":1766},[1135,9126,9127],{"class":1145},"    sys",[1135,9129,1231],{"class":1176},[1135,9131,9076],{"class":1207},[1135,9133,1211],{"class":1176},[1135,9135,9136],{"class":2274},"0",[1135,9138,9139],{"class":1141}," if",[1135,9141,9142],{"class":1207}," success ",[1135,9144,9145],{"class":1141},"else",[1135,9147,2448],{"class":2274},[1135,9149,1273],{"class":1176},[1035,9151,9153],{"id":9152},"environment-validation","Environment Validation",[1026,9155,9156],{},[1042,9157,9158],{},"scripts/validate_env.py:",[1108,9160,9162],{"className":1129,"code":9161,"language":1131,"meta":1117,"style":1117},"#!/usr/bin/env python\n\"\"\"\nEnvironment validation script\n\"\"\"\nimport os\nimport sys\nimport django\nfrom pathlib import Path\n\ndef validate_environment():\n    \"\"\"Validate current environment configuration.\"\"\"\n    \n    # Load Django settings\n    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.local')\n    django.setup()\n    \n    from django.conf import settings\n    from django.core.management import call_command\n    \n    print(\"🔍 Validating environment configuration...\")\n    \n    # Check required settings\n    required_settings = [\n        'SECRET_KEY',\n        'DATABASES',\n        'ALLOWED_HOSTS',\n    ]\n    \n    missing_settings = []\n    for setting in required_settings:\n        if not hasattr(settings, setting):\n            missing_settings.append(setting)\n    \n    if missing_settings:\n        print(f\"❌ Missing required settings: {', '.join(missing_settings)}\")\n        return False\n    \n    # Check database connectivity\n    try:\n        from django.db import connection\n        connection.ensure_connection()\n        print(\"✓ Database connection successful\")\n    except Exception as e:\n        print(f\"❌ Database connection failed: {e}\")\n        return False\n    \n    # Check cache connectivity\n    try:\n        from django.core.cache import cache\n        cache.set('test_key', 'test_value', 30)\n        if cache.get('test_key') == 'test_value':\n            print(\"✓ Cache connection successful\")\n        else:\n            print(\"⚠️ Cache connection issue\")\n    except Exception as e:\n        print(f\"⚠️ Cache connection failed: {e}\")\n    \n    # Run Django system checks\n    try:\n        call_command('check', verbosity=0)\n        print(\"✓ Django system checks passed\")\n    except Exception as e:\n        print(f\"❌ Django system checks failed: {e}\")\n        return False\n    \n    # Environment-specific checks\n    if settings.DEBUG:\n        print(\"⚠️ DEBUG mode is enabled\")\n        if 'production' in os.environ.get('DJANGO_SETTINGS_MODULE', ''):\n            print(\"❌ DEBUG should be False in production\")\n            return False\n    \n    if settings.SECRET_KEY == 'django-insecure-default-key':\n        print(\"❌ Using default SECRET_KEY\")\n        return False\n    \n    print(\"✅ Environment validation passed\")\n    return True\n\nif __name__ == '__main__':\n    success = validate_environment()\n    sys.exit(0 if success else 1)\n",[1115,9163,9164,9168,9172,9177,9181,9187,9193,9200,9210,9214,9224,9233,9237,9242,9277,9290,9294,9312,9333,9337,9352,9356,9361,9370,9380,9390,9400,9405,9409,9418,9434,9456,9473,9477,9486,9522,9528,9532,9537,9544,9561,9573,9588,9603,9625,9631,9635,9640,9646,9666,9700,9732,9748,9755,9770,9782,9803,9807,9812,9818,9843,9858,9870,9891,9897,9901,9906,9920,9935,9972,9987,9994,9998,10019,10034,10040,10044,10059,10065,10069,10085,10095],{"__ignoreMap":1117},[1135,9165,9166],{"class":1137,"line":1138},[1135,9167,8447],{"class":1193},[1135,9169,9170],{"class":1137,"line":1149},[1135,9171,8453],{"class":8452},[1135,9173,9174],{"class":1137,"line":1163},[1135,9175,9176],{"class":8458},"Environment validation script\n",[1135,9178,9179],{"class":1137,"line":1183},[1135,9180,8453],{"class":8452},[1135,9182,9183,9185],{"class":1137,"line":1190},[1135,9184,1142],{"class":1141},[1135,9186,1146],{"class":1145},[1135,9188,9189,9191],{"class":1137,"line":1197},[1135,9190,1142],{"class":1141},[1135,9192,8481],{"class":1145},[1135,9194,9195,9197],{"class":1137,"line":1241},[1135,9196,1142],{"class":1141},[1135,9198,9199],{"class":1145}," django\n",[1135,9201,9202,9204,9206,9208],{"class":1137,"line":1246},[1135,9203,1152],{"class":1141},[1135,9205,1155],{"class":1145},[1135,9207,1142],{"class":1141},[1135,9209,1160],{"class":1145},[1135,9211,9212],{"class":1137,"line":1252},[1135,9213,1187],{"emptyLinePlaceholder":1186},[1135,9215,9216,9218,9221],{"class":1137,"line":1276},[1135,9217,8507],{"class":2525},[1135,9219,9220],{"class":8510}," validate_environment",[1135,9222,9223],{"class":1176},"():\n",[1135,9225,9226,9228,9231],{"class":1137,"line":1320},[1135,9227,8523],{"class":8452},[1135,9229,9230],{"class":8458},"Validate current environment configuration.",[1135,9232,8453],{"class":8452},[1135,9234,9235],{"class":1137,"line":1359},[1135,9236,8533],{"class":1145},[1135,9238,9239],{"class":1137,"line":1364},[1135,9240,9241],{"class":1193},"    # Load Django settings\n",[1135,9243,9244,9247,9249,9252,9254,9257,9259,9261,9264,9266,9268,9270,9273,9275],{"class":1137,"line":1370},[1135,9245,9246],{"class":1145},"    os",[1135,9248,1231],{"class":1176},[1135,9250,9251],{"class":1227},"environ",[1135,9253,1231],{"class":1176},[1135,9255,9256],{"class":1207},"setdefault",[1135,9258,1211],{"class":1176},[1135,9260,1265],{"class":1264},[1135,9262,9263],{"class":1268},"DJANGO_SETTINGS_MODULE",[1135,9265,1265],{"class":1264},[1135,9267,1177],{"class":1176},[1135,9269,1730],{"class":1264},[1135,9271,9272],{"class":1268},"config.settings.local",[1135,9274,1265],{"class":1264},[1135,9276,1273],{"class":1176},[1135,9278,9279,9282,9284,9287],{"class":1137,"line":1381},[1135,9280,9281],{"class":1145},"    django",[1135,9283,1231],{"class":1176},[1135,9285,9286],{"class":1207},"setup",[1135,9288,9289],{"class":1176},"()\n",[1135,9291,9292],{"class":1137,"line":1395},[1135,9293,8533],{"class":1145},[1135,9295,9296,9299,9302,9304,9307,9309],{"class":1137,"line":1407},[1135,9297,9298],{"class":1141},"    from",[1135,9300,9301],{"class":1145}," django",[1135,9303,1231],{"class":1176},[1135,9305,9306],{"class":1145},"conf ",[1135,9308,1142],{"class":1141},[1135,9310,9311],{"class":1145}," settings\n",[1135,9313,9314,9316,9318,9320,9323,9325,9328,9330],{"class":1137,"line":1419},[1135,9315,9298],{"class":1141},[1135,9317,9301],{"class":1145},[1135,9319,1231],{"class":1176},[1135,9321,9322],{"class":1145},"core",[1135,9324,1231],{"class":1176},[1135,9326,9327],{"class":1145},"management ",[1135,9329,1142],{"class":1141},[1135,9331,9332],{"class":1145}," call_command\n",[1135,9334,9335],{"class":1137,"line":1431},[1135,9336,8533],{"class":1145},[1135,9338,9339,9341,9343,9345,9348,9350],{"class":1137,"line":1443},[1135,9340,8752],{"class":3936},[1135,9342,1211],{"class":1176},[1135,9344,3989],{"class":1264},[1135,9346,9347],{"class":1268},"🔍 Validating environment configuration...",[1135,9349,3989],{"class":1264},[1135,9351,1273],{"class":1176},[1135,9353,9354],{"class":1137,"line":1455},[1135,9355,8533],{"class":1145},[1135,9357,9358],{"class":1137,"line":1461},[1135,9359,9360],{"class":1193},"    # Check required settings\n",[1135,9362,9363,9366,9368],{"class":1137,"line":1466},[1135,9364,9365],{"class":1145},"    required_settings ",[1135,9367,1300],{"class":1176},[1135,9369,1378],{"class":1176},[1135,9371,9372,9374,9376,9378],{"class":1137,"line":1476},[1135,9373,1769],{"class":1264},[1135,9375,1255],{"class":1268},[1135,9377,1265],{"class":1264},[1135,9379,1392],{"class":1176},[1135,9381,9382,9384,9386,9388],{"class":1137,"line":1488},[1135,9383,1769],{"class":1264},[1135,9385,2989],{"class":1268},[1135,9387,1265],{"class":1264},[1135,9389,1392],{"class":1176},[1135,9391,9392,9394,9396,9398],{"class":1137,"line":1500},[1135,9393,1769],{"class":1264},[1135,9395,1323],{"class":1268},[1135,9397,1265],{"class":1264},[1135,9399,1392],{"class":1176},[1135,9401,9402],{"class":1137,"line":1505},[1135,9403,9404],{"class":1176},"    ]\n",[1135,9406,9407],{"class":1137,"line":1510},[1135,9408,8533],{"class":1145},[1135,9410,9411,9414,9416],{"class":1137,"line":1520},[1135,9412,9413],{"class":1145},"    missing_settings ",[1135,9415,1300],{"class":1176},[1135,9417,6228],{"class":1176},[1135,9419,9420,9423,9426,9429,9432],{"class":1137,"line":1532},[1135,9421,9422],{"class":1141},"    for",[1135,9424,9425],{"class":1145}," setting ",[1135,9427,9428],{"class":1141},"in",[1135,9430,9431],{"class":1145}," required_settings",[1135,9433,5601],{"class":1176},[1135,9435,9436,9439,9441,9444,9446,9449,9451,9454],{"class":1137,"line":1544},[1135,9437,9438],{"class":1141},"        if",[1135,9440,8671],{"class":1577},[1135,9442,9443],{"class":3936}," hasattr",[1135,9445,1211],{"class":1176},[1135,9447,9448],{"class":1207},"settings",[1135,9450,1177],{"class":1176},[1135,9452,9453],{"class":1207}," setting",[1135,9455,5271],{"class":1176},[1135,9457,9458,9461,9463,9466,9468,9471],{"class":1137,"line":1556},[1135,9459,9460],{"class":1145},"            missing_settings",[1135,9462,1231],{"class":1176},[1135,9464,9465],{"class":1207},"append",[1135,9467,1211],{"class":1176},[1135,9469,9470],{"class":1207},"setting",[1135,9472,1273],{"class":1176},[1135,9474,9475],{"class":1137,"line":1561},[1135,9476,8533],{"class":1145},[1135,9478,9479,9481,9484],{"class":1137,"line":1566},[1135,9480,8573],{"class":1141},[1135,9482,9483],{"class":1145}," missing_settings",[1135,9485,5601],{"class":1176},[1135,9487,9488,9490,9492,9494,9497,9499,9501,9503,9505,9507,9509,9511,9514,9516,9518,9520],{"class":1137,"line":1589},[1135,9489,8592],{"class":3936},[1135,9491,1211],{"class":1176},[1135,9493,8597],{"class":2525},[1135,9495,9496],{"class":1268},"\"❌ Missing required settings: ",[1135,9498,2560],{"class":2512},[1135,9500,1265],{"class":1264},[1135,9502,8607],{"class":1268},[1135,9504,1265],{"class":1264},[1135,9506,1231],{"class":1176},[1135,9508,8614],{"class":1207},[1135,9510,1211],{"class":1176},[1135,9512,9513],{"class":1207},"missing_settings",[1135,9515,8622],{"class":1176},[1135,9517,2529],{"class":2512},[1135,9519,3989],{"class":1268},[1135,9521,1273],{"class":1176},[1135,9523,9524,9526],{"class":1137,"line":1594},[1135,9525,8633],{"class":1141},[1135,9527,6036],{"class":1303},[1135,9529,9530],{"class":1137,"line":1604},[1135,9531,8533],{"class":1145},[1135,9533,9534],{"class":1137,"line":1616},[1135,9535,9536],{"class":1193},"    # Check database connectivity\n",[1135,9538,9539,9542],{"class":1137,"line":1628},[1135,9540,9541],{"class":1141},"    try",[1135,9543,5601],{"class":1176},[1135,9545,9546,9549,9551,9553,9556,9558],{"class":1137,"line":1640},[1135,9547,9548],{"class":1141},"        from",[1135,9550,9301],{"class":1145},[1135,9552,1231],{"class":1176},[1135,9554,9555],{"class":1145},"db ",[1135,9557,1142],{"class":1141},[1135,9559,9560],{"class":1145}," connection\n",[1135,9562,9563,9566,9568,9571],{"class":1137,"line":1652},[1135,9564,9565],{"class":1145},"        connection",[1135,9567,1231],{"class":1176},[1135,9569,9570],{"class":1207},"ensure_connection",[1135,9572,9289],{"class":1176},[1135,9574,9575,9577,9579,9581,9584,9586],{"class":1137,"line":1664},[1135,9576,8592],{"class":3936},[1135,9578,1211],{"class":1176},[1135,9580,3989],{"class":1264},[1135,9582,9583],{"class":1268},"✓ Database connection successful",[1135,9585,3989],{"class":1264},[1135,9587,1273],{"class":1176},[1135,9589,9590,9593,9596,9598,9601],{"class":1137,"line":1676},[1135,9591,9592],{"class":1141},"    except",[1135,9594,9595],{"class":1314}," Exception",[1135,9597,8839],{"class":1141},[1135,9599,9600],{"class":1145}," e",[1135,9602,5601],{"class":1176},[1135,9604,9605,9607,9609,9611,9614,9616,9619,9621,9623],{"class":1137,"line":1688},[1135,9606,8592],{"class":3936},[1135,9608,1211],{"class":1176},[1135,9610,8597],{"class":2525},[1135,9612,9613],{"class":1268},"\"❌ Database connection failed: ",[1135,9615,2560],{"class":2512},[1135,9617,9618],{"class":1207},"e",[1135,9620,2529],{"class":2512},[1135,9622,3989],{"class":1268},[1135,9624,1273],{"class":1176},[1135,9626,9627,9629],{"class":1137,"line":1700},[1135,9628,8633],{"class":1141},[1135,9630,6036],{"class":1303},[1135,9632,9633],{"class":1137,"line":1712},[1135,9634,8533],{"class":1145},[1135,9636,9637],{"class":1137,"line":1717},[1135,9638,9639],{"class":1193},"    # Check cache connectivity\n",[1135,9641,9642,9644],{"class":1137,"line":1722},[1135,9643,9541],{"class":1141},[1135,9645,5601],{"class":1176},[1135,9647,9648,9650,9652,9654,9656,9658,9661,9663],{"class":1137,"line":1739},[1135,9649,9548],{"class":1141},[1135,9651,9301],{"class":1145},[1135,9653,1231],{"class":1176},[1135,9655,9322],{"class":1145},[1135,9657,1231],{"class":1176},[1135,9659,9660],{"class":1145},"cache ",[1135,9662,1142],{"class":1141},[1135,9664,9665],{"class":1145}," cache\n",[1135,9667,9668,9671,9673,9675,9677,9679,9682,9684,9686,9688,9691,9693,9695,9698],{"class":1137,"line":1744},[1135,9669,9670],{"class":1145},"        cache",[1135,9672,1231],{"class":1176},[1135,9674,3937],{"class":1207},[1135,9676,1211],{"class":1176},[1135,9678,1265],{"class":1264},[1135,9680,9681],{"class":1268},"test_key",[1135,9683,1265],{"class":1264},[1135,9685,1177],{"class":1176},[1135,9687,1730],{"class":1264},[1135,9689,9690],{"class":1268},"test_value",[1135,9692,1265],{"class":1264},[1135,9694,1177],{"class":1176},[1135,9696,9697],{"class":2274}," 30",[1135,9699,1273],{"class":1176},[1135,9701,9702,9704,9707,9709,9712,9714,9716,9718,9720,9722,9724,9726,9728,9730],{"class":1137,"line":1750},[1135,9703,9438],{"class":1141},[1135,9705,9706],{"class":1145}," cache",[1135,9708,1231],{"class":1176},[1135,9710,9711],{"class":1207},"get",[1135,9713,1211],{"class":1176},[1135,9715,1265],{"class":1264},[1135,9717,9681],{"class":1268},[1135,9719,1265],{"class":1264},[1135,9721,8622],{"class":1176},[1135,9723,9000],{"class":1577},[1135,9725,1730],{"class":1264},[1135,9727,9690],{"class":1268},[1135,9729,1265],{"class":1264},[1135,9731,5601],{"class":1176},[1135,9733,9734,9737,9739,9741,9744,9746],{"class":1137,"line":1760},[1135,9735,9736],{"class":3936},"            print",[1135,9738,1211],{"class":1176},[1135,9740,3989],{"class":1264},[1135,9742,9743],{"class":1268},"✓ Cache connection successful",[1135,9745,3989],{"class":1264},[1135,9747,1273],{"class":1176},[1135,9749,9750,9753],{"class":1137,"line":1766},[1135,9751,9752],{"class":1141},"        else",[1135,9754,5601],{"class":1176},[1135,9756,9757,9759,9761,9763,9766,9768],{"class":1137,"line":1789},[1135,9758,9736],{"class":3936},[1135,9760,1211],{"class":1176},[1135,9762,3989],{"class":1264},[1135,9764,9765],{"class":1268},"⚠️ Cache connection issue",[1135,9767,3989],{"class":1264},[1135,9769,1273],{"class":1176},[1135,9771,9772,9774,9776,9778,9780],{"class":1137,"line":1819},[1135,9773,9592],{"class":1141},[1135,9775,9595],{"class":1314},[1135,9777,8839],{"class":1141},[1135,9779,9600],{"class":1145},[1135,9781,5601],{"class":1176},[1135,9783,9784,9786,9788,9790,9793,9795,9797,9799,9801],{"class":1137,"line":1836},[1135,9785,8592],{"class":3936},[1135,9787,1211],{"class":1176},[1135,9789,8597],{"class":2525},[1135,9791,9792],{"class":1268},"\"⚠️ Cache connection failed: ",[1135,9794,2560],{"class":2512},[1135,9796,9618],{"class":1207},[1135,9798,2529],{"class":2512},[1135,9800,3989],{"class":1268},[1135,9802,1273],{"class":1176},[1135,9804,9805],{"class":1137,"line":1851},[1135,9806,8533],{"class":1145},[1135,9808,9809],{"class":1137,"line":1866},[1135,9810,9811],{"class":1193},"    # Run Django system checks\n",[1135,9813,9814,9816],{"class":1137,"line":1879},[1135,9815,9541],{"class":1141},[1135,9817,5601],{"class":1176},[1135,9819,9820,9823,9825,9827,9830,9832,9834,9837,9839,9841],{"class":1137,"line":1891},[1135,9821,9822],{"class":1207},"        call_command",[1135,9824,1211],{"class":1176},[1135,9826,1265],{"class":1264},[1135,9828,9829],{"class":1268},"check",[1135,9831,1265],{"class":1264},[1135,9833,1177],{"class":1176},[1135,9835,9836],{"class":1296}," verbosity",[1135,9838,1300],{"class":1176},[1135,9840,9136],{"class":2274},[1135,9842,1273],{"class":1176},[1135,9844,9845,9847,9849,9851,9854,9856],{"class":1137,"line":1903},[1135,9846,8592],{"class":3936},[1135,9848,1211],{"class":1176},[1135,9850,3989],{"class":1264},[1135,9852,9853],{"class":1268},"✓ Django system checks passed",[1135,9855,3989],{"class":1264},[1135,9857,1273],{"class":1176},[1135,9859,9860,9862,9864,9866,9868],{"class":1137,"line":1915},[1135,9861,9592],{"class":1141},[1135,9863,9595],{"class":1314},[1135,9865,8839],{"class":1141},[1135,9867,9600],{"class":1145},[1135,9869,5601],{"class":1176},[1135,9871,9872,9874,9876,9878,9881,9883,9885,9887,9889],{"class":1137,"line":1921},[1135,9873,8592],{"class":3936},[1135,9875,1211],{"class":1176},[1135,9877,8597],{"class":2525},[1135,9879,9880],{"class":1268},"\"❌ Django system checks failed: ",[1135,9882,2560],{"class":2512},[1135,9884,9618],{"class":1207},[1135,9886,2529],{"class":2512},[1135,9888,3989],{"class":1268},[1135,9890,1273],{"class":1176},[1135,9892,9893,9895],{"class":1137,"line":1927},[1135,9894,8633],{"class":1141},[1135,9896,6036],{"class":1303},[1135,9898,9899],{"class":1137,"line":1933},[1135,9900,8533],{"class":1145},[1135,9902,9903],{"class":1137,"line":1938},[1135,9904,9905],{"class":1193},"    # Environment-specific checks\n",[1135,9907,9908,9910,9913,9915,9918],{"class":1137,"line":1943},[1135,9909,8573],{"class":1141},[1135,9911,9912],{"class":1145}," settings",[1135,9914,1231],{"class":1176},[1135,9916,1279],{"class":9917},"sFGJz",[1135,9919,5601],{"class":1176},[1135,9921,9922,9924,9926,9928,9931,9933],{"class":1137,"line":1949},[1135,9923,8592],{"class":3936},[1135,9925,1211],{"class":1176},[1135,9927,3989],{"class":1264},[1135,9929,9930],{"class":1268},"⚠️ DEBUG mode is enabled",[1135,9932,3989],{"class":1264},[1135,9934,1273],{"class":1176},[1135,9936,9937,9939,9941,9943,9945,9947,9949,9951,9953,9955,9957,9959,9961,9963,9965,9967,9970],{"class":1137,"line":1964},[1135,9938,9438],{"class":1141},[1135,9940,1730],{"class":1264},[1135,9942,7491],{"class":1268},[1135,9944,1265],{"class":1264},[1135,9946,8582],{"class":1577},[1135,9948,8674],{"class":1145},[1135,9950,1231],{"class":1176},[1135,9952,9251],{"class":1227},[1135,9954,1231],{"class":1176},[1135,9956,9711],{"class":1207},[1135,9958,1211],{"class":1176},[1135,9960,1265],{"class":1264},[1135,9962,9263],{"class":1268},[1135,9964,1265],{"class":1264},[1135,9966,1177],{"class":1176},[1135,9968,9969],{"class":1264}," ''",[1135,9971,5271],{"class":1176},[1135,9973,9974,9976,9978,9980,9983,9985],{"class":1137,"line":1979},[1135,9975,9736],{"class":3936},[1135,9977,1211],{"class":1176},[1135,9979,3989],{"class":1264},[1135,9981,9982],{"class":1268},"❌ DEBUG should be False in production",[1135,9984,3989],{"class":1264},[1135,9986,1273],{"class":1176},[1135,9988,9989,9992],{"class":1137,"line":1984},[1135,9990,9991],{"class":1141},"            return",[1135,9993,6036],{"class":1303},[1135,9995,9996],{"class":1137,"line":1990},[1135,9997,8533],{"class":1145},[1135,9999,10000,10002,10004,10006,10008,10010,10012,10015,10017],{"class":1137,"line":2005},[1135,10001,8573],{"class":1141},[1135,10003,9912],{"class":1145},[1135,10005,1231],{"class":1176},[1135,10007,1255],{"class":9917},[1135,10009,9000],{"class":1577},[1135,10011,1730],{"class":1264},[1135,10013,10014],{"class":1268},"django-insecure-default-key",[1135,10016,1265],{"class":1264},[1135,10018,5601],{"class":1176},[1135,10020,10021,10023,10025,10027,10030,10032],{"class":1137,"line":2020},[1135,10022,8592],{"class":3936},[1135,10024,1211],{"class":1176},[1135,10026,3989],{"class":1264},[1135,10028,10029],{"class":1268},"❌ Using default SECRET_KEY",[1135,10031,3989],{"class":1264},[1135,10033,1273],{"class":1176},[1135,10035,10036,10038],{"class":1137,"line":2031},[1135,10037,8633],{"class":1141},[1135,10039,6036],{"class":1303},[1135,10041,10042],{"class":1137,"line":2041},[1135,10043,8533],{"class":1145},[1135,10045,10046,10048,10050,10052,10055,10057],{"class":1137,"line":2051},[1135,10047,8752],{"class":3936},[1135,10049,1211],{"class":1176},[1135,10051,3989],{"class":1264},[1135,10053,10054],{"class":1268},"✅ Environment validation passed",[1135,10056,3989],{"class":1264},[1135,10058,1273],{"class":1176},[1135,10060,10061,10063],{"class":1137,"line":2056},[1135,10062,8984],{"class":1141},[1135,10064,2028],{"class":1303},[1135,10066,10067],{"class":1137,"line":2062},[1135,10068,1187],{"emptyLinePlaceholder":1186},[1135,10070,10071,10073,10075,10077,10079,10081,10083],{"class":1137,"line":2077},[1135,10072,3973],{"class":1141},[1135,10074,8997],{"class":1214},[1135,10076,9000],{"class":1577},[1135,10078,1730],{"class":1264},[1135,10080,9005],{"class":1268},[1135,10082,1265],{"class":1264},[1135,10084,5601],{"class":1176},[1135,10086,10087,10089,10091,10093],{"class":1137,"line":2097},[1135,10088,9112],{"class":1145},[1135,10090,1300],{"class":1176},[1135,10092,9220],{"class":1207},[1135,10094,9289],{"class":1176},[1135,10096,10097,10099,10101,10103,10105,10107,10109,10111,10113,10115],{"class":1137,"line":2120},[1135,10098,9127],{"class":1145},[1135,10100,1231],{"class":1176},[1135,10102,9076],{"class":1207},[1135,10104,1211],{"class":1176},[1135,10106,9136],{"class":2274},[1135,10108,9139],{"class":1141},[1135,10110,9142],{"class":1207},[1135,10112,9145],{"class":1141},[1135,10114,2448],{"class":2274},[1135,10116,1273],{"class":1176},[1030,10118,10120],{"id":10119},"deployment-strategies","Deployment Strategies",[1035,10122,10124],{"id":10123},"blue-green-deployment","Blue-Green Deployment",[1026,10126,10127],{},[1042,10128,10129],{},"scripts/blue_green_deploy.sh:",[1108,10131,10133],{"className":3694,"code":10132,"language":3696,"meta":1117,"style":1117},"#!/bin/bash\nset -e\n\nENVIRONMENT=${1:-staging}\nNEW_VERSION=${2:-latest}\n\necho \"🚀 Starting blue-green deployment for $ENVIRONMENT\"\n\n# Build new version\necho \"📦 Building new version...\"\ndocker build -t myproject:$NEW_VERSION .\n\n# Deploy to green environment\necho \"🟢 Deploying to green environment...\"\ndocker-compose -f docker-compose.$ENVIRONMENT.yml -p myproject-green up -d\n\n# Health check\necho \"🏥 Running health checks...\"\nsleep 30\nif curl -f http://localhost:8001/health/; then\n    echo \"✅ Health check passed\"\nelse\n    echo \"❌ Health check failed\"\n    docker-compose -f docker-compose.$ENVIRONMENT.yml -p myproject-green down\n    exit 1\nfi\n\n# Switch traffic\necho \"🔄 Switching traffic...\"\n# Update load balancer configuration\n# This would be specific to your load balancer (nginx, HAProxy, etc.)\n\n# Stop old version\necho \"🔴 Stopping blue environment...\"\ndocker-compose -f docker-compose.$ENVIRONMENT.yml -p myproject-blue down\n\necho \"✅ Blue-green deployment completed successfully\"\n",[1115,10134,10135,10139,10145,10149,10166,10183,10187,10202,10206,10211,10222,10241,10245,10250,10261,10287,10291,10296,10307,10315,10332,10343,10348,10359,10379,10387,10391,10395,10400,10411,10416,10421,10425,10430,10441,10460,10464],{"__ignoreMap":1117},[1135,10136,10137],{"class":1137,"line":1138},[1135,10138,3931],{"class":1193},[1135,10140,10141,10143],{"class":1137,"line":1149},[1135,10142,3937],{"class":3936},[1135,10144,3941],{"class":3940},[1135,10146,10147],{"class":1137,"line":1163},[1135,10148,1187],{"emptyLinePlaceholder":1186},[1135,10150,10151,10154,10156,10159,10162,10164],{"class":1137,"line":1183},[1135,10152,10153],{"class":3708},"ENVIRONMENT",[1135,10155,1300],{"class":1176},[1135,10157,10158],{"class":1296},"${1",[1135,10160,10161],{"class":1577},":-",[1135,10163,8556],{"class":3708},[1135,10165,2873],{"class":1296},[1135,10167,10168,10171,10173,10176,10178,10181],{"class":1137,"line":1190},[1135,10169,10170],{"class":3708},"NEW_VERSION",[1135,10172,1300],{"class":1176},[1135,10174,10175],{"class":1296},"${2",[1135,10177,10161],{"class":1577},[1135,10179,10180],{"class":3708},"latest",[1135,10182,2873],{"class":1296},[1135,10184,10185],{"class":1137,"line":1197},[1135,10186,1187],{"emptyLinePlaceholder":1186},[1135,10188,10189,10191,10193,10196,10200],{"class":1137,"line":1241},[1135,10190,3950],{"class":3936},[1135,10192,3953],{"class":1264},[1135,10194,10195],{"class":1268},"🚀 Starting blue-green deployment for ",[1135,10197,10199],{"class":10198},"su_V2","$ENVIRONMENT",[1135,10201,3959],{"class":1264},[1135,10203,10204],{"class":1137,"line":1246},[1135,10205,1187],{"emptyLinePlaceholder":1186},[1135,10207,10208],{"class":1137,"line":1252},[1135,10209,10210],{"class":1193},"# Build new version\n",[1135,10212,10213,10215,10217,10220],{"class":1137,"line":1276},[1135,10214,3950],{"class":3936},[1135,10216,3953],{"class":1264},[1135,10218,10219],{"class":1268},"📦 Building new version...",[1135,10221,3959],{"class":1264},[1135,10223,10224,10227,10230,10233,10236,10239],{"class":1137,"line":1320},[1135,10225,10226],{"class":4012},"docker",[1135,10228,10229],{"class":1268}," build",[1135,10231,10232],{"class":3940}," -t",[1135,10234,10235],{"class":1268}," myproject:",[1135,10237,10238],{"class":3708},"$NEW_VERSION",[1135,10240,5618],{"class":1268},[1135,10242,10243],{"class":1137,"line":1359},[1135,10244,1187],{"emptyLinePlaceholder":1186},[1135,10246,10247],{"class":1137,"line":1364},[1135,10248,10249],{"class":1193},"# Deploy to green environment\n",[1135,10251,10252,10254,10256,10259],{"class":1137,"line":1370},[1135,10253,3950],{"class":3936},[1135,10255,3953],{"class":1264},[1135,10257,10258],{"class":1268},"🟢 Deploying to green environment...",[1135,10260,3959],{"class":1264},[1135,10262,10263,10266,10268,10271,10273,10276,10278,10281,10284],{"class":1137,"line":1381},[1135,10264,10265],{"class":4012},"docker-compose",[1135,10267,4130],{"class":3940},[1135,10269,10270],{"class":1268}," docker-compose.",[1135,10272,10199],{"class":3708},[1135,10274,10275],{"class":1268},".yml",[1135,10277,4184],{"class":3940},[1135,10279,10280],{"class":1268}," myproject-green",[1135,10282,10283],{"class":1268}," up",[1135,10285,10286],{"class":3940}," -d\n",[1135,10288,10289],{"class":1137,"line":1395},[1135,10290,1187],{"emptyLinePlaceholder":1186},[1135,10292,10293],{"class":1137,"line":1407},[1135,10294,10295],{"class":1193},"# Health check\n",[1135,10297,10298,10300,10302,10305],{"class":1137,"line":1419},[1135,10299,3950],{"class":3936},[1135,10301,3953],{"class":1264},[1135,10303,10304],{"class":1268},"🏥 Running health checks...",[1135,10306,3959],{"class":1264},[1135,10308,10309,10312],{"class":1137,"line":1431},[1135,10310,10311],{"class":4012},"sleep",[1135,10313,10314],{"class":2274}," 30\n",[1135,10316,10317,10319,10322,10324,10327,10330],{"class":1137,"line":1443},[1135,10318,3973],{"class":1141},[1135,10320,10321],{"class":4012}," curl",[1135,10323,4130],{"class":3940},[1135,10325,10326],{"class":1268}," http://localhost:8001/health/",[1135,10328,10329],{"class":1176},";",[1135,10331,3995],{"class":1141},[1135,10333,10334,10336,10338,10341],{"class":1137,"line":1455},[1135,10335,4000],{"class":3936},[1135,10337,3953],{"class":1264},[1135,10339,10340],{"class":1268},"✅ Health check passed",[1135,10342,3959],{"class":1264},[1135,10344,10345],{"class":1137,"line":1461},[1135,10346,10347],{"class":1141},"else\n",[1135,10349,10350,10352,10354,10357],{"class":1137,"line":1466},[1135,10351,4000],{"class":3936},[1135,10353,3953],{"class":1264},[1135,10355,10356],{"class":1268},"❌ Health check failed",[1135,10358,3959],{"class":1264},[1135,10360,10361,10364,10366,10368,10370,10372,10374,10376],{"class":1137,"line":1476},[1135,10362,10363],{"class":4012},"    docker-compose",[1135,10365,4130],{"class":3940},[1135,10367,10270],{"class":1268},[1135,10369,10199],{"class":3708},[1135,10371,10275],{"class":1268},[1135,10373,4184],{"class":3940},[1135,10375,10280],{"class":1268},[1135,10377,10378],{"class":1268}," down\n",[1135,10380,10381,10384],{"class":1137,"line":1488},[1135,10382,10383],{"class":3936},"    exit",[1135,10385,10386],{"class":2274}," 1\n",[1135,10388,10389],{"class":1137,"line":1500},[1135,10390,4027],{"class":1141},[1135,10392,10393],{"class":1137,"line":1505},[1135,10394,1187],{"emptyLinePlaceholder":1186},[1135,10396,10397],{"class":1137,"line":1510},[1135,10398,10399],{"class":1193},"# Switch traffic\n",[1135,10401,10402,10404,10406,10409],{"class":1137,"line":1520},[1135,10403,3950],{"class":3936},[1135,10405,3953],{"class":1264},[1135,10407,10408],{"class":1268},"🔄 Switching traffic...",[1135,10410,3959],{"class":1264},[1135,10412,10413],{"class":1137,"line":1532},[1135,10414,10415],{"class":1193},"# Update load balancer configuration\n",[1135,10417,10418],{"class":1137,"line":1544},[1135,10419,10420],{"class":1193},"# This would be specific to your load balancer (nginx, HAProxy, etc.)\n",[1135,10422,10423],{"class":1137,"line":1556},[1135,10424,1187],{"emptyLinePlaceholder":1186},[1135,10426,10427],{"class":1137,"line":1561},[1135,10428,10429],{"class":1193},"# Stop old version\n",[1135,10431,10432,10434,10436,10439],{"class":1137,"line":1566},[1135,10433,3950],{"class":3936},[1135,10435,3953],{"class":1264},[1135,10437,10438],{"class":1268},"🔴 Stopping blue environment...",[1135,10440,3959],{"class":1264},[1135,10442,10443,10445,10447,10449,10451,10453,10455,10458],{"class":1137,"line":1589},[1135,10444,10265],{"class":4012},[1135,10446,4130],{"class":3940},[1135,10448,10270],{"class":1268},[1135,10450,10199],{"class":3708},[1135,10452,10275],{"class":1268},[1135,10454,4184],{"class":3940},[1135,10456,10457],{"class":1268}," myproject-blue",[1135,10459,10378],{"class":1268},[1135,10461,10462],{"class":1137,"line":1594},[1135,10463,1187],{"emptyLinePlaceholder":1186},[1135,10465,10466,10468,10470,10473],{"class":1137,"line":1604},[1135,10467,3950],{"class":3936},[1135,10469,3953],{"class":1264},[1135,10471,10472],{"class":1268},"✅ Blue-green deployment completed successfully",[1135,10474,3959],{"class":1264},[1035,10476,10478],{"id":10477},"rolling-deployment","Rolling Deployment",[1026,10480,10481],{},[1042,10482,10483],{},"scripts/rolling_deploy.sh:",[1108,10485,10487],{"className":3694,"code":10486,"language":3696,"meta":1117,"style":1117},"#!/bin/bash\nset -e\n\nENVIRONMENT=${1:-production}\nREPLICAS=${2:-3}\n\necho \"🔄 Starting rolling deployment for $ENVIRONMENT\"\n\n# Update one replica at a time\nfor i in $(seq 1 $REPLICAS); do\n    echo \"📦 Updating replica $i/$REPLICAS...\"\n    \n    # Stop replica\n    docker-compose -f docker-compose.$ENVIRONMENT.yml stop web_$i\n    \n    # Update and start replica\n    docker-compose -f docker-compose.$ENVIRONMENT.yml up -d web_$i\n    \n    # Health check\n    sleep 15\n    if curl -f http://localhost:800$i/health/; then\n        echo \"✅ Replica $i updated successfully\"\n    else\n        echo \"❌ Replica $i health check failed\"\n        exit 1\n    fi\ndone\n\necho \"✅ Rolling deployment completed successfully\"\n",[1115,10488,10489,10493,10499,10503,10517,10531,10535,10548,10552,10557,10584,10607,10611,10616,10637,10641,10646,10666,10670,10675,10683,10703,10720,10725,10741,10748,10753,10758,10762],{"__ignoreMap":1117},[1135,10490,10491],{"class":1137,"line":1138},[1135,10492,3931],{"class":1193},[1135,10494,10495,10497],{"class":1137,"line":1149},[1135,10496,3937],{"class":3936},[1135,10498,3941],{"class":3940},[1135,10500,10501],{"class":1137,"line":1163},[1135,10502,1187],{"emptyLinePlaceholder":1186},[1135,10504,10505,10507,10509,10511,10513,10515],{"class":1137,"line":1183},[1135,10506,10153],{"class":3708},[1135,10508,1300],{"class":1176},[1135,10510,10158],{"class":1296},[1135,10512,10161],{"class":1577},[1135,10514,7491],{"class":3708},[1135,10516,2873],{"class":1296},[1135,10518,10519,10522,10524,10526,10528],{"class":1137,"line":1190},[1135,10520,10521],{"class":3708},"REPLICAS",[1135,10523,1300],{"class":1176},[1135,10525,10175],{"class":1296},[1135,10527,10161],{"class":1577},[1135,10529,10530],{"class":1296},"3}\n",[1135,10532,10533],{"class":1137,"line":1197},[1135,10534,1187],{"emptyLinePlaceholder":1186},[1135,10536,10537,10539,10541,10544,10546],{"class":1137,"line":1241},[1135,10538,3950],{"class":3936},[1135,10540,3953],{"class":1264},[1135,10542,10543],{"class":1268},"🔄 Starting rolling deployment for ",[1135,10545,10199],{"class":10198},[1135,10547,3959],{"class":1264},[1135,10549,10550],{"class":1137,"line":1246},[1135,10551,1187],{"emptyLinePlaceholder":1186},[1135,10553,10554],{"class":1137,"line":1252},[1135,10555,10556],{"class":1193},"# Update one replica at a time\n",[1135,10558,10559,10562,10565,10567,10570,10573,10575,10578,10581],{"class":1137,"line":1276},[1135,10560,10561],{"class":1141},"for",[1135,10563,10564],{"class":3708}," i",[1135,10566,8582],{"class":1141},[1135,10568,10569],{"class":1176}," $(",[1135,10571,10572],{"class":4012},"seq",[1135,10574,2448],{"class":2274},[1135,10576,10577],{"class":3708}," $REPLICAS",[1135,10579,10580],{"class":1176},");",[1135,10582,10583],{"class":1141}," do\n",[1135,10585,10586,10588,10590,10593,10596,10599,10602,10605],{"class":1137,"line":1320},[1135,10587,4000],{"class":3936},[1135,10589,3953],{"class":1264},[1135,10591,10592],{"class":1268},"📦 Updating replica ",[1135,10594,10595],{"class":10198},"$i",[1135,10597,10598],{"class":1268},"/",[1135,10600,10601],{"class":10198},"$REPLICAS",[1135,10603,10604],{"class":1268},"...",[1135,10606,3959],{"class":1264},[1135,10608,10609],{"class":1137,"line":1359},[1135,10610,8533],{"class":1145},[1135,10612,10613],{"class":1137,"line":1364},[1135,10614,10615],{"class":1193},"    # Stop replica\n",[1135,10617,10618,10620,10622,10624,10626,10628,10631,10634],{"class":1137,"line":1370},[1135,10619,10363],{"class":4012},[1135,10621,4130],{"class":3940},[1135,10623,10270],{"class":1268},[1135,10625,10199],{"class":3708},[1135,10627,10275],{"class":1268},[1135,10629,10630],{"class":1268}," stop",[1135,10632,10633],{"class":1268}," web_",[1135,10635,10636],{"class":3708},"$i\n",[1135,10638,10639],{"class":1137,"line":1381},[1135,10640,8533],{"class":1145},[1135,10642,10643],{"class":1137,"line":1395},[1135,10644,10645],{"class":1193},"    # Update and start replica\n",[1135,10647,10648,10650,10652,10654,10656,10658,10660,10662,10664],{"class":1137,"line":1407},[1135,10649,10363],{"class":4012},[1135,10651,4130],{"class":3940},[1135,10653,10270],{"class":1268},[1135,10655,10199],{"class":3708},[1135,10657,10275],{"class":1268},[1135,10659,10283],{"class":1268},[1135,10661,3981],{"class":3940},[1135,10663,10633],{"class":1268},[1135,10665,10636],{"class":3708},[1135,10667,10668],{"class":1137,"line":1419},[1135,10669,8533],{"class":1145},[1135,10671,10672],{"class":1137,"line":1431},[1135,10673,10674],{"class":1193},"    # Health check\n",[1135,10676,10677,10680],{"class":1137,"line":1443},[1135,10678,10679],{"class":4012},"    sleep",[1135,10681,10682],{"class":2274}," 15\n",[1135,10684,10685,10687,10689,10691,10694,10696,10699,10701],{"class":1137,"line":1455},[1135,10686,8573],{"class":1141},[1135,10688,10321],{"class":4012},[1135,10690,4130],{"class":3940},[1135,10692,10693],{"class":1268}," http://localhost:800",[1135,10695,10595],{"class":3708},[1135,10697,10698],{"class":1268},"/health/",[1135,10700,10329],{"class":1176},[1135,10702,3995],{"class":1141},[1135,10704,10705,10708,10710,10713,10715,10718],{"class":1137,"line":1461},[1135,10706,10707],{"class":3936},"        echo",[1135,10709,3953],{"class":1264},[1135,10711,10712],{"class":1268},"✅ Replica ",[1135,10714,10595],{"class":10198},[1135,10716,10717],{"class":1268}," updated successfully",[1135,10719,3959],{"class":1264},[1135,10721,10722],{"class":1137,"line":1466},[1135,10723,10724],{"class":1141},"    else\n",[1135,10726,10727,10729,10731,10734,10736,10739],{"class":1137,"line":1476},[1135,10728,10707],{"class":3936},[1135,10730,3953],{"class":1264},[1135,10732,10733],{"class":1268},"❌ Replica ",[1135,10735,10595],{"class":10198},[1135,10737,10738],{"class":1268}," health check failed",[1135,10740,3959],{"class":1264},[1135,10742,10743,10746],{"class":1137,"line":1488},[1135,10744,10745],{"class":3936},"        exit",[1135,10747,10386],{"class":2274},[1135,10749,10750],{"class":1137,"line":1500},[1135,10751,10752],{"class":1141},"    fi\n",[1135,10754,10755],{"class":1137,"line":1505},[1135,10756,10757],{"class":1141},"done\n",[1135,10759,10760],{"class":1137,"line":1510},[1135,10761,1187],{"emptyLinePlaceholder":1186},[1135,10763,10764,10766,10768,10771],{"class":1137,"line":1520},[1135,10765,3950],{"class":3936},[1135,10767,3953],{"class":1264},[1135,10769,10770],{"class":1268},"✅ Rolling deployment completed successfully",[1135,10772,3959],{"class":1264},[1030,10774,10776],{"id":10775},"monitoring-and-maintenance","Monitoring and Maintenance",[1035,10778,10780],{"id":10779},"environment-health-check","Environment Health Check",[1026,10782,10783],{},[1042,10784,10785],{},"management/commands/health_check.py:",[1108,10787,10789],{"className":1129,"code":10788,"language":1131,"meta":1117,"style":1117},"from django.core.management.base import BaseCommand\nfrom django.db import connection\nfrom django.core.cache import cache\nimport requests\n\nclass Command(BaseCommand):\n    help = 'Perform environment health check'\n    \n    def handle(self, *args, **options):\n        checks = [\n            self.check_database,\n            self.check_cache,\n            self.check_external_services,\n        ]\n        \n        all_passed = True\n        \n        for check in checks:\n            try:\n                check()\n                self.stdout.write(\n                    self.style.SUCCESS(f'✓ {check.__name__} passed')\n                )\n            except Exception as e:\n                self.stdout.write(\n                    self.style.ERROR(f'✗ {check.__name__} failed: {e}')\n                )\n                all_passed = False\n        \n        if all_passed:\n            self.stdout.write(self.style.SUCCESS('All health checks passed'))\n        else:\n            self.stdout.write(self.style.ERROR('Some health checks failed'))\n            exit(1)\n    \n    def check_database(self):\n        with connection.cursor() as cursor:\n            cursor.execute(\"SELECT 1\")\n            cursor.fetchone()\n    \n    def check_cache(self):\n        cache.set('health_check', 'ok', 30)\n        if cache.get('health_check') != 'ok':\n            raise Exception('Cache not working')\n    \n    def check_external_services(self):\n        # Check external API endpoints\n        response = requests.get('https://api.example.com/health', timeout=5)\n        response.raise_for_status()\n",[1115,10790,10791,10815,10829,10847,10854,10858,10873,10887,10891,10923,10932,10944,10955,10966,10971,10976,10985,10989,11004,11011,11018,11034,11071,11076,11089,11103,11145,11149,11158,11162,11171,11207,11213,11248,11259,11263,11276,11299,11320,11331,11335,11348,11380,11410,11428,11432,11445,11450,11485],{"__ignoreMap":1117},[1135,10792,10793,10795,10797,10799,10801,10803,10806,10808,10810,10812],{"class":1137,"line":1138},[1135,10794,1152],{"class":1141},[1135,10796,9301],{"class":1145},[1135,10798,1231],{"class":1176},[1135,10800,9322],{"class":1145},[1135,10802,1231],{"class":1176},[1135,10804,10805],{"class":1145},"management",[1135,10807,1231],{"class":1176},[1135,10809,2901],{"class":1145},[1135,10811,1142],{"class":1141},[1135,10813,10814],{"class":1145}," BaseCommand\n",[1135,10816,10817,10819,10821,10823,10825,10827],{"class":1137,"line":1149},[1135,10818,1152],{"class":1141},[1135,10820,9301],{"class":1145},[1135,10822,1231],{"class":1176},[1135,10824,9555],{"class":1145},[1135,10826,1142],{"class":1141},[1135,10828,9560],{"class":1145},[1135,10830,10831,10833,10835,10837,10839,10841,10843,10845],{"class":1137,"line":1163},[1135,10832,1152],{"class":1141},[1135,10834,9301],{"class":1145},[1135,10836,1231],{"class":1176},[1135,10838,9322],{"class":1145},[1135,10840,1231],{"class":1176},[1135,10842,9660],{"class":1145},[1135,10844,1142],{"class":1141},[1135,10846,9665],{"class":1145},[1135,10848,10849,10851],{"class":1137,"line":1183},[1135,10850,1142],{"class":1141},[1135,10852,10853],{"class":1145}," requests\n",[1135,10855,10856],{"class":1137,"line":1190},[1135,10857,1187],{"emptyLinePlaceholder":1186},[1135,10859,10860,10862,10866,10868,10871],{"class":1137,"line":1197},[1135,10861,2690],{"class":2525},[1135,10863,10865],{"class":10864},"sD-vU"," Command",[1135,10867,1211],{"class":1176},[1135,10869,10870],{"class":4012},"BaseCommand",[1135,10872,5271],{"class":1176},[1135,10874,10875,10878,10880,10882,10885],{"class":1137,"line":1241},[1135,10876,10877],{"class":3936},"    help",[1135,10879,1204],{"class":1176},[1135,10881,1730],{"class":1264},[1135,10883,10884],{"class":1268},"Perform environment health check",[1135,10886,1736],{"class":1264},[1135,10888,10889],{"class":1137,"line":1246},[1135,10890,8533],{"class":1145},[1135,10892,10893,10896,10899,10901,10905,10907,10910,10913,10915,10918,10921],{"class":1137,"line":1252},[1135,10894,10895],{"class":2525},"    def",[1135,10897,10898],{"class":8510}," handle",[1135,10900,1211],{"class":1176},[1135,10902,10904],{"class":10903},"sRjD_","self",[1135,10906,1177],{"class":1176},[1135,10908,10909],{"class":1577}," *",[1135,10911,10912],{"class":3251},"args",[1135,10914,1177],{"class":1176},[1135,10916,10917],{"class":1577}," **",[1135,10919,10920],{"class":3251},"options",[1135,10922,5271],{"class":1176},[1135,10924,10925,10928,10930],{"class":1137,"line":1276},[1135,10926,10927],{"class":1145},"        checks ",[1135,10929,1300],{"class":1176},[1135,10931,1378],{"class":1176},[1135,10933,10934,10937,10939,10942],{"class":1137,"line":1320},[1135,10935,10936],{"class":1200},"            self",[1135,10938,1231],{"class":1176},[1135,10940,10941],{"class":1227},"check_database",[1135,10943,1392],{"class":1176},[1135,10945,10946,10948,10950,10953],{"class":1137,"line":1359},[1135,10947,10936],{"class":1200},[1135,10949,1231],{"class":1176},[1135,10951,10952],{"class":1227},"check_cache",[1135,10954,1392],{"class":1176},[1135,10956,10957,10959,10961,10964],{"class":1137,"line":1364},[1135,10958,10936],{"class":1200},[1135,10960,1231],{"class":1176},[1135,10962,10963],{"class":1227},"check_external_services",[1135,10965,1392],{"class":1176},[1135,10967,10968],{"class":1137,"line":1370},[1135,10969,10970],{"class":1176},"        ]\n",[1135,10972,10973],{"class":1137,"line":1381},[1135,10974,10975],{"class":1145},"        \n",[1135,10977,10978,10981,10983],{"class":1137,"line":1395},[1135,10979,10980],{"class":1145},"        all_passed ",[1135,10982,1300],{"class":1176},[1135,10984,2028],{"class":1303},[1135,10986,10987],{"class":1137,"line":1407},[1135,10988,10975],{"class":1145},[1135,10990,10991,10994,10997,10999,11002],{"class":1137,"line":1419},[1135,10992,10993],{"class":1141},"        for",[1135,10995,10996],{"class":1145}," check ",[1135,10998,9428],{"class":1141},[1135,11000,11001],{"class":1145}," checks",[1135,11003,5601],{"class":1176},[1135,11005,11006,11009],{"class":1137,"line":1431},[1135,11007,11008],{"class":1141},"            try",[1135,11010,5601],{"class":1176},[1135,11012,11013,11016],{"class":1137,"line":1443},[1135,11014,11015],{"class":1207},"                check",[1135,11017,9289],{"class":1176},[1135,11019,11020,11023,11025,11028,11030,11032],{"class":1137,"line":1455},[1135,11021,11022],{"class":1200},"                self",[1135,11024,1231],{"class":1176},[1135,11026,11027],{"class":1227},"stdout",[1135,11029,1231],{"class":1176},[1135,11031,8853],{"class":1207},[1135,11033,4500],{"class":1176},[1135,11035,11036,11039,11041,11043,11045,11048,11050,11052,11055,11057,11059,11061,11064,11066,11069],{"class":1137,"line":1461},[1135,11037,11038],{"class":1200},"                    self",[1135,11040,1231],{"class":1176},[1135,11042,2551],{"class":1227},[1135,11044,1231],{"class":1176},[1135,11046,11047],{"class":1207},"SUCCESS",[1135,11049,1211],{"class":1176},[1135,11051,8597],{"class":2525},[1135,11053,11054],{"class":1268},"'✓ ",[1135,11056,2560],{"class":2512},[1135,11058,9829],{"class":1207},[1135,11060,1231],{"class":1176},[1135,11062,11063],{"class":1214},"__name__",[1135,11065,2529],{"class":2512},[1135,11067,11068],{"class":1268}," passed'",[1135,11070,1273],{"class":1176},[1135,11072,11073],{"class":1137,"line":1466},[1135,11074,11075],{"class":1176},"                )\n",[1135,11077,11078,11081,11083,11085,11087],{"class":1137,"line":1476},[1135,11079,11080],{"class":1141},"            except",[1135,11082,9595],{"class":1314},[1135,11084,8839],{"class":1141},[1135,11086,9600],{"class":1145},[1135,11088,5601],{"class":1176},[1135,11090,11091,11093,11095,11097,11099,11101],{"class":1137,"line":1488},[1135,11092,11022],{"class":1200},[1135,11094,1231],{"class":1176},[1135,11096,11027],{"class":1227},[1135,11098,1231],{"class":1176},[1135,11100,8853],{"class":1207},[1135,11102,4500],{"class":1176},[1135,11104,11105,11107,11109,11111,11113,11115,11117,11119,11122,11124,11126,11128,11130,11132,11135,11137,11139,11141,11143],{"class":1137,"line":1500},[1135,11106,11038],{"class":1200},[1135,11108,1231],{"class":1176},[1135,11110,2551],{"class":1227},[1135,11112,1231],{"class":1176},[1135,11114,7002],{"class":1207},[1135,11116,1211],{"class":1176},[1135,11118,8597],{"class":2525},[1135,11120,11121],{"class":1268},"'✗ ",[1135,11123,2560],{"class":2512},[1135,11125,9829],{"class":1207},[1135,11127,1231],{"class":1176},[1135,11129,11063],{"class":1214},[1135,11131,2529],{"class":2512},[1135,11133,11134],{"class":1268}," failed: ",[1135,11136,2560],{"class":2512},[1135,11138,9618],{"class":1207},[1135,11140,2529],{"class":2512},[1135,11142,1265],{"class":1268},[1135,11144,1273],{"class":1176},[1135,11146,11147],{"class":1137,"line":1505},[1135,11148,11075],{"class":1176},[1135,11150,11151,11154,11156],{"class":1137,"line":1510},[1135,11152,11153],{"class":1145},"                all_passed ",[1135,11155,1300],{"class":1176},[1135,11157,6036],{"class":1303},[1135,11159,11160],{"class":1137,"line":1520},[1135,11161,10975],{"class":1145},[1135,11163,11164,11166,11169],{"class":1137,"line":1532},[1135,11165,9438],{"class":1141},[1135,11167,11168],{"class":1145}," all_passed",[1135,11170,5601],{"class":1176},[1135,11172,11173,11175,11177,11179,11181,11183,11185,11187,11189,11191,11193,11195,11197,11199,11202,11204],{"class":1137,"line":1544},[1135,11174,10936],{"class":1200},[1135,11176,1231],{"class":1176},[1135,11178,11027],{"class":1227},[1135,11180,1231],{"class":1176},[1135,11182,8853],{"class":1207},[1135,11184,1211],{"class":1176},[1135,11186,10904],{"class":1200},[1135,11188,1231],{"class":1176},[1135,11190,2551],{"class":1227},[1135,11192,1231],{"class":1176},[1135,11194,11047],{"class":1207},[1135,11196,1211],{"class":1176},[1135,11198,1265],{"class":1264},[1135,11200,11201],{"class":1268},"All health checks passed",[1135,11203,1265],{"class":1264},[1135,11205,11206],{"class":1176},"))\n",[1135,11208,11209,11211],{"class":1137,"line":1556},[1135,11210,9752],{"class":1141},[1135,11212,5601],{"class":1176},[1135,11214,11215,11217,11219,11221,11223,11225,11227,11229,11231,11233,11235,11237,11239,11241,11244,11246],{"class":1137,"line":1561},[1135,11216,10936],{"class":1200},[1135,11218,1231],{"class":1176},[1135,11220,11027],{"class":1227},[1135,11222,1231],{"class":1176},[1135,11224,8853],{"class":1207},[1135,11226,1211],{"class":1176},[1135,11228,10904],{"class":1200},[1135,11230,1231],{"class":1176},[1135,11232,2551],{"class":1227},[1135,11234,1231],{"class":1176},[1135,11236,7002],{"class":1207},[1135,11238,1211],{"class":1176},[1135,11240,1265],{"class":1264},[1135,11242,11243],{"class":1268},"Some health checks failed",[1135,11245,1265],{"class":1264},[1135,11247,11206],{"class":1176},[1135,11249,11250,11253,11255,11257],{"class":1137,"line":1566},[1135,11251,11252],{"class":3936},"            exit",[1135,11254,1211],{"class":1176},[1135,11256,9081],{"class":2274},[1135,11258,1273],{"class":1176},[1135,11260,11261],{"class":1137,"line":1589},[1135,11262,8533],{"class":1145},[1135,11264,11265,11267,11270,11272,11274],{"class":1137,"line":1594},[1135,11266,10895],{"class":2525},[1135,11268,11269],{"class":8510}," check_database",[1135,11271,1211],{"class":1176},[1135,11273,10904],{"class":10903},[1135,11275,5271],{"class":1176},[1135,11277,11278,11281,11284,11286,11289,11292,11294,11297],{"class":1137,"line":1604},[1135,11279,11280],{"class":1141},"        with",[1135,11282,11283],{"class":1145}," connection",[1135,11285,1231],{"class":1176},[1135,11287,11288],{"class":1207},"cursor",[1135,11290,11291],{"class":1176},"()",[1135,11293,8839],{"class":1141},[1135,11295,11296],{"class":1145}," cursor",[1135,11298,5601],{"class":1176},[1135,11300,11301,11304,11306,11309,11311,11313,11316,11318],{"class":1137,"line":1616},[1135,11302,11303],{"class":1145},"            cursor",[1135,11305,1231],{"class":1176},[1135,11307,11308],{"class":1207},"execute",[1135,11310,1211],{"class":1176},[1135,11312,3989],{"class":1264},[1135,11314,11315],{"class":1268},"SELECT 1",[1135,11317,3989],{"class":1264},[1135,11319,1273],{"class":1176},[1135,11321,11322,11324,11326,11329],{"class":1137,"line":1628},[1135,11323,11303],{"class":1145},[1135,11325,1231],{"class":1176},[1135,11327,11328],{"class":1207},"fetchone",[1135,11330,9289],{"class":1176},[1135,11332,11333],{"class":1137,"line":1640},[1135,11334,8533],{"class":1145},[1135,11336,11337,11339,11342,11344,11346],{"class":1137,"line":1652},[1135,11338,10895],{"class":2525},[1135,11340,11341],{"class":8510}," check_cache",[1135,11343,1211],{"class":1176},[1135,11345,10904],{"class":10903},[1135,11347,5271],{"class":1176},[1135,11349,11350,11352,11354,11356,11358,11360,11363,11365,11367,11369,11372,11374,11376,11378],{"class":1137,"line":1664},[1135,11351,9670],{"class":1145},[1135,11353,1231],{"class":1176},[1135,11355,3937],{"class":1207},[1135,11357,1211],{"class":1176},[1135,11359,1265],{"class":1264},[1135,11361,11362],{"class":1268},"health_check",[1135,11364,1265],{"class":1264},[1135,11366,1177],{"class":1176},[1135,11368,1730],{"class":1264},[1135,11370,11371],{"class":1268},"ok",[1135,11373,1265],{"class":1264},[1135,11375,1177],{"class":1176},[1135,11377,9697],{"class":2274},[1135,11379,1273],{"class":1176},[1135,11381,11382,11384,11386,11388,11390,11392,11394,11396,11398,11400,11402,11404,11406,11408],{"class":1137,"line":1676},[1135,11383,9438],{"class":1141},[1135,11385,9706],{"class":1145},[1135,11387,1231],{"class":1176},[1135,11389,9711],{"class":1207},[1135,11391,1211],{"class":1176},[1135,11393,1265],{"class":1264},[1135,11395,11362],{"class":1268},[1135,11397,1265],{"class":1264},[1135,11399,8622],{"class":1176},[1135,11401,9031],{"class":1577},[1135,11403,1730],{"class":1264},[1135,11405,11371],{"class":1268},[1135,11407,1265],{"class":1264},[1135,11409,5601],{"class":1176},[1135,11411,11412,11415,11417,11419,11421,11424,11426],{"class":1137,"line":1688},[1135,11413,11414],{"class":1141},"            raise",[1135,11416,9595],{"class":1314},[1135,11418,1211],{"class":1176},[1135,11420,1265],{"class":1264},[1135,11422,11423],{"class":1268},"Cache not working",[1135,11425,1265],{"class":1264},[1135,11427,1273],{"class":1176},[1135,11429,11430],{"class":1137,"line":1700},[1135,11431,8533],{"class":1145},[1135,11433,11434,11436,11439,11441,11443],{"class":1137,"line":1712},[1135,11435,10895],{"class":2525},[1135,11437,11438],{"class":8510}," check_external_services",[1135,11440,1211],{"class":1176},[1135,11442,10904],{"class":10903},[1135,11444,5271],{"class":1176},[1135,11446,11447],{"class":1137,"line":1717},[1135,11448,11449],{"class":1193},"        # Check external API endpoints\n",[1135,11451,11452,11455,11457,11460,11462,11464,11466,11468,11471,11473,11475,11478,11480,11483],{"class":1137,"line":1722},[1135,11453,11454],{"class":1145},"        response ",[1135,11456,1300],{"class":1176},[1135,11458,11459],{"class":1145}," requests",[1135,11461,1231],{"class":1176},[1135,11463,9711],{"class":1207},[1135,11465,1211],{"class":1176},[1135,11467,1265],{"class":1264},[1135,11469,11470],{"class":1268},"https://api.example.com/health",[1135,11472,1265],{"class":1264},[1135,11474,1177],{"class":1176},[1135,11476,11477],{"class":1296}," timeout",[1135,11479,1300],{"class":1176},[1135,11481,11482],{"class":2274},"5",[1135,11484,1273],{"class":1176},[1135,11486,11487,11490,11492,11495],{"class":1137,"line":1739},[1135,11488,11489],{"class":1145},"        response",[1135,11491,1231],{"class":1176},[1135,11493,11494],{"class":1207},"raise_for_status",[1135,11496,9289],{"class":1176},[1026,11498,11499],{},"Proper environment management ensures smooth development workflows, reliable deployments, and maintainable applications across different stages of the development lifecycle.",[2551,11501,11502],{},"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 .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}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 .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .s131V, html code.shiki .s131V{--shiki-light:#90A4AE;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .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 .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}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 .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 .sSC40, html code.shiki .sSC40{--shiki-light:#90A4AE;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sz9Cv, html code.shiki .sz9Cv{--shiki-light:#91B859;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .suXOh, html code.shiki .suXOh{--shiki-light:#E53935;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sm7ve, html code.shiki .sm7ve{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#B5695977;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D77;--shiki-dark-font-style:inherit}html pre.shiki code .sVyVU, html code.shiki .sVyVU{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B56959;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D;--shiki-dark-font-style:inherit}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .su_V2, html code.shiki .su_V2{--shiki-light:#90A4AE;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}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}",{"title":1117,"searchDepth":1138,"depth":1149,"links":11504},[11505,11508,11512,11517,11522,11527,11531,11535],{"id":1032,"depth":1149,"text":1033,"children":11506},[11507],{"id":1037,"depth":1163,"text":1038},{"id":1101,"depth":1149,"text":1102,"children":11509},[11510,11511],{"id":1105,"depth":1163,"text":1106},{"id":1120,"depth":1163,"text":1121},{"id":2876,"depth":1149,"text":2877,"children":11513},[11514,11515,11516],{"id":2880,"depth":1163,"text":2881},{"id":3685,"depth":1163,"text":3686},{"id":3915,"depth":1163,"text":3916},{"id":4352,"depth":1149,"text":4353,"children":11518},[11519,11520,11521],{"id":4356,"depth":1163,"text":4357},{"id":5310,"depth":1163,"text":5311},{"id":5557,"depth":1163,"text":5558},{"id":5936,"depth":1149,"text":5937,"children":11523},[11524,11525,11526],{"id":5940,"depth":1163,"text":5941},{"id":7621,"depth":1163,"text":7622},{"id":7900,"depth":1163,"text":7901},{"id":8427,"depth":1149,"text":8428,"children":11528},[11529,11530],{"id":8431,"depth":1163,"text":8432},{"id":9152,"depth":1163,"text":9153},{"id":10119,"depth":1149,"text":10120,"children":11532},[11533,11534],{"id":10123,"depth":1163,"text":10124},{"id":10477,"depth":1163,"text":10478},{"id":10775,"depth":1149,"text":10776,"children":11536},[11537],{"id":10779,"depth":1163,"text":10780},"md",null,{},{"title":78,"description":1028},"VS4OiyLyDDOXq69ZGHdOzHRT8LZ-cZmxBr0ol5Ip1xo",[11544,11546],{"title":74,"path":75,"stem":76,"description":11545,"children":-1},"Django settings configuration is crucial for managing different environments, security, and application behavior. This comprehensive guide covers settings organization, environment management, and best practices for maintainable Django projects.",{"title":82,"path":83,"stem":84,"description":11547,"children":-1},"Django's built-in development server is a lightweight, auto-reloading server designed for development and testing. This comprehensive guide covers everything you need to know about running, configuring, and optimizing the development server for productive Django development.",1772474902380]