[{"data":1,"prerenderedAt":6881},["ShallowReactive",2],{"navigation":3,"/development-environment/recommended-tooling":1016,"/development-environment/recommended-tooling-surround":6876},[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":62,"body":1018,"description":1028,"extension":6871,"links":6872,"meta":6873,"navigation":2088,"path":63,"seo":6874,"stem":64,"__hash__":6875},"docs/02.development-environment/2.recommended-tooling.md",{"type":1019,"value":1020,"toc":6832},"minimark",[1021,1025,1029,1034,1039,1045,1064,1069,1243,1248,1690,1695,1996,2000,2005,2022,2027,2064,2069,2315,2319,2324,2395,2399,2403,2408,2567,2572,2773,2777,2782,2927,2932,2946,2950,2954,2959,3178,3183,3464,3468,3473,3698,3702,3706,3711,3882,3887,4032,4037,4109,4114,4408,4412,4417,4594,4598,4602,4606,4629,4634,4876,4881,5268,5272,5276,5280,5294,5481,5485,5489,5503,5508,5627,5631,5635,5639,5653,5657,5804,5808,5813,5894,5898,5901,5906,6013,6017,6021,6143,6147,6151,6316,6320,6595,6599,6825,6828],[1022,1023,62],"h1",{"id":1024},"recommended-tooling-for-django-development",[1026,1027,1028],"p",{},"The right tools can dramatically improve your Django development experience. This comprehensive guide covers essential tools, their configuration, and best practices for creating a productive development environment.",[1030,1031,1033],"h2",{"id":1032},"code-editors-and-ides","Code Editors and IDEs",[1035,1036,1038],"h3",{"id":1037},"vs-code-recommended-for-beginners","VS Code (Recommended for Beginners)",[1026,1040,1041],{},[1042,1043,1044],"strong",{},"Why VS Code:",[1046,1047,1048,1052,1055,1058,1061],"ul",{},[1049,1050,1051],"li",{},"Free and open source",[1049,1053,1054],{},"Excellent Django support through extensions",[1049,1056,1057],{},"Integrated terminal and debugging",[1049,1059,1060],{},"Large community and extension ecosystem",[1049,1062,1063],{},"Cross-platform compatibility",[1026,1065,1066],{},[1042,1067,1068],{},"Essential Extensions:",[1070,1071,1076],"pre",{"className":1072,"code":1073,"language":1074,"meta":1075,"style":1075},"language-json shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","{\n  \"recommendations\": [\n    \"ms-python.python\",\n    \"ms-python.flake8\",\n    \"ms-python.black-formatter\",\n    \"ms-python.isort\",\n    \"batisteo.vscode-django\",\n    \"ms-python.debugpy\",\n    \"ms-vscode.vscode-json\",\n    \"redhat.vscode-yaml\",\n    \"ms-vscode.vscode-html-css-support\",\n    \"bradlc.vscode-tailwindcss\"\n  ]\n}\n","json","",[1077,1078,1079,1088,1108,1124,1136,1148,1160,1172,1184,1196,1208,1220,1231,1237],"code",{"__ignoreMap":1075},[1080,1081,1084],"span",{"class":1082,"line":1083},"line",1,[1080,1085,1087],{"class":1086},"soVBu","{\n",[1080,1089,1091,1095,1099,1102,1105],{"class":1082,"line":1090},2,[1080,1092,1094],{"class":1093},"s4Jsk","  \"",[1080,1096,1098],{"class":1097},"sLorS","recommendations",[1080,1100,1101],{"class":1093},"\"",[1080,1103,1104],{"class":1086},":",[1080,1106,1107],{"class":1086}," [\n",[1080,1109,1111,1115,1119,1121],{"class":1082,"line":1110},3,[1080,1112,1114],{"class":1113},"sbYkP","    \"",[1080,1116,1118],{"class":1117},"sTbE_","ms-python.python",[1080,1120,1101],{"class":1113},[1080,1122,1123],{"class":1086},",\n",[1080,1125,1127,1129,1132,1134],{"class":1082,"line":1126},4,[1080,1128,1114],{"class":1113},[1080,1130,1131],{"class":1117},"ms-python.flake8",[1080,1133,1101],{"class":1113},[1080,1135,1123],{"class":1086},[1080,1137,1139,1141,1144,1146],{"class":1082,"line":1138},5,[1080,1140,1114],{"class":1113},[1080,1142,1143],{"class":1117},"ms-python.black-formatter",[1080,1145,1101],{"class":1113},[1080,1147,1123],{"class":1086},[1080,1149,1151,1153,1156,1158],{"class":1082,"line":1150},6,[1080,1152,1114],{"class":1113},[1080,1154,1155],{"class":1117},"ms-python.isort",[1080,1157,1101],{"class":1113},[1080,1159,1123],{"class":1086},[1080,1161,1163,1165,1168,1170],{"class":1082,"line":1162},7,[1080,1164,1114],{"class":1113},[1080,1166,1167],{"class":1117},"batisteo.vscode-django",[1080,1169,1101],{"class":1113},[1080,1171,1123],{"class":1086},[1080,1173,1175,1177,1180,1182],{"class":1082,"line":1174},8,[1080,1176,1114],{"class":1113},[1080,1178,1179],{"class":1117},"ms-python.debugpy",[1080,1181,1101],{"class":1113},[1080,1183,1123],{"class":1086},[1080,1185,1187,1189,1192,1194],{"class":1082,"line":1186},9,[1080,1188,1114],{"class":1113},[1080,1190,1191],{"class":1117},"ms-vscode.vscode-json",[1080,1193,1101],{"class":1113},[1080,1195,1123],{"class":1086},[1080,1197,1199,1201,1204,1206],{"class":1082,"line":1198},10,[1080,1200,1114],{"class":1113},[1080,1202,1203],{"class":1117},"redhat.vscode-yaml",[1080,1205,1101],{"class":1113},[1080,1207,1123],{"class":1086},[1080,1209,1211,1213,1216,1218],{"class":1082,"line":1210},11,[1080,1212,1114],{"class":1113},[1080,1214,1215],{"class":1117},"ms-vscode.vscode-html-css-support",[1080,1217,1101],{"class":1113},[1080,1219,1123],{"class":1086},[1080,1221,1223,1225,1228],{"class":1082,"line":1222},12,[1080,1224,1114],{"class":1113},[1080,1226,1227],{"class":1117},"bradlc.vscode-tailwindcss",[1080,1229,1230],{"class":1113},"\"\n",[1080,1232,1234],{"class":1082,"line":1233},13,[1080,1235,1236],{"class":1086},"  ]\n",[1080,1238,1240],{"class":1082,"line":1239},14,[1080,1241,1242],{"class":1086},"}\n",[1026,1244,1245],{},[1042,1246,1247],{},"VS Code Configuration:",[1070,1249,1251],{"className":1072,"code":1250,"language":1074,"meta":1075,"style":1075},"// .vscode/settings.json\n{\n  \"python.defaultInterpreterPath\": \"./venv/bin/python\",\n  \"python.linting.enabled\": true,\n  \"python.linting.flake8Enabled\": true,\n  \"python.linting.pylintEnabled\": false,\n  \"python.formatting.provider\": \"black\",\n  \"python.formatting.blackArgs\": [\"--line-length=88\"],\n  \"python.sortImports.args\": [\"--profile\", \"black\"],\n  \"editor.formatOnSave\": true,\n  \"editor.codeActionsOnSave\": {\n    \"source.organizeImports\": true\n  },\n  \"files.associations\": {\n    \"*.html\": \"django-html\",\n    \"*.txt\": \"django-txt\"\n  },\n  \"emmet.includeLanguages\": {\n    \"django-html\": \"html\"\n  },\n  \"[python]\": {\n    \"editor.tabSize\": 4,\n    \"editor.insertSpaces\": true,\n    \"editor.rulers\": [88]\n  },\n  \"python.testing.pytestEnabled\": true,\n  \"python.testing.unittestEnabled\": false,\n  \"python.testing.pytestArgs\": [\n    \".\"\n  ]\n}\n",[1077,1252,1253,1259,1263,1284,1301,1316,1332,1352,1376,1407,1422,1436,1451,1456,1469,1490,1509,1514,1528,1546,1551,1565,1583,1599,1619,1624,1640,1656,1670,1680,1685],{"__ignoreMap":1075},[1080,1254,1255],{"class":1082,"line":1083},[1080,1256,1258],{"class":1257},"s9Tkl","// .vscode/settings.json\n",[1080,1260,1261],{"class":1082,"line":1090},[1080,1262,1087],{"class":1086},[1080,1264,1265,1267,1270,1272,1274,1277,1280,1282],{"class":1082,"line":1110},[1080,1266,1094],{"class":1093},[1080,1268,1269],{"class":1097},"python.defaultInterpreterPath",[1080,1271,1101],{"class":1093},[1080,1273,1104],{"class":1086},[1080,1275,1276],{"class":1113}," \"",[1080,1278,1279],{"class":1117},"./venv/bin/python",[1080,1281,1101],{"class":1113},[1080,1283,1123],{"class":1086},[1080,1285,1286,1288,1291,1293,1295,1299],{"class":1082,"line":1126},[1080,1287,1094],{"class":1093},[1080,1289,1290],{"class":1097},"python.linting.enabled",[1080,1292,1101],{"class":1093},[1080,1294,1104],{"class":1086},[1080,1296,1298],{"class":1297},"s8XtY"," true",[1080,1300,1123],{"class":1086},[1080,1302,1303,1305,1308,1310,1312,1314],{"class":1082,"line":1138},[1080,1304,1094],{"class":1093},[1080,1306,1307],{"class":1097},"python.linting.flake8Enabled",[1080,1309,1101],{"class":1093},[1080,1311,1104],{"class":1086},[1080,1313,1298],{"class":1297},[1080,1315,1123],{"class":1086},[1080,1317,1318,1320,1323,1325,1327,1330],{"class":1082,"line":1150},[1080,1319,1094],{"class":1093},[1080,1321,1322],{"class":1097},"python.linting.pylintEnabled",[1080,1324,1101],{"class":1093},[1080,1326,1104],{"class":1086},[1080,1328,1329],{"class":1297}," false",[1080,1331,1123],{"class":1086},[1080,1333,1334,1336,1339,1341,1343,1345,1348,1350],{"class":1082,"line":1162},[1080,1335,1094],{"class":1093},[1080,1337,1338],{"class":1097},"python.formatting.provider",[1080,1340,1101],{"class":1093},[1080,1342,1104],{"class":1086},[1080,1344,1276],{"class":1113},[1080,1346,1347],{"class":1117},"black",[1080,1349,1101],{"class":1113},[1080,1351,1123],{"class":1086},[1080,1353,1354,1356,1359,1361,1363,1366,1368,1371,1373],{"class":1082,"line":1174},[1080,1355,1094],{"class":1093},[1080,1357,1358],{"class":1097},"python.formatting.blackArgs",[1080,1360,1101],{"class":1093},[1080,1362,1104],{"class":1086},[1080,1364,1365],{"class":1086}," [",[1080,1367,1101],{"class":1113},[1080,1369,1370],{"class":1117},"--line-length=88",[1080,1372,1101],{"class":1113},[1080,1374,1375],{"class":1086},"],\n",[1080,1377,1378,1380,1383,1385,1387,1389,1391,1394,1396,1399,1401,1403,1405],{"class":1082,"line":1186},[1080,1379,1094],{"class":1093},[1080,1381,1382],{"class":1097},"python.sortImports.args",[1080,1384,1101],{"class":1093},[1080,1386,1104],{"class":1086},[1080,1388,1365],{"class":1086},[1080,1390,1101],{"class":1113},[1080,1392,1393],{"class":1117},"--profile",[1080,1395,1101],{"class":1113},[1080,1397,1398],{"class":1086},",",[1080,1400,1276],{"class":1113},[1080,1402,1347],{"class":1117},[1080,1404,1101],{"class":1113},[1080,1406,1375],{"class":1086},[1080,1408,1409,1411,1414,1416,1418,1420],{"class":1082,"line":1198},[1080,1410,1094],{"class":1093},[1080,1412,1413],{"class":1097},"editor.formatOnSave",[1080,1415,1101],{"class":1093},[1080,1417,1104],{"class":1086},[1080,1419,1298],{"class":1297},[1080,1421,1123],{"class":1086},[1080,1423,1424,1426,1429,1431,1433],{"class":1082,"line":1210},[1080,1425,1094],{"class":1093},[1080,1427,1428],{"class":1097},"editor.codeActionsOnSave",[1080,1430,1101],{"class":1093},[1080,1432,1104],{"class":1086},[1080,1434,1435],{"class":1086}," {\n",[1080,1437,1438,1440,1444,1446,1448],{"class":1082,"line":1222},[1080,1439,1114],{"class":1093},[1080,1441,1443],{"class":1442},"sa2tF","source.organizeImports",[1080,1445,1101],{"class":1093},[1080,1447,1104],{"class":1086},[1080,1449,1450],{"class":1297}," true\n",[1080,1452,1453],{"class":1082,"line":1233},[1080,1454,1455],{"class":1086},"  },\n",[1080,1457,1458,1460,1463,1465,1467],{"class":1082,"line":1239},[1080,1459,1094],{"class":1093},[1080,1461,1462],{"class":1097},"files.associations",[1080,1464,1101],{"class":1093},[1080,1466,1104],{"class":1086},[1080,1468,1435],{"class":1086},[1080,1470,1472,1474,1477,1479,1481,1483,1486,1488],{"class":1082,"line":1471},15,[1080,1473,1114],{"class":1093},[1080,1475,1476],{"class":1442},"*.html",[1080,1478,1101],{"class":1093},[1080,1480,1104],{"class":1086},[1080,1482,1276],{"class":1113},[1080,1484,1485],{"class":1117},"django-html",[1080,1487,1101],{"class":1113},[1080,1489,1123],{"class":1086},[1080,1491,1493,1495,1498,1500,1502,1504,1507],{"class":1082,"line":1492},16,[1080,1494,1114],{"class":1093},[1080,1496,1497],{"class":1442},"*.txt",[1080,1499,1101],{"class":1093},[1080,1501,1104],{"class":1086},[1080,1503,1276],{"class":1113},[1080,1505,1506],{"class":1117},"django-txt",[1080,1508,1230],{"class":1113},[1080,1510,1512],{"class":1082,"line":1511},17,[1080,1513,1455],{"class":1086},[1080,1515,1517,1519,1522,1524,1526],{"class":1082,"line":1516},18,[1080,1518,1094],{"class":1093},[1080,1520,1521],{"class":1097},"emmet.includeLanguages",[1080,1523,1101],{"class":1093},[1080,1525,1104],{"class":1086},[1080,1527,1435],{"class":1086},[1080,1529,1531,1533,1535,1537,1539,1541,1544],{"class":1082,"line":1530},19,[1080,1532,1114],{"class":1093},[1080,1534,1485],{"class":1442},[1080,1536,1101],{"class":1093},[1080,1538,1104],{"class":1086},[1080,1540,1276],{"class":1113},[1080,1542,1543],{"class":1117},"html",[1080,1545,1230],{"class":1113},[1080,1547,1549],{"class":1082,"line":1548},20,[1080,1550,1455],{"class":1086},[1080,1552,1554,1556,1559,1561,1563],{"class":1082,"line":1553},21,[1080,1555,1094],{"class":1093},[1080,1557,1558],{"class":1097},"[python]",[1080,1560,1101],{"class":1093},[1080,1562,1104],{"class":1086},[1080,1564,1435],{"class":1086},[1080,1566,1568,1570,1573,1575,1577,1581],{"class":1082,"line":1567},22,[1080,1569,1114],{"class":1093},[1080,1571,1572],{"class":1442},"editor.tabSize",[1080,1574,1101],{"class":1093},[1080,1576,1104],{"class":1086},[1080,1578,1580],{"class":1579},"s7CZa"," 4",[1080,1582,1123],{"class":1086},[1080,1584,1586,1588,1591,1593,1595,1597],{"class":1082,"line":1585},23,[1080,1587,1114],{"class":1093},[1080,1589,1590],{"class":1442},"editor.insertSpaces",[1080,1592,1101],{"class":1093},[1080,1594,1104],{"class":1086},[1080,1596,1298],{"class":1297},[1080,1598,1123],{"class":1086},[1080,1600,1602,1604,1607,1609,1611,1613,1616],{"class":1082,"line":1601},24,[1080,1603,1114],{"class":1093},[1080,1605,1606],{"class":1442},"editor.rulers",[1080,1608,1101],{"class":1093},[1080,1610,1104],{"class":1086},[1080,1612,1365],{"class":1086},[1080,1614,1615],{"class":1579},"88",[1080,1617,1618],{"class":1086},"]\n",[1080,1620,1622],{"class":1082,"line":1621},25,[1080,1623,1455],{"class":1086},[1080,1625,1627,1629,1632,1634,1636,1638],{"class":1082,"line":1626},26,[1080,1628,1094],{"class":1093},[1080,1630,1631],{"class":1097},"python.testing.pytestEnabled",[1080,1633,1101],{"class":1093},[1080,1635,1104],{"class":1086},[1080,1637,1298],{"class":1297},[1080,1639,1123],{"class":1086},[1080,1641,1643,1645,1648,1650,1652,1654],{"class":1082,"line":1642},27,[1080,1644,1094],{"class":1093},[1080,1646,1647],{"class":1097},"python.testing.unittestEnabled",[1080,1649,1101],{"class":1093},[1080,1651,1104],{"class":1086},[1080,1653,1329],{"class":1297},[1080,1655,1123],{"class":1086},[1080,1657,1659,1661,1664,1666,1668],{"class":1082,"line":1658},28,[1080,1660,1094],{"class":1093},[1080,1662,1663],{"class":1097},"python.testing.pytestArgs",[1080,1665,1101],{"class":1093},[1080,1667,1104],{"class":1086},[1080,1669,1107],{"class":1086},[1080,1671,1673,1675,1678],{"class":1082,"line":1672},29,[1080,1674,1114],{"class":1113},[1080,1676,1677],{"class":1117},".",[1080,1679,1230],{"class":1113},[1080,1681,1683],{"class":1082,"line":1682},30,[1080,1684,1236],{"class":1086},[1080,1686,1688],{"class":1082,"line":1687},31,[1080,1689,1242],{"class":1086},[1026,1691,1692],{},[1042,1693,1694],{},"Django Snippets:",[1070,1696,1698],{"className":1072,"code":1697,"language":1074,"meta":1075,"style":1075},"// .vscode/django.code-snippets\n{\n  \"Django Model\": {\n    \"prefix\": \"djmodel\",\n    \"body\": [\n      \"class ${1:ModelName}(models.Model):\",\n      \"    ${2:field_name} = models.${3:CharField}(max_length=${4:100})\",\n      \"    created_at = models.DateTimeField(auto_now_add=True)\",\n      \"    updated_at = models.DateTimeField(auto_now=True)\",\n      \"\",\n      \"    class Meta:\",\n      \"        verbose_name = '${5:Model Name}'\",\n      \"        verbose_name_plural = '${6:Model Names}'\",\n      \"\",\n      \"    def __str__(self):\",\n      \"        return self.${7:field_name}\"\n    ]\n  },\n  \"Django View\": {\n    \"prefix\": \"djview\",\n    \"body\": [\n      \"def ${1:view_name}(request):\",\n      \"    ${2:# View logic here}\",\n      \"    context = {\",\n      \"        '${3:key}': ${4:value},\",\n      \"    }\",\n      \"    return render(request, '${5:template.html}', context)\"\n    ]\n  }\n}\n",[1077,1699,1700,1705,1709,1722,1742,1755,1767,1778,1789,1800,1807,1818,1829,1840,1846,1857,1866,1871,1875,1888,1907,1919,1930,1941,1952,1963,1974,1983,1987,1992],{"__ignoreMap":1075},[1080,1701,1702],{"class":1082,"line":1083},[1080,1703,1704],{"class":1257},"// .vscode/django.code-snippets\n",[1080,1706,1707],{"class":1082,"line":1090},[1080,1708,1087],{"class":1086},[1080,1710,1711,1713,1716,1718,1720],{"class":1082,"line":1110},[1080,1712,1094],{"class":1093},[1080,1714,1715],{"class":1097},"Django Model",[1080,1717,1101],{"class":1093},[1080,1719,1104],{"class":1086},[1080,1721,1435],{"class":1086},[1080,1723,1724,1726,1729,1731,1733,1735,1738,1740],{"class":1082,"line":1126},[1080,1725,1114],{"class":1093},[1080,1727,1728],{"class":1442},"prefix",[1080,1730,1101],{"class":1093},[1080,1732,1104],{"class":1086},[1080,1734,1276],{"class":1113},[1080,1736,1737],{"class":1117},"djmodel",[1080,1739,1101],{"class":1113},[1080,1741,1123],{"class":1086},[1080,1743,1744,1746,1749,1751,1753],{"class":1082,"line":1138},[1080,1745,1114],{"class":1093},[1080,1747,1748],{"class":1442},"body",[1080,1750,1101],{"class":1093},[1080,1752,1104],{"class":1086},[1080,1754,1107],{"class":1086},[1080,1756,1757,1760,1763,1765],{"class":1082,"line":1150},[1080,1758,1759],{"class":1113},"      \"",[1080,1761,1762],{"class":1117},"class ${1:ModelName}(models.Model):",[1080,1764,1101],{"class":1113},[1080,1766,1123],{"class":1086},[1080,1768,1769,1771,1774,1776],{"class":1082,"line":1162},[1080,1770,1759],{"class":1113},[1080,1772,1773],{"class":1117},"    ${2:field_name} = models.${3:CharField}(max_length=${4:100})",[1080,1775,1101],{"class":1113},[1080,1777,1123],{"class":1086},[1080,1779,1780,1782,1785,1787],{"class":1082,"line":1174},[1080,1781,1759],{"class":1113},[1080,1783,1784],{"class":1117},"    created_at = models.DateTimeField(auto_now_add=True)",[1080,1786,1101],{"class":1113},[1080,1788,1123],{"class":1086},[1080,1790,1791,1793,1796,1798],{"class":1082,"line":1186},[1080,1792,1759],{"class":1113},[1080,1794,1795],{"class":1117},"    updated_at = models.DateTimeField(auto_now=True)",[1080,1797,1101],{"class":1113},[1080,1799,1123],{"class":1086},[1080,1801,1802,1805],{"class":1082,"line":1198},[1080,1803,1804],{"class":1113},"      \"\"",[1080,1806,1123],{"class":1086},[1080,1808,1809,1811,1814,1816],{"class":1082,"line":1210},[1080,1810,1759],{"class":1113},[1080,1812,1813],{"class":1117},"    class Meta:",[1080,1815,1101],{"class":1113},[1080,1817,1123],{"class":1086},[1080,1819,1820,1822,1825,1827],{"class":1082,"line":1222},[1080,1821,1759],{"class":1113},[1080,1823,1824],{"class":1117},"        verbose_name = '${5:Model Name}'",[1080,1826,1101],{"class":1113},[1080,1828,1123],{"class":1086},[1080,1830,1831,1833,1836,1838],{"class":1082,"line":1233},[1080,1832,1759],{"class":1113},[1080,1834,1835],{"class":1117},"        verbose_name_plural = '${6:Model Names}'",[1080,1837,1101],{"class":1113},[1080,1839,1123],{"class":1086},[1080,1841,1842,1844],{"class":1082,"line":1239},[1080,1843,1804],{"class":1113},[1080,1845,1123],{"class":1086},[1080,1847,1848,1850,1853,1855],{"class":1082,"line":1471},[1080,1849,1759],{"class":1113},[1080,1851,1852],{"class":1117},"    def __str__(self):",[1080,1854,1101],{"class":1113},[1080,1856,1123],{"class":1086},[1080,1858,1859,1861,1864],{"class":1082,"line":1492},[1080,1860,1759],{"class":1113},[1080,1862,1863],{"class":1117},"        return self.${7:field_name}",[1080,1865,1230],{"class":1113},[1080,1867,1868],{"class":1082,"line":1511},[1080,1869,1870],{"class":1086},"    ]\n",[1080,1872,1873],{"class":1082,"line":1516},[1080,1874,1455],{"class":1086},[1080,1876,1877,1879,1882,1884,1886],{"class":1082,"line":1530},[1080,1878,1094],{"class":1093},[1080,1880,1881],{"class":1097},"Django View",[1080,1883,1101],{"class":1093},[1080,1885,1104],{"class":1086},[1080,1887,1435],{"class":1086},[1080,1889,1890,1892,1894,1896,1898,1900,1903,1905],{"class":1082,"line":1548},[1080,1891,1114],{"class":1093},[1080,1893,1728],{"class":1442},[1080,1895,1101],{"class":1093},[1080,1897,1104],{"class":1086},[1080,1899,1276],{"class":1113},[1080,1901,1902],{"class":1117},"djview",[1080,1904,1101],{"class":1113},[1080,1906,1123],{"class":1086},[1080,1908,1909,1911,1913,1915,1917],{"class":1082,"line":1553},[1080,1910,1114],{"class":1093},[1080,1912,1748],{"class":1442},[1080,1914,1101],{"class":1093},[1080,1916,1104],{"class":1086},[1080,1918,1107],{"class":1086},[1080,1920,1921,1923,1926,1928],{"class":1082,"line":1567},[1080,1922,1759],{"class":1113},[1080,1924,1925],{"class":1117},"def ${1:view_name}(request):",[1080,1927,1101],{"class":1113},[1080,1929,1123],{"class":1086},[1080,1931,1932,1934,1937,1939],{"class":1082,"line":1585},[1080,1933,1759],{"class":1113},[1080,1935,1936],{"class":1117},"    ${2:# View logic here}",[1080,1938,1101],{"class":1113},[1080,1940,1123],{"class":1086},[1080,1942,1943,1945,1948,1950],{"class":1082,"line":1601},[1080,1944,1759],{"class":1113},[1080,1946,1947],{"class":1117},"    context = {",[1080,1949,1101],{"class":1113},[1080,1951,1123],{"class":1086},[1080,1953,1954,1956,1959,1961],{"class":1082,"line":1621},[1080,1955,1759],{"class":1113},[1080,1957,1958],{"class":1117},"        '${3:key}': ${4:value},",[1080,1960,1101],{"class":1113},[1080,1962,1123],{"class":1086},[1080,1964,1965,1967,1970,1972],{"class":1082,"line":1626},[1080,1966,1759],{"class":1113},[1080,1968,1969],{"class":1117},"    }",[1080,1971,1101],{"class":1113},[1080,1973,1123],{"class":1086},[1080,1975,1976,1978,1981],{"class":1082,"line":1642},[1080,1977,1759],{"class":1113},[1080,1979,1980],{"class":1117},"    return render(request, '${5:template.html}', context)",[1080,1982,1230],{"class":1113},[1080,1984,1985],{"class":1082,"line":1658},[1080,1986,1870],{"class":1086},[1080,1988,1989],{"class":1082,"line":1672},[1080,1990,1991],{"class":1086},"  }\n",[1080,1993,1994],{"class":1082,"line":1682},[1080,1995,1242],{"class":1086},[1035,1997,1999],{"id":1998},"pycharm-professional","PyCharm Professional",[1026,2001,2002],{},[1042,2003,2004],{},"Why PyCharm:",[1046,2006,2007,2010,2013,2016,2019],{},[1049,2008,2009],{},"Best-in-class Django support",[1049,2011,2012],{},"Advanced debugging and profiling",[1049,2014,2015],{},"Database integration",[1049,2017,2018],{},"Intelligent code completion",[1049,2020,2021],{},"Built-in version control",[1026,2023,2024],{},[1042,2025,2026],{},"Django Configuration:",[1070,2028,2032],{"className":2029,"code":2030,"language":2031,"meta":1075,"style":1075},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# PyCharm Django Settings\n# File → Settings → Languages & Frameworks → Django\n# Enable Django Support: ✓\n# Django project root: /path/to/your/project\n# Settings: myproject/settings.py\n# Manage script: manage.py\n","python",[1077,2033,2034,2039,2044,2049,2054,2059],{"__ignoreMap":1075},[1080,2035,2036],{"class":1082,"line":1083},[1080,2037,2038],{"class":1257},"# PyCharm Django Settings\n",[1080,2040,2041],{"class":1082,"line":1090},[1080,2042,2043],{"class":1257},"# File → Settings → Languages & Frameworks → Django\n",[1080,2045,2046],{"class":1082,"line":1110},[1080,2047,2048],{"class":1257},"# Enable Django Support: ✓\n",[1080,2050,2051],{"class":1082,"line":1126},[1080,2052,2053],{"class":1257},"# Django project root: /path/to/your/project\n",[1080,2055,2056],{"class":1082,"line":1138},[1080,2057,2058],{"class":1257},"# Settings: myproject/settings.py\n",[1080,2060,2061],{"class":1082,"line":1150},[1080,2062,2063],{"class":1257},"# Manage script: manage.py\n",[1026,2065,2066],{},[1042,2067,2068],{},"Useful PyCharm Features:",[1070,2070,2072],{"className":2029,"code":2071,"language":2031,"meta":1075,"style":1075},"# Live templates for Django\n# File → Settings → Editor → Live Templates → Django\n\n# Model template\nclass $MODEL_NAME$(models.Model):\n    $FIELD_NAME$ = models.$FIELD_TYPE$($FIELD_ARGS$)\n    created_at = models.DateTimeField(auto_now_add=True)\n    \n    def __str__(self):\n        return self.$RETURN_FIELD$\n\n# View template  \ndef $VIEW_NAME$(request$ARGS$):\n    $BODY$\n    return render(request, '$TEMPLATE$', $CONTEXT$)\n",[1077,2073,2074,2079,2084,2090,2095,2128,2165,2194,2199,2216,2235,2239,2244,2270,2279],{"__ignoreMap":1075},[1080,2075,2076],{"class":1082,"line":1083},[1080,2077,2078],{"class":1257},"# Live templates for Django\n",[1080,2080,2081],{"class":1082,"line":1090},[1080,2082,2083],{"class":1257},"# File → Settings → Editor → Live Templates → Django\n",[1080,2085,2086],{"class":1082,"line":1110},[1080,2087,2089],{"emptyLinePlaceholder":2088},true,"\n",[1080,2091,2092],{"class":1082,"line":1126},[1080,2093,2094],{"class":1257},"# Model template\n",[1080,2096,2097,2101,2105,2109,2112,2115,2119,2121,2125],{"class":1082,"line":1138},[1080,2098,2100],{"class":2099},"s5Kfy","class",[1080,2102,2104],{"class":2103},"srjyR"," $",[1080,2106,2108],{"class":2107},"se3Ec","MODEL_NAME",[1080,2110,2111],{"class":2103},"$",[1080,2113,2114],{"class":1086},"(",[1080,2116,2118],{"class":2117},"sftqT","models",[1080,2120,1677],{"class":1086},[1080,2122,2124],{"class":2123},"sBPpx","Model",[1080,2126,2127],{"class":1086},"):\n",[1080,2129,2130,2133,2136,2138,2141,2144,2146,2148,2151,2153,2155,2157,2160,2162],{"class":1082,"line":1150},[1080,2131,2132],{"class":2103},"    $",[1080,2134,2135],{"class":2107},"FIELD_NAME",[1080,2137,2111],{"class":2103},[1080,2139,2140],{"class":1086}," =",[1080,2142,2143],{"class":2117}," models",[1080,2145,1677],{"class":1086},[1080,2147,2111],{"class":2103},[1080,2149,2150],{"class":2107},"FIELD_TYPE",[1080,2152,2111],{"class":2103},[1080,2154,2114],{"class":1086},[1080,2156,2111],{"class":2103},[1080,2158,2159],{"class":2107},"FIELD_ARGS",[1080,2161,2111],{"class":2103},[1080,2163,2164],{"class":1086},")\n",[1080,2166,2167,2170,2173,2175,2177,2181,2183,2187,2189,2192],{"class":1082,"line":1162},[1080,2168,2169],{"class":2117},"    created_at ",[1080,2171,2172],{"class":1086},"=",[1080,2174,2143],{"class":2117},[1080,2176,1677],{"class":1086},[1080,2178,2180],{"class":2179},"siWMO","DateTimeField",[1080,2182,2114],{"class":1086},[1080,2184,2186],{"class":2185},"sqOPj","auto_now_add",[1080,2188,2172],{"class":1086},[1080,2190,2191],{"class":1297},"True",[1080,2193,2164],{"class":1086},[1080,2195,2196],{"class":1082,"line":1174},[1080,2197,2198],{"class":2117},"    \n",[1080,2200,2201,2204,2208,2210,2214],{"class":1082,"line":1186},[1080,2202,2203],{"class":2099},"    def",[1080,2205,2207],{"class":2206},"sJdAF"," __str__",[1080,2209,2114],{"class":1086},[1080,2211,2213],{"class":2212},"sRjD_","self",[1080,2215,2127],{"class":1086},[1080,2217,2218,2222,2225,2227,2229,2232],{"class":1082,"line":1198},[1080,2219,2221],{"class":2220},"siDh9","        return",[1080,2223,2224],{"class":2107}," self",[1080,2226,1677],{"class":1086},[1080,2228,2111],{"class":2103},[1080,2230,2231],{"class":2107},"RETURN_FIELD",[1080,2233,2234],{"class":2103},"$\n",[1080,2236,2237],{"class":1082,"line":1210},[1080,2238,2089],{"emptyLinePlaceholder":2088},[1080,2240,2241],{"class":1082,"line":1222},[1080,2242,2243],{"class":1257},"# View template  \n",[1080,2245,2246,2249,2251,2254,2256,2258,2261,2263,2266,2268],{"class":1082,"line":1233},[1080,2247,2248],{"class":2099},"def",[1080,2250,2104],{"class":2103},[1080,2252,2253],{"class":2107},"VIEW_NAME",[1080,2255,2111],{"class":2103},[1080,2257,2114],{"class":1086},[1080,2259,2260],{"class":2117},"request",[1080,2262,2111],{"class":2103},[1080,2264,2265],{"class":2107},"ARGS",[1080,2267,2111],{"class":2103},[1080,2269,2127],{"class":1086},[1080,2271,2272,2274,2277],{"class":1082,"line":1239},[1080,2273,2132],{"class":2103},[1080,2275,2276],{"class":2107},"BODY",[1080,2278,2234],{"class":2103},[1080,2280,2281,2284,2287,2289,2291,2293,2296,2299,2302,2304,2307,2311,2313],{"class":1082,"line":1471},[1080,2282,2283],{"class":2220},"    return",[1080,2285,2286],{"class":2179}," render",[1080,2288,2114],{"class":1086},[1080,2290,2260],{"class":2179},[1080,2292,1398],{"class":1086},[1080,2294,2295],{"class":1113}," '",[1080,2297,2298],{"class":1117},"$TEMPLATE$",[1080,2300,2301],{"class":1113},"'",[1080,2303,1398],{"class":1086},[1080,2305,2104],{"class":2306},"spT8q",[1080,2308,2310],{"class":2309},"s6DHA","CONTEXT",[1080,2312,2111],{"class":2306},[1080,2314,2164],{"class":1086},[1035,2316,2318],{"id":2317},"vimneovim-advanced-users","Vim/Neovim (Advanced Users)",[1026,2320,2321],{},[1042,2322,2323],{},"Essential Plugins:",[1070,2325,2329],{"className":2326,"code":2327,"language":2328,"meta":1075,"style":1075},"language-vim shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","\" .vimrc / init.vim\nPlug 'davidhalter/jedi-vim'          \" Python autocompletion\nPlug 'vim-python/python-syntax'      \" Python syntax highlighting\nPlug 'psf/black', { 'branch': 'stable' }  \" Code formatting\nPlug 'fisadev/vim-isort'             \" Import sorting\nPlug 'w0rp/ale'                      \" Linting\nPlug 'tpope/vim-fugitive'            \" Git integration\nPlug 'preservim/nerdtree'            \" File explorer\nPlug 'junegunn/fzf.vim'              \" Fuzzy finder\n\n\" Django-specific\nPlug 'tweekmonster/django-plus.vim'  \" Django enhancements\nPlug 'mjbrownie/django-template-textobjects'  \" Template objects\n","vim",[1077,2330,2331,2336,2341,2346,2351,2356,2361,2366,2371,2376,2380,2385,2390],{"__ignoreMap":1075},[1080,2332,2333],{"class":1082,"line":1083},[1080,2334,2335],{},"\" .vimrc / init.vim\n",[1080,2337,2338],{"class":1082,"line":1090},[1080,2339,2340],{},"Plug 'davidhalter/jedi-vim'          \" Python autocompletion\n",[1080,2342,2343],{"class":1082,"line":1110},[1080,2344,2345],{},"Plug 'vim-python/python-syntax'      \" Python syntax highlighting\n",[1080,2347,2348],{"class":1082,"line":1126},[1080,2349,2350],{},"Plug 'psf/black', { 'branch': 'stable' }  \" Code formatting\n",[1080,2352,2353],{"class":1082,"line":1138},[1080,2354,2355],{},"Plug 'fisadev/vim-isort'             \" Import sorting\n",[1080,2357,2358],{"class":1082,"line":1150},[1080,2359,2360],{},"Plug 'w0rp/ale'                      \" Linting\n",[1080,2362,2363],{"class":1082,"line":1162},[1080,2364,2365],{},"Plug 'tpope/vim-fugitive'            \" Git integration\n",[1080,2367,2368],{"class":1082,"line":1174},[1080,2369,2370],{},"Plug 'preservim/nerdtree'            \" File explorer\n",[1080,2372,2373],{"class":1082,"line":1186},[1080,2374,2375],{},"Plug 'junegunn/fzf.vim'              \" Fuzzy finder\n",[1080,2377,2378],{"class":1082,"line":1198},[1080,2379,2089],{"emptyLinePlaceholder":2088},[1080,2381,2382],{"class":1082,"line":1210},[1080,2383,2384],{},"\" Django-specific\n",[1080,2386,2387],{"class":1082,"line":1222},[1080,2388,2389],{},"Plug 'tweekmonster/django-plus.vim'  \" Django enhancements\n",[1080,2391,2392],{"class":1082,"line":1233},[1080,2393,2394],{},"Plug 'mjbrownie/django-template-textobjects'  \" Template objects\n",[1030,2396,2398],{"id":2397},"database-tools","Database Tools",[1035,2400,2402],{"id":2401},"postgresql-setup","PostgreSQL Setup",[1026,2404,2405],{},[1042,2406,2407],{},"Installation:",[1070,2409,2413],{"className":2410,"code":2411,"language":2412,"meta":1075,"style":1075},"language-bash shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# macOS\nbrew install postgresql\nbrew services start postgresql\n\n# Ubuntu/Debian\nsudo apt-get install postgresql postgresql-contrib\nsudo systemctl start postgresql\n\n# Create database and user\nsudo -u postgres psql\nCREATE DATABASE django_dev;\nCREATE USER django_user WITH PASSWORD 'secure_password';\nGRANT ALL PRIVILEGES ON DATABASE django_dev TO django_user;\n","bash",[1077,2414,2415,2420,2432,2444,2448,2453,2469,2480,2484,2489,2503,2517,2542],{"__ignoreMap":1075},[1080,2416,2417],{"class":1082,"line":1083},[1080,2418,2419],{"class":1257},"# macOS\n",[1080,2421,2422,2426,2429],{"class":1082,"line":1090},[1080,2423,2425],{"class":2424},"sYn-s","brew",[1080,2427,2428],{"class":1117}," install",[1080,2430,2431],{"class":1117}," postgresql\n",[1080,2433,2434,2436,2439,2442],{"class":1082,"line":1110},[1080,2435,2425],{"class":2424},[1080,2437,2438],{"class":1117}," services",[1080,2440,2441],{"class":1117}," start",[1080,2443,2431],{"class":1117},[1080,2445,2446],{"class":1082,"line":1126},[1080,2447,2089],{"emptyLinePlaceholder":2088},[1080,2449,2450],{"class":1082,"line":1138},[1080,2451,2452],{"class":1257},"# Ubuntu/Debian\n",[1080,2454,2455,2458,2461,2463,2466],{"class":1082,"line":1150},[1080,2456,2457],{"class":2424},"sudo",[1080,2459,2460],{"class":1117}," apt-get",[1080,2462,2428],{"class":1117},[1080,2464,2465],{"class":1117}," postgresql",[1080,2467,2468],{"class":1117}," postgresql-contrib\n",[1080,2470,2471,2473,2476,2478],{"class":1082,"line":1162},[1080,2472,2457],{"class":2424},[1080,2474,2475],{"class":1117}," systemctl",[1080,2477,2441],{"class":1117},[1080,2479,2431],{"class":1117},[1080,2481,2482],{"class":1082,"line":1174},[1080,2483,2089],{"emptyLinePlaceholder":2088},[1080,2485,2486],{"class":1082,"line":1186},[1080,2487,2488],{"class":1257},"# Create database and user\n",[1080,2490,2491,2493,2497,2500],{"class":1082,"line":1198},[1080,2492,2457],{"class":2424},[1080,2494,2496],{"class":2495},"sz9Cv"," -u",[1080,2498,2499],{"class":1117}," postgres",[1080,2501,2502],{"class":1117}," psql\n",[1080,2504,2505,2508,2511,2514],{"class":1082,"line":1210},[1080,2506,2507],{"class":2424},"CREATE",[1080,2509,2510],{"class":1117}," DATABASE",[1080,2512,2513],{"class":1117}," django_dev",[1080,2515,2516],{"class":1086},";\n",[1080,2518,2519,2521,2524,2527,2530,2533,2535,2538,2540],{"class":1082,"line":1222},[1080,2520,2507],{"class":2424},[1080,2522,2523],{"class":1117}," USER",[1080,2525,2526],{"class":1117}," django_user",[1080,2528,2529],{"class":1117}," WITH",[1080,2531,2532],{"class":1117}," PASSWORD",[1080,2534,2295],{"class":1113},[1080,2536,2537],{"class":1117},"secure_password",[1080,2539,2301],{"class":1113},[1080,2541,2516],{"class":1086},[1080,2543,2544,2547,2550,2553,2556,2558,2560,2563,2565],{"class":1082,"line":1233},[1080,2545,2546],{"class":2424},"GRANT",[1080,2548,2549],{"class":1117}," ALL",[1080,2551,2552],{"class":1117}," PRIVILEGES",[1080,2554,2555],{"class":1117}," ON",[1080,2557,2510],{"class":1117},[1080,2559,2513],{"class":1117},[1080,2561,2562],{"class":1117}," TO",[1080,2564,2526],{"class":1117},[1080,2566,2516],{"class":1086},[1026,2568,2569],{},[1042,2570,2571],{},"pgAdmin Configuration:",[1070,2573,2575],{"className":2029,"code":2574,"language":2031,"meta":1075,"style":1075},"# Django settings for PostgreSQL\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.postgresql',\n        'NAME': 'django_dev',\n        'USER': 'django_user',\n        'PASSWORD': 'secure_password',\n        'HOST': 'localhost',\n        'PORT': '5432',\n        'OPTIONS': {\n            'init_command': \"SET sql_mode='STRICT_TRANS_TABLES'\",\n        },\n    }\n}\n",[1077,2576,2577,2582,2591,2605,2626,2646,2666,2685,2705,2725,2738,2759,2764,2769],{"__ignoreMap":1075},[1080,2578,2579],{"class":1082,"line":1083},[1080,2580,2581],{"class":1257},"# Django settings for PostgreSQL\n",[1080,2583,2584,2587,2589],{"class":1082,"line":1090},[1080,2585,2586],{"class":2107},"DATABASES",[1080,2588,2140],{"class":1086},[1080,2590,1435],{"class":1086},[1080,2592,2593,2596,2599,2601,2603],{"class":1082,"line":1110},[1080,2594,2595],{"class":1113},"    '",[1080,2597,2598],{"class":1117},"default",[1080,2600,2301],{"class":1113},[1080,2602,1104],{"class":1086},[1080,2604,1435],{"class":1086},[1080,2606,2607,2610,2613,2615,2617,2619,2622,2624],{"class":1082,"line":1126},[1080,2608,2609],{"class":1113},"        '",[1080,2611,2612],{"class":1117},"ENGINE",[1080,2614,2301],{"class":1113},[1080,2616,1104],{"class":1086},[1080,2618,2295],{"class":1113},[1080,2620,2621],{"class":1117},"django.db.backends.postgresql",[1080,2623,2301],{"class":1113},[1080,2625,1123],{"class":1086},[1080,2627,2628,2630,2633,2635,2637,2639,2642,2644],{"class":1082,"line":1138},[1080,2629,2609],{"class":1113},[1080,2631,2632],{"class":1117},"NAME",[1080,2634,2301],{"class":1113},[1080,2636,1104],{"class":1086},[1080,2638,2295],{"class":1113},[1080,2640,2641],{"class":1117},"django_dev",[1080,2643,2301],{"class":1113},[1080,2645,1123],{"class":1086},[1080,2647,2648,2650,2653,2655,2657,2659,2662,2664],{"class":1082,"line":1150},[1080,2649,2609],{"class":1113},[1080,2651,2652],{"class":1117},"USER",[1080,2654,2301],{"class":1113},[1080,2656,1104],{"class":1086},[1080,2658,2295],{"class":1113},[1080,2660,2661],{"class":1117},"django_user",[1080,2663,2301],{"class":1113},[1080,2665,1123],{"class":1086},[1080,2667,2668,2670,2673,2675,2677,2679,2681,2683],{"class":1082,"line":1162},[1080,2669,2609],{"class":1113},[1080,2671,2672],{"class":1117},"PASSWORD",[1080,2674,2301],{"class":1113},[1080,2676,1104],{"class":1086},[1080,2678,2295],{"class":1113},[1080,2680,2537],{"class":1117},[1080,2682,2301],{"class":1113},[1080,2684,1123],{"class":1086},[1080,2686,2687,2689,2692,2694,2696,2698,2701,2703],{"class":1082,"line":1174},[1080,2688,2609],{"class":1113},[1080,2690,2691],{"class":1117},"HOST",[1080,2693,2301],{"class":1113},[1080,2695,1104],{"class":1086},[1080,2697,2295],{"class":1113},[1080,2699,2700],{"class":1117},"localhost",[1080,2702,2301],{"class":1113},[1080,2704,1123],{"class":1086},[1080,2706,2707,2709,2712,2714,2716,2718,2721,2723],{"class":1082,"line":1186},[1080,2708,2609],{"class":1113},[1080,2710,2711],{"class":1117},"PORT",[1080,2713,2301],{"class":1113},[1080,2715,1104],{"class":1086},[1080,2717,2295],{"class":1113},[1080,2719,2720],{"class":1117},"5432",[1080,2722,2301],{"class":1113},[1080,2724,1123],{"class":1086},[1080,2726,2727,2729,2732,2734,2736],{"class":1082,"line":1198},[1080,2728,2609],{"class":1113},[1080,2730,2731],{"class":1117},"OPTIONS",[1080,2733,2301],{"class":1113},[1080,2735,1104],{"class":1086},[1080,2737,1435],{"class":1086},[1080,2739,2740,2743,2746,2748,2750,2752,2755,2757],{"class":1082,"line":1210},[1080,2741,2742],{"class":1113},"            '",[1080,2744,2745],{"class":1117},"init_command",[1080,2747,2301],{"class":1113},[1080,2749,1104],{"class":1086},[1080,2751,1276],{"class":1113},[1080,2753,2754],{"class":1117},"SET sql_mode='STRICT_TRANS_TABLES'",[1080,2756,1101],{"class":1113},[1080,2758,1123],{"class":1086},[1080,2760,2761],{"class":1082,"line":1222},[1080,2762,2763],{"class":1086},"        },\n",[1080,2765,2766],{"class":1082,"line":1233},[1080,2767,2768],{"class":1086},"    }\n",[1080,2770,2771],{"class":1082,"line":1239},[1080,2772,1242],{"class":1086},[1035,2774,2776],{"id":2775},"database-gui-tools","Database GUI Tools",[1026,2778,2779],{},[1042,2780,2781],{},"DBeaver (Cross-platform):",[1070,2783,2787],{"className":2784,"code":2785,"language":2786,"meta":1075,"style":1075},"language-sql shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","-- Connection settings\nHost: localhost\nPort: 5432\nDatabase: django_dev\nUsername: django_user\nPassword: secure_password\n\n-- Useful queries for Django development\nSELECT * FROM django_migrations ORDER BY applied DESC LIMIT 10;\nSELECT * FROM auth_user WHERE is_superuser = true;\nSELECT table_name FROM information_schema.tables WHERE table_schema = 'public';\n","sql",[1077,2788,2789,2794,2799,2807,2816,2821,2829,2833,2838,2870,2892],{"__ignoreMap":1075},[1080,2790,2791],{"class":1082,"line":1083},[1080,2792,2793],{"class":1257},"-- Connection settings\n",[1080,2795,2796],{"class":1082,"line":1090},[1080,2797,2798],{"class":2117},"Host: localhost\n",[1080,2800,2801,2804],{"class":1082,"line":1110},[1080,2802,2803],{"class":2117},"Port: ",[1080,2805,2806],{"class":1579},"5432\n",[1080,2808,2809,2813],{"class":1082,"line":1126},[1080,2810,2812],{"class":2811},"scgAs","Database",[1080,2814,2815],{"class":2117},": django_dev\n",[1080,2817,2818],{"class":1082,"line":1138},[1080,2819,2820],{"class":2117},"Username: django_user\n",[1080,2822,2823,2826],{"class":1082,"line":1150},[1080,2824,2825],{"class":2811},"Password",[1080,2827,2828],{"class":2117},": secure_password\n",[1080,2830,2831],{"class":1082,"line":1162},[1080,2832,2089],{"emptyLinePlaceholder":2088},[1080,2834,2835],{"class":1082,"line":1174},[1080,2836,2837],{"class":1257},"-- Useful queries for Django development\n",[1080,2839,2840,2843,2847,2850,2853,2856,2859,2862,2865,2868],{"class":1082,"line":1186},[1080,2841,2842],{"class":2811},"SELECT",[1080,2844,2846],{"class":2845},"sVsLi"," *",[1080,2848,2849],{"class":2811}," FROM",[1080,2851,2852],{"class":2117}," django_migrations ",[1080,2854,2855],{"class":2811},"ORDER BY",[1080,2857,2858],{"class":2117}," applied ",[1080,2860,2861],{"class":2811},"DESC",[1080,2863,2864],{"class":2811}," LIMIT",[1080,2866,2867],{"class":1579}," 10",[1080,2869,2516],{"class":2117},[1080,2871,2872,2874,2876,2878,2881,2884,2887,2889],{"class":1082,"line":1198},[1080,2873,2842],{"class":2811},[1080,2875,2846],{"class":2845},[1080,2877,2849],{"class":2811},[1080,2879,2880],{"class":2117}," auth_user ",[1080,2882,2883],{"class":2811},"WHERE",[1080,2885,2886],{"class":2117}," is_superuser ",[1080,2888,2172],{"class":2845},[1080,2890,2891],{"class":2117}," true;\n",[1080,2893,2894,2896,2899,2902,2905,2907,2910,2913,2916,2918,2920,2923,2925],{"class":1082,"line":1210},[1080,2895,2842],{"class":2811},[1080,2897,2898],{"class":2117}," table_name ",[1080,2900,2901],{"class":2811},"FROM",[1080,2903,2904],{"class":2107}," information_schema",[1080,2906,1677],{"class":2117},[1080,2908,2909],{"class":2107},"tables",[1080,2911,2912],{"class":2811}," WHERE",[1080,2914,2915],{"class":2117}," table_schema ",[1080,2917,2172],{"class":2845},[1080,2919,2295],{"class":1113},[1080,2921,2922],{"class":1117},"public",[1080,2924,2301],{"class":1113},[1080,2926,2516],{"class":2117},[1026,2928,2929],{},[1042,2930,2931],{},"TablePlus (macOS/Windows):",[1046,2933,2934,2937,2940,2943],{},[1049,2935,2936],{},"Clean interface for database browsing",[1049,2938,2939],{},"Query editor with syntax highlighting",[1049,2941,2942],{},"Data export/import capabilities",[1049,2944,2945],{},"Multiple database support",[1030,2947,2949],{"id":2948},"version-control","Version Control",[1035,2951,2953],{"id":2952},"git-configuration","Git Configuration",[1026,2955,2956],{},[1042,2957,2958],{},"Global Git Setup:",[1070,2960,2962],{"className":2410,"code":2961,"language":2412,"meta":1075,"style":1075},"# Basic configuration\ngit config --global user.name \"Your Name\"\ngit config --global user.email \"your.email@example.com\"\ngit config --global init.defaultBranch main\n\n# Useful aliases\ngit config --global alias.co checkout\ngit config --global alias.br branch\ngit config --global alias.ci commit\ngit config --global alias.st status\ngit config --global alias.unstage 'reset HEAD --'\ngit config --global alias.last 'log -1 HEAD'\ngit config --global alias.visual '!gitk'\n\n# Better diff and merge tools\ngit config --global diff.tool vimdiff\ngit config --global merge.tool vimdiff\n",[1077,2963,2964,2969,2990,3008,3022,3026,3031,3045,3059,3073,3087,3106,3124,3142,3146,3151,3165],{"__ignoreMap":1075},[1080,2965,2966],{"class":1082,"line":1083},[1080,2967,2968],{"class":1257},"# Basic configuration\n",[1080,2970,2971,2974,2977,2980,2983,2985,2988],{"class":1082,"line":1090},[1080,2972,2973],{"class":2424},"git",[1080,2975,2976],{"class":1117}," config",[1080,2978,2979],{"class":2495}," --global",[1080,2981,2982],{"class":1117}," user.name",[1080,2984,1276],{"class":1113},[1080,2986,2987],{"class":1117},"Your Name",[1080,2989,1230],{"class":1113},[1080,2991,2992,2994,2996,2998,3001,3003,3006],{"class":1082,"line":1110},[1080,2993,2973],{"class":2424},[1080,2995,2976],{"class":1117},[1080,2997,2979],{"class":2495},[1080,2999,3000],{"class":1117}," user.email",[1080,3002,1276],{"class":1113},[1080,3004,3005],{"class":1117},"your.email@example.com",[1080,3007,1230],{"class":1113},[1080,3009,3010,3012,3014,3016,3019],{"class":1082,"line":1126},[1080,3011,2973],{"class":2424},[1080,3013,2976],{"class":1117},[1080,3015,2979],{"class":2495},[1080,3017,3018],{"class":1117}," init.defaultBranch",[1080,3020,3021],{"class":1117}," main\n",[1080,3023,3024],{"class":1082,"line":1138},[1080,3025,2089],{"emptyLinePlaceholder":2088},[1080,3027,3028],{"class":1082,"line":1150},[1080,3029,3030],{"class":1257},"# Useful aliases\n",[1080,3032,3033,3035,3037,3039,3042],{"class":1082,"line":1162},[1080,3034,2973],{"class":2424},[1080,3036,2976],{"class":1117},[1080,3038,2979],{"class":2495},[1080,3040,3041],{"class":1117}," alias.co",[1080,3043,3044],{"class":1117}," checkout\n",[1080,3046,3047,3049,3051,3053,3056],{"class":1082,"line":1174},[1080,3048,2973],{"class":2424},[1080,3050,2976],{"class":1117},[1080,3052,2979],{"class":2495},[1080,3054,3055],{"class":1117}," alias.br",[1080,3057,3058],{"class":1117}," branch\n",[1080,3060,3061,3063,3065,3067,3070],{"class":1082,"line":1186},[1080,3062,2973],{"class":2424},[1080,3064,2976],{"class":1117},[1080,3066,2979],{"class":2495},[1080,3068,3069],{"class":1117}," alias.ci",[1080,3071,3072],{"class":1117}," commit\n",[1080,3074,3075,3077,3079,3081,3084],{"class":1082,"line":1198},[1080,3076,2973],{"class":2424},[1080,3078,2976],{"class":1117},[1080,3080,2979],{"class":2495},[1080,3082,3083],{"class":1117}," alias.st",[1080,3085,3086],{"class":1117}," status\n",[1080,3088,3089,3091,3093,3095,3098,3100,3103],{"class":1082,"line":1210},[1080,3090,2973],{"class":2424},[1080,3092,2976],{"class":1117},[1080,3094,2979],{"class":2495},[1080,3096,3097],{"class":1117}," alias.unstage",[1080,3099,2295],{"class":1113},[1080,3101,3102],{"class":1117},"reset HEAD --",[1080,3104,3105],{"class":1113},"'\n",[1080,3107,3108,3110,3112,3114,3117,3119,3122],{"class":1082,"line":1222},[1080,3109,2973],{"class":2424},[1080,3111,2976],{"class":1117},[1080,3113,2979],{"class":2495},[1080,3115,3116],{"class":1117}," alias.last",[1080,3118,2295],{"class":1113},[1080,3120,3121],{"class":1117},"log -1 HEAD",[1080,3123,3105],{"class":1113},[1080,3125,3126,3128,3130,3132,3135,3137,3140],{"class":1082,"line":1233},[1080,3127,2973],{"class":2424},[1080,3129,2976],{"class":1117},[1080,3131,2979],{"class":2495},[1080,3133,3134],{"class":1117}," alias.visual",[1080,3136,2295],{"class":1113},[1080,3138,3139],{"class":1117},"!gitk",[1080,3141,3105],{"class":1113},[1080,3143,3144],{"class":1082,"line":1239},[1080,3145,2089],{"emptyLinePlaceholder":2088},[1080,3147,3148],{"class":1082,"line":1471},[1080,3149,3150],{"class":1257},"# Better diff and merge tools\n",[1080,3152,3153,3155,3157,3159,3162],{"class":1082,"line":1492},[1080,3154,2973],{"class":2424},[1080,3156,2976],{"class":1117},[1080,3158,2979],{"class":2495},[1080,3160,3161],{"class":1117}," diff.tool",[1080,3163,3164],{"class":1117}," vimdiff\n",[1080,3166,3167,3169,3171,3173,3176],{"class":1082,"line":1511},[1080,3168,2973],{"class":2424},[1080,3170,2976],{"class":1117},[1080,3172,2979],{"class":2495},[1080,3174,3175],{"class":1117}," merge.tool",[1080,3177,3164],{"class":1117},[1026,3179,3180],{},[1042,3181,3182],{},"Project-specific .gitignore:",[1070,3184,3188],{"className":3185,"code":3186,"language":3187,"meta":1075,"style":1075},"language-gitignore shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Django\n*.log\n*.pot\n*.pyc\n__pycache__/\nlocal_settings.py\ndb.sqlite3\ndb.sqlite3-journal\nmedia/\n\n# Virtual Environment\nvenv/\nenv/\nENV/\n\n# IDE\n.vscode/\n.idea/\n*.swp\n*.swo\n*~\n\n# OS\n.DS_Store\n.DS_Store?\n._*\n.Spotlight-V100\n.Trashes\nehthumbs.db\nThumbs.db\n\n# Environment variables\n.env\n.env.local\n.env.*.local\n\n# Static files\nstaticfiles/\nstatic_collected/\n\n# Node modules (if using frontend tools)\nnode_modules/\nnpm-debug.log*\n\n# Coverage reports\nhtmlcov/\n.coverage\n.coverage.*\ncoverage.xml\n*.cover\n.hypothesis/\n.pytest_cache/\n","gitignore",[1077,3189,3190,3195,3200,3205,3210,3215,3220,3225,3230,3235,3239,3244,3249,3254,3259,3263,3268,3273,3278,3283,3288,3293,3297,3302,3307,3312,3317,3322,3327,3332,3337,3341,3347,3353,3359,3365,3370,3376,3382,3388,3393,3399,3405,3411,3416,3422,3428,3434,3440,3446,3452,3458],{"__ignoreMap":1075},[1080,3191,3192],{"class":1082,"line":1083},[1080,3193,3194],{},"# Django\n",[1080,3196,3197],{"class":1082,"line":1090},[1080,3198,3199],{},"*.log\n",[1080,3201,3202],{"class":1082,"line":1110},[1080,3203,3204],{},"*.pot\n",[1080,3206,3207],{"class":1082,"line":1126},[1080,3208,3209],{},"*.pyc\n",[1080,3211,3212],{"class":1082,"line":1138},[1080,3213,3214],{},"__pycache__/\n",[1080,3216,3217],{"class":1082,"line":1150},[1080,3218,3219],{},"local_settings.py\n",[1080,3221,3222],{"class":1082,"line":1162},[1080,3223,3224],{},"db.sqlite3\n",[1080,3226,3227],{"class":1082,"line":1174},[1080,3228,3229],{},"db.sqlite3-journal\n",[1080,3231,3232],{"class":1082,"line":1186},[1080,3233,3234],{},"media/\n",[1080,3236,3237],{"class":1082,"line":1198},[1080,3238,2089],{"emptyLinePlaceholder":2088},[1080,3240,3241],{"class":1082,"line":1210},[1080,3242,3243],{},"# Virtual Environment\n",[1080,3245,3246],{"class":1082,"line":1222},[1080,3247,3248],{},"venv/\n",[1080,3250,3251],{"class":1082,"line":1233},[1080,3252,3253],{},"env/\n",[1080,3255,3256],{"class":1082,"line":1239},[1080,3257,3258],{},"ENV/\n",[1080,3260,3261],{"class":1082,"line":1471},[1080,3262,2089],{"emptyLinePlaceholder":2088},[1080,3264,3265],{"class":1082,"line":1492},[1080,3266,3267],{},"# IDE\n",[1080,3269,3270],{"class":1082,"line":1511},[1080,3271,3272],{},".vscode/\n",[1080,3274,3275],{"class":1082,"line":1516},[1080,3276,3277],{},".idea/\n",[1080,3279,3280],{"class":1082,"line":1530},[1080,3281,3282],{},"*.swp\n",[1080,3284,3285],{"class":1082,"line":1548},[1080,3286,3287],{},"*.swo\n",[1080,3289,3290],{"class":1082,"line":1553},[1080,3291,3292],{},"*~\n",[1080,3294,3295],{"class":1082,"line":1567},[1080,3296,2089],{"emptyLinePlaceholder":2088},[1080,3298,3299],{"class":1082,"line":1585},[1080,3300,3301],{},"# OS\n",[1080,3303,3304],{"class":1082,"line":1601},[1080,3305,3306],{},".DS_Store\n",[1080,3308,3309],{"class":1082,"line":1621},[1080,3310,3311],{},".DS_Store?\n",[1080,3313,3314],{"class":1082,"line":1626},[1080,3315,3316],{},"._*\n",[1080,3318,3319],{"class":1082,"line":1642},[1080,3320,3321],{},".Spotlight-V100\n",[1080,3323,3324],{"class":1082,"line":1658},[1080,3325,3326],{},".Trashes\n",[1080,3328,3329],{"class":1082,"line":1672},[1080,3330,3331],{},"ehthumbs.db\n",[1080,3333,3334],{"class":1082,"line":1682},[1080,3335,3336],{},"Thumbs.db\n",[1080,3338,3339],{"class":1082,"line":1687},[1080,3340,2089],{"emptyLinePlaceholder":2088},[1080,3342,3344],{"class":1082,"line":3343},32,[1080,3345,3346],{},"# Environment variables\n",[1080,3348,3350],{"class":1082,"line":3349},33,[1080,3351,3352],{},".env\n",[1080,3354,3356],{"class":1082,"line":3355},34,[1080,3357,3358],{},".env.local\n",[1080,3360,3362],{"class":1082,"line":3361},35,[1080,3363,3364],{},".env.*.local\n",[1080,3366,3368],{"class":1082,"line":3367},36,[1080,3369,2089],{"emptyLinePlaceholder":2088},[1080,3371,3373],{"class":1082,"line":3372},37,[1080,3374,3375],{},"# Static files\n",[1080,3377,3379],{"class":1082,"line":3378},38,[1080,3380,3381],{},"staticfiles/\n",[1080,3383,3385],{"class":1082,"line":3384},39,[1080,3386,3387],{},"static_collected/\n",[1080,3389,3391],{"class":1082,"line":3390},40,[1080,3392,2089],{"emptyLinePlaceholder":2088},[1080,3394,3396],{"class":1082,"line":3395},41,[1080,3397,3398],{},"# Node modules (if using frontend tools)\n",[1080,3400,3402],{"class":1082,"line":3401},42,[1080,3403,3404],{},"node_modules/\n",[1080,3406,3408],{"class":1082,"line":3407},43,[1080,3409,3410],{},"npm-debug.log*\n",[1080,3412,3414],{"class":1082,"line":3413},44,[1080,3415,2089],{"emptyLinePlaceholder":2088},[1080,3417,3419],{"class":1082,"line":3418},45,[1080,3420,3421],{},"# Coverage reports\n",[1080,3423,3425],{"class":1082,"line":3424},46,[1080,3426,3427],{},"htmlcov/\n",[1080,3429,3431],{"class":1082,"line":3430},47,[1080,3432,3433],{},".coverage\n",[1080,3435,3437],{"class":1082,"line":3436},48,[1080,3438,3439],{},".coverage.*\n",[1080,3441,3443],{"class":1082,"line":3442},49,[1080,3444,3445],{},"coverage.xml\n",[1080,3447,3449],{"class":1082,"line":3448},50,[1080,3450,3451],{},"*.cover\n",[1080,3453,3455],{"class":1082,"line":3454},51,[1080,3456,3457],{},".hypothesis/\n",[1080,3459,3461],{"class":1082,"line":3460},52,[1080,3462,3463],{},".pytest_cache/\n",[1035,3465,3467],{"id":3466},"pre-commit-hooks","Pre-commit Hooks",[1026,3469,3470],{},[1042,3471,3472],{},"Installation and Setup:",[1070,3474,3476],{"className":2410,"code":3475,"language":2412,"meta":1075,"style":1075},"# Install pre-commit\npip install pre-commit\n\n# Create .pre-commit-config.yaml\ncat > .pre-commit-config.yaml \u003C\u003C EOF\nrepos:\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v4.4.0\n    hooks:\n      - id: trailing-whitespace\n      - id: end-of-file-fixer\n      - id: check-yaml\n      - id: check-added-large-files\n      - id: check-merge-conflict\n\n  - repo: https://github.com/psf/black\n    rev: 23.9.1\n    hooks:\n      - id: black\n        language_version: python3\n\n  - repo: https://github.com/pycqa/isort\n    rev: 5.12.0\n    hooks:\n      - id: isort\n        args: [\"--profile\", \"black\"]\n\n  - repo: https://github.com/pycqa/flake8\n    rev: 6.1.0\n    hooks:\n      - id: flake8\n        args: [--max-line-length=88, --extend-ignore=E203]\n\n  - repo: https://github.com/pycqa/bandit\n    rev: 1.7.5\n    hooks:\n      - id: bandit\n        args: [\"-r\", \".\", \"-x\", \"tests/\"]\nEOF\n\n# Install the hooks\npre-commit install\n",[1077,3477,3478,3483,3493,3497,3502,3519,3524,3529,3534,3539,3544,3549,3554,3559,3564,3568,3573,3578,3582,3587,3592,3596,3601,3606,3610,3615,3620,3624,3629,3634,3638,3643,3648,3652,3657,3662,3666,3671,3676,3681,3685,3690],{"__ignoreMap":1075},[1080,3479,3480],{"class":1082,"line":1083},[1080,3481,3482],{"class":1257},"# Install pre-commit\n",[1080,3484,3485,3488,3490],{"class":1082,"line":1090},[1080,3486,3487],{"class":2424},"pip",[1080,3489,2428],{"class":1117},[1080,3491,3492],{"class":1117}," pre-commit\n",[1080,3494,3495],{"class":1082,"line":1110},[1080,3496,2089],{"emptyLinePlaceholder":2088},[1080,3498,3499],{"class":1082,"line":1126},[1080,3500,3501],{"class":1257},"# Create .pre-commit-config.yaml\n",[1080,3503,3504,3507,3510,3513,3516],{"class":1082,"line":1138},[1080,3505,3506],{"class":2424},"cat",[1080,3508,3509],{"class":2845}," >",[1080,3511,3512],{"class":1117}," .pre-commit-config.yaml",[1080,3514,3515],{"class":2845}," \u003C\u003C",[1080,3517,3518],{"class":1113}," EOF\n",[1080,3520,3521],{"class":1082,"line":1150},[1080,3522,3523],{"class":1117},"repos:\n",[1080,3525,3526],{"class":1082,"line":1162},[1080,3527,3528],{"class":1117},"  - repo: https://github.com/pre-commit/pre-commit-hooks\n",[1080,3530,3531],{"class":1082,"line":1174},[1080,3532,3533],{"class":1117},"    rev: v4.4.0\n",[1080,3535,3536],{"class":1082,"line":1186},[1080,3537,3538],{"class":1117},"    hooks:\n",[1080,3540,3541],{"class":1082,"line":1198},[1080,3542,3543],{"class":1117},"      - id: trailing-whitespace\n",[1080,3545,3546],{"class":1082,"line":1210},[1080,3547,3548],{"class":1117},"      - id: end-of-file-fixer\n",[1080,3550,3551],{"class":1082,"line":1222},[1080,3552,3553],{"class":1117},"      - id: check-yaml\n",[1080,3555,3556],{"class":1082,"line":1233},[1080,3557,3558],{"class":1117},"      - id: check-added-large-files\n",[1080,3560,3561],{"class":1082,"line":1239},[1080,3562,3563],{"class":1117},"      - id: check-merge-conflict\n",[1080,3565,3566],{"class":1082,"line":1471},[1080,3567,2089],{"emptyLinePlaceholder":2088},[1080,3569,3570],{"class":1082,"line":1492},[1080,3571,3572],{"class":1117},"  - repo: https://github.com/psf/black\n",[1080,3574,3575],{"class":1082,"line":1511},[1080,3576,3577],{"class":1117},"    rev: 23.9.1\n",[1080,3579,3580],{"class":1082,"line":1516},[1080,3581,3538],{"class":1117},[1080,3583,3584],{"class":1082,"line":1530},[1080,3585,3586],{"class":1117},"      - id: black\n",[1080,3588,3589],{"class":1082,"line":1548},[1080,3590,3591],{"class":1117},"        language_version: python3\n",[1080,3593,3594],{"class":1082,"line":1553},[1080,3595,2089],{"emptyLinePlaceholder":2088},[1080,3597,3598],{"class":1082,"line":1567},[1080,3599,3600],{"class":1117},"  - repo: https://github.com/pycqa/isort\n",[1080,3602,3603],{"class":1082,"line":1585},[1080,3604,3605],{"class":1117},"    rev: 5.12.0\n",[1080,3607,3608],{"class":1082,"line":1601},[1080,3609,3538],{"class":1117},[1080,3611,3612],{"class":1082,"line":1621},[1080,3613,3614],{"class":1117},"      - id: isort\n",[1080,3616,3617],{"class":1082,"line":1626},[1080,3618,3619],{"class":1117},"        args: [\"--profile\", \"black\"]\n",[1080,3621,3622],{"class":1082,"line":1642},[1080,3623,2089],{"emptyLinePlaceholder":2088},[1080,3625,3626],{"class":1082,"line":1658},[1080,3627,3628],{"class":1117},"  - repo: https://github.com/pycqa/flake8\n",[1080,3630,3631],{"class":1082,"line":1672},[1080,3632,3633],{"class":1117},"    rev: 6.1.0\n",[1080,3635,3636],{"class":1082,"line":1682},[1080,3637,3538],{"class":1117},[1080,3639,3640],{"class":1082,"line":1687},[1080,3641,3642],{"class":1117},"      - id: flake8\n",[1080,3644,3645],{"class":1082,"line":3343},[1080,3646,3647],{"class":1117},"        args: [--max-line-length=88, --extend-ignore=E203]\n",[1080,3649,3650],{"class":1082,"line":3349},[1080,3651,2089],{"emptyLinePlaceholder":2088},[1080,3653,3654],{"class":1082,"line":3355},[1080,3655,3656],{"class":1117},"  - repo: https://github.com/pycqa/bandit\n",[1080,3658,3659],{"class":1082,"line":3361},[1080,3660,3661],{"class":1117},"    rev: 1.7.5\n",[1080,3663,3664],{"class":1082,"line":3367},[1080,3665,3538],{"class":1117},[1080,3667,3668],{"class":1082,"line":3372},[1080,3669,3670],{"class":1117},"      - id: bandit\n",[1080,3672,3673],{"class":1082,"line":3378},[1080,3674,3675],{"class":1117},"        args: [\"-r\", \".\", \"-x\", \"tests/\"]\n",[1080,3677,3678],{"class":1082,"line":3384},[1080,3679,3680],{"class":1113},"EOF\n",[1080,3682,3683],{"class":1082,"line":3390},[1080,3684,2089],{"emptyLinePlaceholder":2088},[1080,3686,3687],{"class":1082,"line":3395},[1080,3688,3689],{"class":1257},"# Install the hooks\n",[1080,3691,3692,3695],{"class":1082,"line":3401},[1080,3693,3694],{"class":2424},"pre-commit",[1080,3696,3697],{"class":1117}," install\n",[1030,3699,3701],{"id":3700},"code-quality-tools","Code Quality Tools",[1035,3703,3705],{"id":3704},"linting-and-formatting","Linting and Formatting",[1026,3707,3708],{},[1042,3709,3710],{},"Black (Code Formatter):",[1070,3712,3716],{"className":3713,"code":3714,"language":3715,"meta":1075,"style":1075},"language-toml shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# pyproject.toml\n[tool.black]\nline-length = 88\ntarget-version = ['py38', 'py39', 'py310', 'py311']\ninclude = '\\.pyi?$'\nextend-exclude = '''\n/(\n  # directories\n  \\.eggs\n  | \\.git\n  | \\.hg\n  | \\.mypy_cache\n  | \\.tox\n  | \\.venv\n  | build\n  | dist\n  | migrations\n)/\n'''\n","toml",[1077,3717,3718,3723,3737,3748,3793,3807,3817,3822,3827,3832,3837,3842,3847,3852,3857,3862,3867,3872,3877],{"__ignoreMap":1075},[1080,3719,3720],{"class":1082,"line":1083},[1080,3721,3722],{"class":1257},"# pyproject.toml\n",[1080,3724,3725,3728,3731,3733,3735],{"class":1082,"line":1090},[1080,3726,3727],{"class":1086},"[",[1080,3729,3730],{"class":2424},"tool",[1080,3732,1677],{"class":2117},[1080,3734,1347],{"class":2424},[1080,3736,1618],{"class":1086},[1080,3738,3739,3743,3745],{"class":1082,"line":1110},[1080,3740,3742],{"class":3741},"sSC40","line-length",[1080,3744,2140],{"class":1086},[1080,3746,3747],{"class":1579}," 88\n",[1080,3749,3750,3753,3755,3757,3759,3762,3764,3766,3768,3771,3773,3775,3777,3780,3782,3784,3786,3789,3791],{"class":1082,"line":1126},[1080,3751,3752],{"class":3741},"target-version",[1080,3754,2140],{"class":1086},[1080,3756,1365],{"class":1086},[1080,3758,2301],{"class":1113},[1080,3760,3761],{"class":1117},"py38",[1080,3763,2301],{"class":1113},[1080,3765,1398],{"class":1086},[1080,3767,2295],{"class":1113},[1080,3769,3770],{"class":1117},"py39",[1080,3772,2301],{"class":1113},[1080,3774,1398],{"class":1086},[1080,3776,2295],{"class":1113},[1080,3778,3779],{"class":1117},"py310",[1080,3781,2301],{"class":1113},[1080,3783,1398],{"class":1086},[1080,3785,2295],{"class":1113},[1080,3787,3788],{"class":1117},"py311",[1080,3790,2301],{"class":1113},[1080,3792,1618],{"class":1086},[1080,3794,3795,3798,3800,3802,3805],{"class":1082,"line":1138},[1080,3796,3797],{"class":3741},"include",[1080,3799,2140],{"class":1086},[1080,3801,2295],{"class":1113},[1080,3803,3804],{"class":1117},"\\.pyi?$",[1080,3806,3105],{"class":1113},[1080,3808,3809,3812,3814],{"class":1082,"line":1150},[1080,3810,3811],{"class":3741},"extend-exclude",[1080,3813,2140],{"class":1086},[1080,3815,3816],{"class":1113}," '''\n",[1080,3818,3819],{"class":1082,"line":1162},[1080,3820,3821],{"class":1117},"/(\n",[1080,3823,3824],{"class":1082,"line":1174},[1080,3825,3826],{"class":1117},"  # directories\n",[1080,3828,3829],{"class":1082,"line":1186},[1080,3830,3831],{"class":1117},"  \\.eggs\n",[1080,3833,3834],{"class":1082,"line":1198},[1080,3835,3836],{"class":1117},"  | \\.git\n",[1080,3838,3839],{"class":1082,"line":1210},[1080,3840,3841],{"class":1117},"  | \\.hg\n",[1080,3843,3844],{"class":1082,"line":1222},[1080,3845,3846],{"class":1117},"  | \\.mypy_cache\n",[1080,3848,3849],{"class":1082,"line":1233},[1080,3850,3851],{"class":1117},"  | \\.tox\n",[1080,3853,3854],{"class":1082,"line":1239},[1080,3855,3856],{"class":1117},"  | \\.venv\n",[1080,3858,3859],{"class":1082,"line":1471},[1080,3860,3861],{"class":1117},"  | build\n",[1080,3863,3864],{"class":1082,"line":1492},[1080,3865,3866],{"class":1117},"  | dist\n",[1080,3868,3869],{"class":1082,"line":1511},[1080,3870,3871],{"class":1117},"  | migrations\n",[1080,3873,3874],{"class":1082,"line":1516},[1080,3875,3876],{"class":1117},")/\n",[1080,3878,3879],{"class":1082,"line":1530},[1080,3880,3881],{"class":1113},"'''\n",[1026,3883,3884],{},[1042,3885,3886],{},"isort (Import Sorting):",[1070,3888,3890],{"className":3713,"code":3889,"language":3715,"meta":1075,"style":1075},"# pyproject.toml\n[tool.isort]\nprofile = \"black\"\nmulti_line_output = 3\nline_length = 88\nknown_django = \"django\"\nknown_first_party = \"myproject\"\nsections = [\"FUTURE\", \"STDLIB\", \"DJANGO\", \"THIRDPARTY\", \"FIRSTPARTY\", \"LOCALFOLDER\"]\n",[1077,3891,3892,3896,3909,3922,3932,3941,3955,3969],{"__ignoreMap":1075},[1080,3893,3894],{"class":1082,"line":1083},[1080,3895,3722],{"class":1257},[1080,3897,3898,3900,3902,3904,3907],{"class":1082,"line":1090},[1080,3899,3727],{"class":1086},[1080,3901,3730],{"class":2424},[1080,3903,1677],{"class":2117},[1080,3905,3906],{"class":2424},"isort",[1080,3908,1618],{"class":1086},[1080,3910,3911,3914,3916,3918,3920],{"class":1082,"line":1110},[1080,3912,3913],{"class":3741},"profile",[1080,3915,2140],{"class":1086},[1080,3917,1276],{"class":1113},[1080,3919,1347],{"class":1117},[1080,3921,1230],{"class":1113},[1080,3923,3924,3927,3929],{"class":1082,"line":1126},[1080,3925,3926],{"class":3741},"multi_line_output",[1080,3928,2140],{"class":1086},[1080,3930,3931],{"class":1579}," 3\n",[1080,3933,3934,3937,3939],{"class":1082,"line":1138},[1080,3935,3936],{"class":3741},"line_length",[1080,3938,2140],{"class":1086},[1080,3940,3747],{"class":1579},[1080,3942,3943,3946,3948,3950,3953],{"class":1082,"line":1150},[1080,3944,3945],{"class":3741},"known_django",[1080,3947,2140],{"class":1086},[1080,3949,1276],{"class":1113},[1080,3951,3952],{"class":1117},"django",[1080,3954,1230],{"class":1113},[1080,3956,3957,3960,3962,3964,3967],{"class":1082,"line":1162},[1080,3958,3959],{"class":3741},"known_first_party",[1080,3961,2140],{"class":1086},[1080,3963,1276],{"class":1113},[1080,3965,3966],{"class":1117},"myproject",[1080,3968,1230],{"class":1113},[1080,3970,3971,3974,3976,3978,3980,3983,3985,3987,3989,3992,3994,3996,3998,4001,4003,4005,4007,4010,4012,4014,4016,4019,4021,4023,4025,4028,4030],{"class":1082,"line":1174},[1080,3972,3973],{"class":3741},"sections",[1080,3975,2140],{"class":1086},[1080,3977,1365],{"class":1086},[1080,3979,1101],{"class":1113},[1080,3981,3982],{"class":1117},"FUTURE",[1080,3984,1101],{"class":1113},[1080,3986,1398],{"class":1086},[1080,3988,1276],{"class":1113},[1080,3990,3991],{"class":1117},"STDLIB",[1080,3993,1101],{"class":1113},[1080,3995,1398],{"class":1086},[1080,3997,1276],{"class":1113},[1080,3999,4000],{"class":1117},"DJANGO",[1080,4002,1101],{"class":1113},[1080,4004,1398],{"class":1086},[1080,4006,1276],{"class":1113},[1080,4008,4009],{"class":1117},"THIRDPARTY",[1080,4011,1101],{"class":1113},[1080,4013,1398],{"class":1086},[1080,4015,1276],{"class":1113},[1080,4017,4018],{"class":1117},"FIRSTPARTY",[1080,4020,1101],{"class":1113},[1080,4022,1398],{"class":1086},[1080,4024,1276],{"class":1113},[1080,4026,4027],{"class":1117},"LOCALFOLDER",[1080,4029,1101],{"class":1113},[1080,4031,1618],{"class":1086},[1026,4033,4034],{},[1042,4035,4036],{},"Flake8 (Linting):",[1070,4038,4042],{"className":4039,"code":4040,"language":4041,"meta":1075,"style":1075},"language-ini shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# setup.cfg or .flake8\n[flake8]\nmax-line-length = 88\nextend-ignore = E203, E266, E501, W503\nmax-complexity = 10\nselect = B,C,E,F,W,T4,B9\nexclude = \n    .git,\n    __pycache__,\n    migrations,\n    .venv,\n    build,\n    dist\n","ini",[1077,4043,4044,4049,4054,4059,4064,4069,4074,4079,4084,4089,4094,4099,4104],{"__ignoreMap":1075},[1080,4045,4046],{"class":1082,"line":1083},[1080,4047,4048],{},"# setup.cfg or .flake8\n",[1080,4050,4051],{"class":1082,"line":1090},[1080,4052,4053],{},"[flake8]\n",[1080,4055,4056],{"class":1082,"line":1110},[1080,4057,4058],{},"max-line-length = 88\n",[1080,4060,4061],{"class":1082,"line":1126},[1080,4062,4063],{},"extend-ignore = E203, E266, E501, W503\n",[1080,4065,4066],{"class":1082,"line":1138},[1080,4067,4068],{},"max-complexity = 10\n",[1080,4070,4071],{"class":1082,"line":1150},[1080,4072,4073],{},"select = B,C,E,F,W,T4,B9\n",[1080,4075,4076],{"class":1082,"line":1162},[1080,4077,4078],{},"exclude = \n",[1080,4080,4081],{"class":1082,"line":1174},[1080,4082,4083],{},"    .git,\n",[1080,4085,4086],{"class":1082,"line":1186},[1080,4087,4088],{},"    __pycache__,\n",[1080,4090,4091],{"class":1082,"line":1198},[1080,4092,4093],{},"    migrations,\n",[1080,4095,4096],{"class":1082,"line":1210},[1080,4097,4098],{},"    .venv,\n",[1080,4100,4101],{"class":1082,"line":1222},[1080,4102,4103],{},"    build,\n",[1080,4105,4106],{"class":1082,"line":1233},[1080,4107,4108],{},"    dist\n",[1026,4110,4111],{},[1042,4112,4113],{},"Ruff (Fast Linter):",[1070,4115,4117],{"className":3713,"code":4116,"language":3715,"meta":1075,"style":1075},"# pyproject.toml\n[tool.ruff]\nline-length = 88\ntarget-version = \"py38\"\nselect = [\n    \"E\",  # pycodestyle errors\n    \"W\",  # pycodestyle warnings\n    \"F\",  # pyflakes\n    \"I\",  # isort\n    \"B\",  # flake8-bugbear\n    \"C4\", # flake8-comprehensions\n    \"UP\", # pyupgrade\n]\nignore = [\n    \"E501\",  # line too long, handled by black\n    \"B008\",  # do not perform function calls in argument defaults\n]\nexclude = [\n    \".git\",\n    \"__pycache__\",\n    \"migrations\",\n    \".venv\",\n]\n\n[tool.ruff.per-file-ignores]\n\"__init__.py\" = [\"F401\"]\n",[1077,4118,4119,4123,4136,4144,4156,4165,4179,4193,4207,4221,4235,4249,4263,4267,4276,4290,4304,4308,4317,4328,4339,4350,4361,4365,4369,4386],{"__ignoreMap":1075},[1080,4120,4121],{"class":1082,"line":1083},[1080,4122,3722],{"class":1257},[1080,4124,4125,4127,4129,4131,4134],{"class":1082,"line":1090},[1080,4126,3727],{"class":1086},[1080,4128,3730],{"class":2424},[1080,4130,1677],{"class":2117},[1080,4132,4133],{"class":2424},"ruff",[1080,4135,1618],{"class":1086},[1080,4137,4138,4140,4142],{"class":1082,"line":1110},[1080,4139,3742],{"class":3741},[1080,4141,2140],{"class":1086},[1080,4143,3747],{"class":1579},[1080,4145,4146,4148,4150,4152,4154],{"class":1082,"line":1126},[1080,4147,3752],{"class":3741},[1080,4149,2140],{"class":1086},[1080,4151,1276],{"class":1113},[1080,4153,3761],{"class":1117},[1080,4155,1230],{"class":1113},[1080,4157,4158,4161,4163],{"class":1082,"line":1138},[1080,4159,4160],{"class":3741},"select",[1080,4162,2140],{"class":1086},[1080,4164,1107],{"class":1086},[1080,4166,4167,4169,4172,4174,4176],{"class":1082,"line":1150},[1080,4168,1114],{"class":1113},[1080,4170,4171],{"class":1117},"E",[1080,4173,1101],{"class":1113},[1080,4175,1398],{"class":1086},[1080,4177,4178],{"class":1257},"  # pycodestyle errors\n",[1080,4180,4181,4183,4186,4188,4190],{"class":1082,"line":1162},[1080,4182,1114],{"class":1113},[1080,4184,4185],{"class":1117},"W",[1080,4187,1101],{"class":1113},[1080,4189,1398],{"class":1086},[1080,4191,4192],{"class":1257},"  # pycodestyle warnings\n",[1080,4194,4195,4197,4200,4202,4204],{"class":1082,"line":1174},[1080,4196,1114],{"class":1113},[1080,4198,4199],{"class":1117},"F",[1080,4201,1101],{"class":1113},[1080,4203,1398],{"class":1086},[1080,4205,4206],{"class":1257},"  # pyflakes\n",[1080,4208,4209,4211,4214,4216,4218],{"class":1082,"line":1186},[1080,4210,1114],{"class":1113},[1080,4212,4213],{"class":1117},"I",[1080,4215,1101],{"class":1113},[1080,4217,1398],{"class":1086},[1080,4219,4220],{"class":1257},"  # isort\n",[1080,4222,4223,4225,4228,4230,4232],{"class":1082,"line":1198},[1080,4224,1114],{"class":1113},[1080,4226,4227],{"class":1117},"B",[1080,4229,1101],{"class":1113},[1080,4231,1398],{"class":1086},[1080,4233,4234],{"class":1257},"  # flake8-bugbear\n",[1080,4236,4237,4239,4242,4244,4246],{"class":1082,"line":1210},[1080,4238,1114],{"class":1113},[1080,4240,4241],{"class":1117},"C4",[1080,4243,1101],{"class":1113},[1080,4245,1398],{"class":1086},[1080,4247,4248],{"class":1257}," # flake8-comprehensions\n",[1080,4250,4251,4253,4256,4258,4260],{"class":1082,"line":1222},[1080,4252,1114],{"class":1113},[1080,4254,4255],{"class":1117},"UP",[1080,4257,1101],{"class":1113},[1080,4259,1398],{"class":1086},[1080,4261,4262],{"class":1257}," # pyupgrade\n",[1080,4264,4265],{"class":1082,"line":1233},[1080,4266,1618],{"class":1086},[1080,4268,4269,4272,4274],{"class":1082,"line":1239},[1080,4270,4271],{"class":3741},"ignore",[1080,4273,2140],{"class":1086},[1080,4275,1107],{"class":1086},[1080,4277,4278,4280,4283,4285,4287],{"class":1082,"line":1471},[1080,4279,1114],{"class":1113},[1080,4281,4282],{"class":1117},"E501",[1080,4284,1101],{"class":1113},[1080,4286,1398],{"class":1086},[1080,4288,4289],{"class":1257},"  # line too long, handled by black\n",[1080,4291,4292,4294,4297,4299,4301],{"class":1082,"line":1492},[1080,4293,1114],{"class":1113},[1080,4295,4296],{"class":1117},"B008",[1080,4298,1101],{"class":1113},[1080,4300,1398],{"class":1086},[1080,4302,4303],{"class":1257},"  # do not perform function calls in argument defaults\n",[1080,4305,4306],{"class":1082,"line":1511},[1080,4307,1618],{"class":1086},[1080,4309,4310,4313,4315],{"class":1082,"line":1516},[1080,4311,4312],{"class":3741},"exclude",[1080,4314,2140],{"class":1086},[1080,4316,1107],{"class":1086},[1080,4318,4319,4321,4324,4326],{"class":1082,"line":1530},[1080,4320,1114],{"class":1113},[1080,4322,4323],{"class":1117},".git",[1080,4325,1101],{"class":1113},[1080,4327,1123],{"class":1086},[1080,4329,4330,4332,4335,4337],{"class":1082,"line":1548},[1080,4331,1114],{"class":1113},[1080,4333,4334],{"class":1117},"__pycache__",[1080,4336,1101],{"class":1113},[1080,4338,1123],{"class":1086},[1080,4340,4341,4343,4346,4348],{"class":1082,"line":1553},[1080,4342,1114],{"class":1113},[1080,4344,4345],{"class":1117},"migrations",[1080,4347,1101],{"class":1113},[1080,4349,1123],{"class":1086},[1080,4351,4352,4354,4357,4359],{"class":1082,"line":1567},[1080,4353,1114],{"class":1113},[1080,4355,4356],{"class":1117},".venv",[1080,4358,1101],{"class":1113},[1080,4360,1123],{"class":1086},[1080,4362,4363],{"class":1082,"line":1585},[1080,4364,1618],{"class":1086},[1080,4366,4367],{"class":1082,"line":1601},[1080,4368,2089],{"emptyLinePlaceholder":2088},[1080,4370,4371,4373,4375,4377,4379,4381,4384],{"class":1082,"line":1621},[1080,4372,3727],{"class":1086},[1080,4374,3730],{"class":2424},[1080,4376,1677],{"class":2117},[1080,4378,4133],{"class":2424},[1080,4380,1677],{"class":2117},[1080,4382,4383],{"class":2424},"per-file-ignores",[1080,4385,1618],{"class":1086},[1080,4387,4388,4390,4393,4395,4397,4399,4401,4404,4406],{"class":1082,"line":1626},[1080,4389,1101],{"class":1086},[1080,4391,4392],{"class":2117},"__init__.py",[1080,4394,1101],{"class":1086},[1080,4396,2140],{"class":1086},[1080,4398,1365],{"class":1086},[1080,4400,1101],{"class":1113},[1080,4402,4403],{"class":1117},"F401",[1080,4405,1101],{"class":1113},[1080,4407,1618],{"class":1086},[1035,4409,4411],{"id":4410},"type-checking","Type Checking",[1026,4413,4414],{},[1042,4415,4416],{},"mypy Configuration:",[1070,4418,4420],{"className":3713,"code":4419,"language":3715,"meta":1075,"style":1075},"# pyproject.toml\n[tool.mypy]\npython_version = \"3.8\"\ncheck_untyped_defs = true\nignore_missing_imports = true\nwarn_unused_ignores = true\nwarn_redundant_casts = true\nwarn_unused_configs = true\nplugins = [\"mypy_django_plugin.main\"]\n\n[tool.django-stubs]\ndjango_settings_module = \"myproject.settings\"\n\n[[tool.mypy.overrides]]\nmodule = \"*.migrations.*\"\nignore_errors = true\n",[1077,4421,4422,4426,4439,4453,4463,4472,4481,4490,4499,4517,4521,4534,4548,4552,4571,4585],{"__ignoreMap":1075},[1080,4423,4424],{"class":1082,"line":1083},[1080,4425,3722],{"class":1257},[1080,4427,4428,4430,4432,4434,4437],{"class":1082,"line":1090},[1080,4429,3727],{"class":1086},[1080,4431,3730],{"class":2424},[1080,4433,1677],{"class":2117},[1080,4435,4436],{"class":2424},"mypy",[1080,4438,1618],{"class":1086},[1080,4440,4441,4444,4446,4448,4451],{"class":1082,"line":1110},[1080,4442,4443],{"class":3741},"python_version",[1080,4445,2140],{"class":1086},[1080,4447,1276],{"class":1113},[1080,4449,4450],{"class":1117},"3.8",[1080,4452,1230],{"class":1113},[1080,4454,4455,4458,4460],{"class":1082,"line":1126},[1080,4456,4457],{"class":3741},"check_untyped_defs",[1080,4459,2140],{"class":1086},[1080,4461,1450],{"class":4462},"sq3J1",[1080,4464,4465,4468,4470],{"class":1082,"line":1138},[1080,4466,4467],{"class":3741},"ignore_missing_imports",[1080,4469,2140],{"class":1086},[1080,4471,1450],{"class":4462},[1080,4473,4474,4477,4479],{"class":1082,"line":1150},[1080,4475,4476],{"class":3741},"warn_unused_ignores",[1080,4478,2140],{"class":1086},[1080,4480,1450],{"class":4462},[1080,4482,4483,4486,4488],{"class":1082,"line":1162},[1080,4484,4485],{"class":3741},"warn_redundant_casts",[1080,4487,2140],{"class":1086},[1080,4489,1450],{"class":4462},[1080,4491,4492,4495,4497],{"class":1082,"line":1174},[1080,4493,4494],{"class":3741},"warn_unused_configs",[1080,4496,2140],{"class":1086},[1080,4498,1450],{"class":4462},[1080,4500,4501,4504,4506,4508,4510,4513,4515],{"class":1082,"line":1186},[1080,4502,4503],{"class":3741},"plugins",[1080,4505,2140],{"class":1086},[1080,4507,1365],{"class":1086},[1080,4509,1101],{"class":1113},[1080,4511,4512],{"class":1117},"mypy_django_plugin.main",[1080,4514,1101],{"class":1113},[1080,4516,1618],{"class":1086},[1080,4518,4519],{"class":1082,"line":1198},[1080,4520,2089],{"emptyLinePlaceholder":2088},[1080,4522,4523,4525,4527,4529,4532],{"class":1082,"line":1210},[1080,4524,3727],{"class":1086},[1080,4526,3730],{"class":2424},[1080,4528,1677],{"class":2117},[1080,4530,4531],{"class":2424},"django-stubs",[1080,4533,1618],{"class":1086},[1080,4535,4536,4539,4541,4543,4546],{"class":1082,"line":1222},[1080,4537,4538],{"class":3741},"django_settings_module",[1080,4540,2140],{"class":1086},[1080,4542,1276],{"class":1113},[1080,4544,4545],{"class":1117},"myproject.settings",[1080,4547,1230],{"class":1113},[1080,4549,4550],{"class":1082,"line":1233},[1080,4551,2089],{"emptyLinePlaceholder":2088},[1080,4553,4554,4557,4559,4561,4563,4565,4568],{"class":1082,"line":1239},[1080,4555,4556],{"class":1086},"[[",[1080,4558,3730],{"class":2424},[1080,4560,1677],{"class":2117},[1080,4562,4436],{"class":2424},[1080,4564,1677],{"class":2117},[1080,4566,4567],{"class":2424},"overrides",[1080,4569,4570],{"class":1086},"]]\n",[1080,4572,4573,4576,4578,4580,4583],{"class":1082,"line":1471},[1080,4574,4575],{"class":3741},"module",[1080,4577,2140],{"class":1086},[1080,4579,1276],{"class":1113},[1080,4581,4582],{"class":1117},"*.migrations.*",[1080,4584,1230],{"class":1113},[1080,4586,4587,4590,4592],{"class":1082,"line":1492},[1080,4588,4589],{"class":3741},"ignore_errors",[1080,4591,2140],{"class":1086},[1080,4593,1450],{"class":4462},[1030,4595,4597],{"id":4596},"testing-tools","Testing Tools",[1035,4599,4601],{"id":4600},"pytest-configuration","pytest Configuration",[1026,4603,4604],{},[1042,4605,2407],{},[1070,4607,4609],{"className":2410,"code":4608,"language":2412,"meta":1075,"style":1075},"pip install pytest pytest-django pytest-cov factory-boy\n",[1077,4610,4611],{"__ignoreMap":1075},[1080,4612,4613,4615,4617,4620,4623,4626],{"class":1082,"line":1083},[1080,4614,3487],{"class":2424},[1080,4616,2428],{"class":1117},[1080,4618,4619],{"class":1117}," pytest",[1080,4621,4622],{"class":1117}," pytest-django",[1080,4624,4625],{"class":1117}," pytest-cov",[1080,4627,4628],{"class":1117}," factory-boy\n",[1026,4630,4631],{},[1042,4632,4633],{},"Configuration:",[1070,4635,4637],{"className":3713,"code":4636,"language":3715,"meta":1075,"style":1075},"# pyproject.toml\n[tool.pytest.ini_options]\nDJANGO_SETTINGS_MODULE = \"myproject.settings.testing\"\npython_files = [\"tests.py\", \"test_*.py\", \"*_tests.py\"]\naddopts = [\n    \"--cov=myproject\",\n    \"--cov-report=html\",\n    \"--cov-report=term-missing\",\n    \"--cov-fail-under=80\",\n    \"--strict-markers\",\n    \"--strict-config\",\n    \"--disable-warnings\",\n]\ntestpaths = [\"tests\"]\nmarkers = [\n    \"slow: marks tests as slow (deselect with '-m \\\"not slow\\\"')\",\n    \"integration: marks tests as integration tests\",\n    \"unit: marks tests as unit tests\",\n]\n",[1077,4638,4639,4643,4661,4675,4711,4720,4731,4742,4753,4764,4775,4786,4797,4801,4819,4828,4850,4861,4872],{"__ignoreMap":1075},[1080,4640,4641],{"class":1082,"line":1083},[1080,4642,3722],{"class":1257},[1080,4644,4645,4647,4649,4651,4654,4656,4659],{"class":1082,"line":1090},[1080,4646,3727],{"class":1086},[1080,4648,3730],{"class":2424},[1080,4650,1677],{"class":2117},[1080,4652,4653],{"class":2424},"pytest",[1080,4655,1677],{"class":2117},[1080,4657,4658],{"class":2424},"ini_options",[1080,4660,1618],{"class":1086},[1080,4662,4663,4666,4668,4670,4673],{"class":1082,"line":1110},[1080,4664,4665],{"class":3741},"DJANGO_SETTINGS_MODULE",[1080,4667,2140],{"class":1086},[1080,4669,1276],{"class":1113},[1080,4671,4672],{"class":1117},"myproject.settings.testing",[1080,4674,1230],{"class":1113},[1080,4676,4677,4680,4682,4684,4686,4689,4691,4693,4695,4698,4700,4702,4704,4707,4709],{"class":1082,"line":1126},[1080,4678,4679],{"class":3741},"python_files",[1080,4681,2140],{"class":1086},[1080,4683,1365],{"class":1086},[1080,4685,1101],{"class":1113},[1080,4687,4688],{"class":1117},"tests.py",[1080,4690,1101],{"class":1113},[1080,4692,1398],{"class":1086},[1080,4694,1276],{"class":1113},[1080,4696,4697],{"class":1117},"test_*.py",[1080,4699,1101],{"class":1113},[1080,4701,1398],{"class":1086},[1080,4703,1276],{"class":1113},[1080,4705,4706],{"class":1117},"*_tests.py",[1080,4708,1101],{"class":1113},[1080,4710,1618],{"class":1086},[1080,4712,4713,4716,4718],{"class":1082,"line":1138},[1080,4714,4715],{"class":3741},"addopts",[1080,4717,2140],{"class":1086},[1080,4719,1107],{"class":1086},[1080,4721,4722,4724,4727,4729],{"class":1082,"line":1150},[1080,4723,1114],{"class":1113},[1080,4725,4726],{"class":1117},"--cov=myproject",[1080,4728,1101],{"class":1113},[1080,4730,1123],{"class":1086},[1080,4732,4733,4735,4738,4740],{"class":1082,"line":1162},[1080,4734,1114],{"class":1113},[1080,4736,4737],{"class":1117},"--cov-report=html",[1080,4739,1101],{"class":1113},[1080,4741,1123],{"class":1086},[1080,4743,4744,4746,4749,4751],{"class":1082,"line":1174},[1080,4745,1114],{"class":1113},[1080,4747,4748],{"class":1117},"--cov-report=term-missing",[1080,4750,1101],{"class":1113},[1080,4752,1123],{"class":1086},[1080,4754,4755,4757,4760,4762],{"class":1082,"line":1186},[1080,4756,1114],{"class":1113},[1080,4758,4759],{"class":1117},"--cov-fail-under=80",[1080,4761,1101],{"class":1113},[1080,4763,1123],{"class":1086},[1080,4765,4766,4768,4771,4773],{"class":1082,"line":1198},[1080,4767,1114],{"class":1113},[1080,4769,4770],{"class":1117},"--strict-markers",[1080,4772,1101],{"class":1113},[1080,4774,1123],{"class":1086},[1080,4776,4777,4779,4782,4784],{"class":1082,"line":1210},[1080,4778,1114],{"class":1113},[1080,4780,4781],{"class":1117},"--strict-config",[1080,4783,1101],{"class":1113},[1080,4785,1123],{"class":1086},[1080,4787,4788,4790,4793,4795],{"class":1082,"line":1222},[1080,4789,1114],{"class":1113},[1080,4791,4792],{"class":1117},"--disable-warnings",[1080,4794,1101],{"class":1113},[1080,4796,1123],{"class":1086},[1080,4798,4799],{"class":1082,"line":1233},[1080,4800,1618],{"class":1086},[1080,4802,4803,4806,4808,4810,4812,4815,4817],{"class":1082,"line":1239},[1080,4804,4805],{"class":3741},"testpaths",[1080,4807,2140],{"class":1086},[1080,4809,1365],{"class":1086},[1080,4811,1101],{"class":1113},[1080,4813,4814],{"class":1117},"tests",[1080,4816,1101],{"class":1113},[1080,4818,1618],{"class":1086},[1080,4820,4821,4824,4826],{"class":1082,"line":1471},[1080,4822,4823],{"class":3741},"markers",[1080,4825,2140],{"class":1086},[1080,4827,1107],{"class":1086},[1080,4829,4830,4832,4835,4838,4841,4843,4846,4848],{"class":1082,"line":1492},[1080,4831,1114],{"class":1113},[1080,4833,4834],{"class":1117},"slow: marks tests as slow (deselect with '-m ",[1080,4836,4837],{"class":2107},"\\\"",[1080,4839,4840],{"class":1117},"not slow",[1080,4842,4837],{"class":2107},[1080,4844,4845],{"class":1117},"')",[1080,4847,1101],{"class":1113},[1080,4849,1123],{"class":1086},[1080,4851,4852,4854,4857,4859],{"class":1082,"line":1511},[1080,4853,1114],{"class":1113},[1080,4855,4856],{"class":1117},"integration: marks tests as integration tests",[1080,4858,1101],{"class":1113},[1080,4860,1123],{"class":1086},[1080,4862,4863,4865,4868,4870],{"class":1082,"line":1516},[1080,4864,1114],{"class":1113},[1080,4866,4867],{"class":1117},"unit: marks tests as unit tests",[1080,4869,1101],{"class":1113},[1080,4871,1123],{"class":1086},[1080,4873,4874],{"class":1082,"line":1530},[1080,4875,1618],{"class":1086},[1026,4877,4878],{},[1042,4879,4880],{},"Factory Boy Setup:",[1070,4882,4884],{"className":2029,"code":4883,"language":2031,"meta":1075,"style":1075},"# tests/factories.py\nimport factory\nfrom django.contrib.auth.models import User\nfrom myapp.models import Post\n\nclass UserFactory(factory.django.DjangoModelFactory):\n    class Meta:\n        model = User\n    \n    username = factory.Sequence(lambda n: f\"user{n}\")\n    email = factory.LazyAttribute(lambda obj: f\"{obj.username}@example.com\")\n    first_name = factory.Faker(\"first_name\")\n    last_name = factory.Faker(\"last_name\")\n\nclass PostFactory(factory.django.DjangoModelFactory):\n    class Meta:\n        model = Post\n    \n    title = factory.Faker(\"sentence\", nb_words=4)\n    content = factory.Faker(\"text\")\n    author = factory.SubFactory(UserFactory)\n    published = True\n",[1077,4885,4886,4891,4899,4927,4943,4947,4971,4982,4991,4995,5041,5085,5110,5134,5138,5159,5167,5175,5179,5213,5237,5258],{"__ignoreMap":1075},[1080,4887,4888],{"class":1082,"line":1083},[1080,4889,4890],{"class":1257},"# tests/factories.py\n",[1080,4892,4893,4896],{"class":1082,"line":1090},[1080,4894,4895],{"class":2220},"import",[1080,4897,4898],{"class":2117}," factory\n",[1080,4900,4901,4904,4907,4909,4912,4914,4917,4919,4922,4924],{"class":1082,"line":1110},[1080,4902,4903],{"class":2220},"from",[1080,4905,4906],{"class":2117}," django",[1080,4908,1677],{"class":1086},[1080,4910,4911],{"class":2117},"contrib",[1080,4913,1677],{"class":1086},[1080,4915,4916],{"class":2117},"auth",[1080,4918,1677],{"class":1086},[1080,4920,4921],{"class":2117},"models ",[1080,4923,4895],{"class":2220},[1080,4925,4926],{"class":2117}," User\n",[1080,4928,4929,4931,4934,4936,4938,4940],{"class":1082,"line":1126},[1080,4930,4903],{"class":2220},[1080,4932,4933],{"class":2117}," myapp",[1080,4935,1677],{"class":1086},[1080,4937,4921],{"class":2117},[1080,4939,4895],{"class":2220},[1080,4941,4942],{"class":2117}," Post\n",[1080,4944,4945],{"class":1082,"line":1138},[1080,4946,2089],{"emptyLinePlaceholder":2088},[1080,4948,4949,4951,4955,4957,4960,4962,4964,4966,4969],{"class":1082,"line":1150},[1080,4950,2100],{"class":2099},[1080,4952,4954],{"class":4953},"sD-vU"," UserFactory",[1080,4956,2114],{"class":1086},[1080,4958,4959],{"class":2424},"factory",[1080,4961,1677],{"class":1086},[1080,4963,3952],{"class":2424},[1080,4965,1677],{"class":1086},[1080,4967,4968],{"class":2424},"DjangoModelFactory",[1080,4970,2127],{"class":1086},[1080,4972,4973,4976,4979],{"class":1082,"line":1162},[1080,4974,4975],{"class":2099},"    class",[1080,4977,4978],{"class":4953}," Meta",[1080,4980,4981],{"class":1086},":\n",[1080,4983,4984,4987,4989],{"class":1082,"line":1174},[1080,4985,4986],{"class":2117},"        model ",[1080,4988,2172],{"class":1086},[1080,4990,4926],{"class":2117},[1080,4992,4993],{"class":1082,"line":1186},[1080,4994,2198],{"class":2117},[1080,4996,4997,5000,5002,5005,5007,5010,5012,5015,5019,5021,5024,5027,5031,5034,5037,5039],{"class":1082,"line":1198},[1080,4998,4999],{"class":2117},"    username ",[1080,5001,2172],{"class":1086},[1080,5003,5004],{"class":2117}," factory",[1080,5006,1677],{"class":1086},[1080,5008,5009],{"class":2179},"Sequence",[1080,5011,2114],{"class":1086},[1080,5013,5014],{"class":2099},"lambda",[1080,5016,5018],{"class":5017},"sCyAa"," n",[1080,5020,1104],{"class":1086},[1080,5022,5023],{"class":2099}," f",[1080,5025,5026],{"class":1117},"\"user",[1080,5028,5030],{"class":5029},"s3h35","{",[1080,5032,5033],{"class":2179},"n",[1080,5035,5036],{"class":5029},"}",[1080,5038,1101],{"class":1117},[1080,5040,2164],{"class":1086},[1080,5042,5043,5046,5048,5050,5052,5055,5057,5059,5062,5064,5066,5068,5070,5073,5075,5078,5080,5083],{"class":1082,"line":1210},[1080,5044,5045],{"class":2117},"    email ",[1080,5047,2172],{"class":1086},[1080,5049,5004],{"class":2117},[1080,5051,1677],{"class":1086},[1080,5053,5054],{"class":2179},"LazyAttribute",[1080,5056,2114],{"class":1086},[1080,5058,5014],{"class":2099},[1080,5060,5061],{"class":5017}," obj",[1080,5063,1104],{"class":1086},[1080,5065,5023],{"class":2099},[1080,5067,1101],{"class":1117},[1080,5069,5030],{"class":5029},[1080,5071,5072],{"class":2179},"obj",[1080,5074,1677],{"class":1086},[1080,5076,5077],{"class":2123},"username",[1080,5079,5036],{"class":5029},[1080,5081,5082],{"class":1117},"@example.com\"",[1080,5084,2164],{"class":1086},[1080,5086,5087,5090,5092,5094,5096,5099,5101,5103,5106,5108],{"class":1082,"line":1222},[1080,5088,5089],{"class":2117},"    first_name ",[1080,5091,2172],{"class":1086},[1080,5093,5004],{"class":2117},[1080,5095,1677],{"class":1086},[1080,5097,5098],{"class":2179},"Faker",[1080,5100,2114],{"class":1086},[1080,5102,1101],{"class":1113},[1080,5104,5105],{"class":1117},"first_name",[1080,5107,1101],{"class":1113},[1080,5109,2164],{"class":1086},[1080,5111,5112,5115,5117,5119,5121,5123,5125,5127,5130,5132],{"class":1082,"line":1233},[1080,5113,5114],{"class":2117},"    last_name ",[1080,5116,2172],{"class":1086},[1080,5118,5004],{"class":2117},[1080,5120,1677],{"class":1086},[1080,5122,5098],{"class":2179},[1080,5124,2114],{"class":1086},[1080,5126,1101],{"class":1113},[1080,5128,5129],{"class":1117},"last_name",[1080,5131,1101],{"class":1113},[1080,5133,2164],{"class":1086},[1080,5135,5136],{"class":1082,"line":1239},[1080,5137,2089],{"emptyLinePlaceholder":2088},[1080,5139,5140,5142,5145,5147,5149,5151,5153,5155,5157],{"class":1082,"line":1471},[1080,5141,2100],{"class":2099},[1080,5143,5144],{"class":4953}," PostFactory",[1080,5146,2114],{"class":1086},[1080,5148,4959],{"class":2424},[1080,5150,1677],{"class":1086},[1080,5152,3952],{"class":2424},[1080,5154,1677],{"class":1086},[1080,5156,4968],{"class":2424},[1080,5158,2127],{"class":1086},[1080,5160,5161,5163,5165],{"class":1082,"line":1492},[1080,5162,4975],{"class":2099},[1080,5164,4978],{"class":4953},[1080,5166,4981],{"class":1086},[1080,5168,5169,5171,5173],{"class":1082,"line":1511},[1080,5170,4986],{"class":2117},[1080,5172,2172],{"class":1086},[1080,5174,4942],{"class":2117},[1080,5176,5177],{"class":1082,"line":1516},[1080,5178,2198],{"class":2117},[1080,5180,5181,5184,5186,5188,5190,5192,5194,5196,5199,5201,5203,5206,5208,5211],{"class":1082,"line":1530},[1080,5182,5183],{"class":2117},"    title ",[1080,5185,2172],{"class":1086},[1080,5187,5004],{"class":2117},[1080,5189,1677],{"class":1086},[1080,5191,5098],{"class":2179},[1080,5193,2114],{"class":1086},[1080,5195,1101],{"class":1113},[1080,5197,5198],{"class":1117},"sentence",[1080,5200,1101],{"class":1113},[1080,5202,1398],{"class":1086},[1080,5204,5205],{"class":2185}," nb_words",[1080,5207,2172],{"class":1086},[1080,5209,5210],{"class":1579},"4",[1080,5212,2164],{"class":1086},[1080,5214,5215,5218,5220,5222,5224,5226,5228,5230,5233,5235],{"class":1082,"line":1548},[1080,5216,5217],{"class":2117},"    content ",[1080,5219,2172],{"class":1086},[1080,5221,5004],{"class":2117},[1080,5223,1677],{"class":1086},[1080,5225,5098],{"class":2179},[1080,5227,2114],{"class":1086},[1080,5229,1101],{"class":1113},[1080,5231,5232],{"class":1117},"text",[1080,5234,1101],{"class":1113},[1080,5236,2164],{"class":1086},[1080,5238,5239,5242,5244,5246,5248,5251,5253,5256],{"class":1082,"line":1553},[1080,5240,5241],{"class":2117},"    author ",[1080,5243,2172],{"class":1086},[1080,5245,5004],{"class":2117},[1080,5247,1677],{"class":1086},[1080,5249,5250],{"class":2179},"SubFactory",[1080,5252,2114],{"class":1086},[1080,5254,5255],{"class":2179},"UserFactory",[1080,5257,2164],{"class":1086},[1080,5259,5260,5263,5265],{"class":1082,"line":1567},[1080,5261,5262],{"class":2117},"    published ",[1080,5264,2172],{"class":1086},[1080,5266,5267],{"class":1297}," True\n",[1030,5269,5271],{"id":5270},"debugging-tools","Debugging Tools",[1035,5273,5275],{"id":5274},"django-debug-toolbar","Django Debug Toolbar",[1026,5277,5278],{},[1042,5279,3472],{},[1070,5281,5283],{"className":2410,"code":5282,"language":2412,"meta":1075,"style":1075},"pip install django-debug-toolbar\n",[1077,5284,5285],{"__ignoreMap":1075},[1080,5286,5287,5289,5291],{"class":1082,"line":1083},[1080,5288,3487],{"class":2424},[1080,5290,2428],{"class":1117},[1080,5292,5293],{"class":1117}," django-debug-toolbar\n",[1070,5295,5297],{"className":2029,"code":5296,"language":2031,"meta":1075,"style":1075},"# settings/development.py\nINSTALLED_APPS += ['debug_toolbar']\nMIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware']\n\nDEBUG_TOOLBAR_CONFIG = {\n    'SHOW_TOOLBAR_CALLBACK': lambda request: True,\n    'SHOW_COLLAPSED': True,\n}\n\n# urls.py\nif settings.DEBUG:\n    import debug_toolbar\n    urlpatterns = [\n        path('__debug__/', include(debug_toolbar.urls)),\n    ] + urlpatterns\n",[1077,5298,5299,5304,5323,5341,5345,5354,5378,5393,5397,5401,5406,5422,5430,5439,5470],{"__ignoreMap":1075},[1080,5300,5301],{"class":1082,"line":1083},[1080,5302,5303],{"class":1257},"# settings/development.py\n",[1080,5305,5306,5309,5312,5314,5316,5319,5321],{"class":1082,"line":1090},[1080,5307,5308],{"class":2107},"INSTALLED_APPS",[1080,5310,5311],{"class":1086}," +=",[1080,5313,1365],{"class":1086},[1080,5315,2301],{"class":1113},[1080,5317,5318],{"class":1117},"debug_toolbar",[1080,5320,2301],{"class":1113},[1080,5322,1618],{"class":1086},[1080,5324,5325,5328,5330,5332,5334,5337,5339],{"class":1082,"line":1110},[1080,5326,5327],{"class":2107},"MIDDLEWARE",[1080,5329,5311],{"class":1086},[1080,5331,1365],{"class":1086},[1080,5333,2301],{"class":1113},[1080,5335,5336],{"class":1117},"debug_toolbar.middleware.DebugToolbarMiddleware",[1080,5338,2301],{"class":1113},[1080,5340,1618],{"class":1086},[1080,5342,5343],{"class":1082,"line":1126},[1080,5344,2089],{"emptyLinePlaceholder":2088},[1080,5346,5347,5350,5352],{"class":1082,"line":1138},[1080,5348,5349],{"class":2107},"DEBUG_TOOLBAR_CONFIG",[1080,5351,2140],{"class":1086},[1080,5353,1435],{"class":1086},[1080,5355,5356,5358,5361,5363,5365,5368,5371,5373,5376],{"class":1082,"line":1150},[1080,5357,2595],{"class":1113},[1080,5359,5360],{"class":1117},"SHOW_TOOLBAR_CALLBACK",[1080,5362,2301],{"class":1113},[1080,5364,1104],{"class":1086},[1080,5366,5367],{"class":2099}," lambda",[1080,5369,5370],{"class":5017}," request",[1080,5372,1104],{"class":1086},[1080,5374,5375],{"class":1297}," True",[1080,5377,1123],{"class":1086},[1080,5379,5380,5382,5385,5387,5389,5391],{"class":1082,"line":1162},[1080,5381,2595],{"class":1113},[1080,5383,5384],{"class":1117},"SHOW_COLLAPSED",[1080,5386,2301],{"class":1113},[1080,5388,1104],{"class":1086},[1080,5390,5375],{"class":1297},[1080,5392,1123],{"class":1086},[1080,5394,5395],{"class":1082,"line":1174},[1080,5396,1242],{"class":1086},[1080,5398,5399],{"class":1082,"line":1186},[1080,5400,2089],{"emptyLinePlaceholder":2088},[1080,5402,5403],{"class":1082,"line":1198},[1080,5404,5405],{"class":1257},"# urls.py\n",[1080,5407,5408,5411,5414,5416,5420],{"class":1082,"line":1210},[1080,5409,5410],{"class":2220},"if",[1080,5412,5413],{"class":2117}," settings",[1080,5415,1677],{"class":1086},[1080,5417,5419],{"class":5418},"sFGJz","DEBUG",[1080,5421,4981],{"class":1086},[1080,5423,5424,5427],{"class":1082,"line":1222},[1080,5425,5426],{"class":2220},"    import",[1080,5428,5429],{"class":2117}," debug_toolbar\n",[1080,5431,5432,5435,5437],{"class":1082,"line":1233},[1080,5433,5434],{"class":2117},"    urlpatterns ",[1080,5436,2172],{"class":1086},[1080,5438,1107],{"class":1086},[1080,5440,5441,5444,5446,5448,5451,5453,5455,5458,5460,5462,5464,5467],{"class":1082,"line":1239},[1080,5442,5443],{"class":2179},"        path",[1080,5445,2114],{"class":1086},[1080,5447,2301],{"class":1113},[1080,5449,5450],{"class":1117},"__debug__/",[1080,5452,2301],{"class":1113},[1080,5454,1398],{"class":1086},[1080,5456,5457],{"class":2179}," include",[1080,5459,2114],{"class":1086},[1080,5461,5318],{"class":2179},[1080,5463,1677],{"class":1086},[1080,5465,5466],{"class":2123},"urls",[1080,5468,5469],{"class":1086},")),\n",[1080,5471,5472,5475,5478],{"class":1082,"line":1471},[1080,5473,5474],{"class":1086},"    ]",[1080,5476,5477],{"class":2845}," +",[1080,5479,5480],{"class":2117}," urlpatterns\n",[1035,5482,5484],{"id":5483},"django-extensions","Django Extensions",[1026,5486,5487],{},[1042,5488,2407],{},[1070,5490,5492],{"className":2410,"code":5491,"language":2412,"meta":1075,"style":1075},"pip install django-extensions\n",[1077,5493,5494],{"__ignoreMap":1075},[1080,5495,5496,5498,5500],{"class":1082,"line":1083},[1080,5497,3487],{"class":2424},[1080,5499,2428],{"class":1117},[1080,5501,5502],{"class":1117}," django-extensions\n",[1026,5504,5505],{},[1042,5506,5507],{},"Useful Commands:",[1070,5509,5511],{"className":2410,"code":5510,"language":2412,"meta":1075,"style":1075},"# Enhanced shell with IPython\npython manage.py shell_plus\n\n# Generate model graphs\npython manage.py graph_models -a -o models.png\n\n# Show URLs\npython manage.py show_urls\n\n# Validate templates\npython manage.py validate_templates\n\n# Clear cache\npython manage.py clear_cache\n\n# Reset database\npython manage.py reset_db\n",[1077,5512,5513,5518,5528,5532,5537,5555,5559,5564,5573,5577,5582,5591,5595,5600,5609,5613,5618],{"__ignoreMap":1075},[1080,5514,5515],{"class":1082,"line":1083},[1080,5516,5517],{"class":1257},"# Enhanced shell with IPython\n",[1080,5519,5520,5522,5525],{"class":1082,"line":1090},[1080,5521,2031],{"class":2424},[1080,5523,5524],{"class":1117}," manage.py",[1080,5526,5527],{"class":1117}," shell_plus\n",[1080,5529,5530],{"class":1082,"line":1110},[1080,5531,2089],{"emptyLinePlaceholder":2088},[1080,5533,5534],{"class":1082,"line":1126},[1080,5535,5536],{"class":1257},"# Generate model graphs\n",[1080,5538,5539,5541,5543,5546,5549,5552],{"class":1082,"line":1138},[1080,5540,2031],{"class":2424},[1080,5542,5524],{"class":1117},[1080,5544,5545],{"class":1117}," graph_models",[1080,5547,5548],{"class":2495}," -a",[1080,5550,5551],{"class":2495}," -o",[1080,5553,5554],{"class":1117}," models.png\n",[1080,5556,5557],{"class":1082,"line":1150},[1080,5558,2089],{"emptyLinePlaceholder":2088},[1080,5560,5561],{"class":1082,"line":1162},[1080,5562,5563],{"class":1257},"# Show URLs\n",[1080,5565,5566,5568,5570],{"class":1082,"line":1174},[1080,5567,2031],{"class":2424},[1080,5569,5524],{"class":1117},[1080,5571,5572],{"class":1117}," show_urls\n",[1080,5574,5575],{"class":1082,"line":1186},[1080,5576,2089],{"emptyLinePlaceholder":2088},[1080,5578,5579],{"class":1082,"line":1198},[1080,5580,5581],{"class":1257},"# Validate templates\n",[1080,5583,5584,5586,5588],{"class":1082,"line":1210},[1080,5585,2031],{"class":2424},[1080,5587,5524],{"class":1117},[1080,5589,5590],{"class":1117}," validate_templates\n",[1080,5592,5593],{"class":1082,"line":1222},[1080,5594,2089],{"emptyLinePlaceholder":2088},[1080,5596,5597],{"class":1082,"line":1233},[1080,5598,5599],{"class":1257},"# Clear cache\n",[1080,5601,5602,5604,5606],{"class":1082,"line":1239},[1080,5603,2031],{"class":2424},[1080,5605,5524],{"class":1117},[1080,5607,5608],{"class":1117}," clear_cache\n",[1080,5610,5611],{"class":1082,"line":1471},[1080,5612,2089],{"emptyLinePlaceholder":2088},[1080,5614,5615],{"class":1082,"line":1492},[1080,5616,5617],{"class":1257},"# Reset database\n",[1080,5619,5620,5622,5624],{"class":1082,"line":1511},[1080,5621,2031],{"class":2424},[1080,5623,5524],{"class":1117},[1080,5625,5626],{"class":1117}," reset_db\n",[1030,5628,5630],{"id":5629},"performance-tools","Performance Tools",[1035,5632,5634],{"id":5633},"django-silk","Django Silk",[1026,5636,5637],{},[1042,5638,2407],{},[1070,5640,5642],{"className":2410,"code":5641,"language":2412,"meta":1075,"style":1075},"pip install django-silk\n",[1077,5643,5644],{"__ignoreMap":1075},[1080,5645,5646,5648,5650],{"class":1082,"line":1083},[1080,5647,3487],{"class":2424},[1080,5649,2428],{"class":1117},[1080,5651,5652],{"class":1117}," django-silk\n",[1026,5654,5655],{},[1042,5656,4633],{},[1070,5658,5660],{"className":2029,"code":5659,"language":2031,"meta":1075,"style":1075},"# settings/development.py\nINSTALLED_APPS += ['silk']\nMIDDLEWARE += ['silk.middleware.SilkyMiddleware']\n\n# urls.py\nurlpatterns += [path('silk/', include('silk.urls', namespace='silk'))]\n\n# Optional: Silk configuration\nSILKY_PYTHON_PROFILER = True\nSILKY_PYTHON_PROFILER_BINARY = True\nSILKY_AUTHENTICATION = True\nSILKY_AUTHORISATION = True\n",[1077,5661,5662,5666,5683,5700,5704,5708,5759,5763,5768,5777,5786,5795],{"__ignoreMap":1075},[1080,5663,5664],{"class":1082,"line":1083},[1080,5665,5303],{"class":1257},[1080,5667,5668,5670,5672,5674,5676,5679,5681],{"class":1082,"line":1090},[1080,5669,5308],{"class":2107},[1080,5671,5311],{"class":1086},[1080,5673,1365],{"class":1086},[1080,5675,2301],{"class":1113},[1080,5677,5678],{"class":1117},"silk",[1080,5680,2301],{"class":1113},[1080,5682,1618],{"class":1086},[1080,5684,5685,5687,5689,5691,5693,5696,5698],{"class":1082,"line":1110},[1080,5686,5327],{"class":2107},[1080,5688,5311],{"class":1086},[1080,5690,1365],{"class":1086},[1080,5692,2301],{"class":1113},[1080,5694,5695],{"class":1117},"silk.middleware.SilkyMiddleware",[1080,5697,2301],{"class":1113},[1080,5699,1618],{"class":1086},[1080,5701,5702],{"class":1082,"line":1126},[1080,5703,2089],{"emptyLinePlaceholder":2088},[1080,5705,5706],{"class":1082,"line":1138},[1080,5707,5405],{"class":1257},[1080,5709,5710,5713,5716,5718,5721,5723,5725,5728,5730,5732,5734,5736,5738,5741,5743,5745,5748,5750,5752,5754,5756],{"class":1082,"line":1150},[1080,5711,5712],{"class":2117},"urlpatterns ",[1080,5714,5715],{"class":1086},"+=",[1080,5717,1365],{"class":1086},[1080,5719,5720],{"class":2179},"path",[1080,5722,2114],{"class":1086},[1080,5724,2301],{"class":1113},[1080,5726,5727],{"class":1117},"silk/",[1080,5729,2301],{"class":1113},[1080,5731,1398],{"class":1086},[1080,5733,5457],{"class":2179},[1080,5735,2114],{"class":1086},[1080,5737,2301],{"class":1113},[1080,5739,5740],{"class":1117},"silk.urls",[1080,5742,2301],{"class":1113},[1080,5744,1398],{"class":1086},[1080,5746,5747],{"class":2185}," namespace",[1080,5749,2172],{"class":1086},[1080,5751,2301],{"class":1113},[1080,5753,5678],{"class":1117},[1080,5755,2301],{"class":1113},[1080,5757,5758],{"class":1086},"))]\n",[1080,5760,5761],{"class":1082,"line":1162},[1080,5762,2089],{"emptyLinePlaceholder":2088},[1080,5764,5765],{"class":1082,"line":1174},[1080,5766,5767],{"class":1257},"# Optional: Silk configuration\n",[1080,5769,5770,5773,5775],{"class":1082,"line":1186},[1080,5771,5772],{"class":2107},"SILKY_PYTHON_PROFILER",[1080,5774,2140],{"class":1086},[1080,5776,5267],{"class":1297},[1080,5778,5779,5782,5784],{"class":1082,"line":1198},[1080,5780,5781],{"class":2107},"SILKY_PYTHON_PROFILER_BINARY",[1080,5783,2140],{"class":1086},[1080,5785,5267],{"class":1297},[1080,5787,5788,5791,5793],{"class":1082,"line":1210},[1080,5789,5790],{"class":2107},"SILKY_AUTHENTICATION",[1080,5792,2140],{"class":1086},[1080,5794,5267],{"class":1297},[1080,5796,5797,5800,5802],{"class":1082,"line":1222},[1080,5798,5799],{"class":2107},"SILKY_AUTHORISATION",[1080,5801,2140],{"class":1086},[1080,5803,5267],{"class":1297},[1035,5805,5807],{"id":5806},"memory-profiling","Memory Profiling",[1026,5809,5810],{},[1042,5811,5812],{},"memory_profiler:",[1070,5814,5816],{"className":2410,"code":5815,"language":2412,"meta":1075,"style":1075},"pip install memory-profiler psutil\n\n# Usage\n@profile\ndef my_view(request):\n    # Your view code here\n    pass\n\n# Run with profiling\npython -m memory_profiler manage.py runserver\n",[1077,5817,5818,5830,5834,5839,5844,5860,5865,5870,5874,5879],{"__ignoreMap":1075},[1080,5819,5820,5822,5824,5827],{"class":1082,"line":1083},[1080,5821,3487],{"class":2424},[1080,5823,2428],{"class":1117},[1080,5825,5826],{"class":1117}," memory-profiler",[1080,5828,5829],{"class":1117}," psutil\n",[1080,5831,5832],{"class":1082,"line":1090},[1080,5833,2089],{"emptyLinePlaceholder":2088},[1080,5835,5836],{"class":1082,"line":1110},[1080,5837,5838],{"class":1257},"# Usage\n",[1080,5840,5841],{"class":1082,"line":1126},[1080,5842,5843],{"class":2424},"@profile\n",[1080,5845,5846,5848,5851,5853,5855,5858],{"class":1082,"line":1138},[1080,5847,2248],{"class":2424},[1080,5849,5850],{"class":1117}," my_view",[1080,5852,2114],{"class":1086},[1080,5854,2260],{"class":2424},[1080,5856,5857],{"class":1086},")",[1080,5859,4981],{"class":1117},[1080,5861,5862],{"class":1082,"line":1150},[1080,5863,5864],{"class":1257},"    # Your view code here\n",[1080,5866,5867],{"class":1082,"line":1162},[1080,5868,5869],{"class":2424},"    pass\n",[1080,5871,5872],{"class":1082,"line":1174},[1080,5873,2089],{"emptyLinePlaceholder":2088},[1080,5875,5876],{"class":1082,"line":1186},[1080,5877,5878],{"class":1257},"# Run with profiling\n",[1080,5880,5881,5883,5886,5889,5891],{"class":1082,"line":1198},[1080,5882,2031],{"class":2424},[1080,5884,5885],{"class":2495}," -m",[1080,5887,5888],{"class":1117}," memory_profiler",[1080,5890,5524],{"class":1117},[1080,5892,5893],{"class":1117}," runserver\n",[1030,5895,5897],{"id":5896},"package-management","Package Management",[1035,5899,5900],{"id":5900},"pip-tools",[1026,5902,5903],{},[1042,5904,5905],{},"Installation and Usage:",[1070,5907,5909],{"className":2410,"code":5908,"language":2412,"meta":1075,"style":1075},"pip install pip-tools\n\n# Create requirements.in\necho \"Django>=4.2,\u003C5.0\" > requirements.in\necho \"psycopg2-binary\" >> requirements.in\n\n# Generate locked requirements\npip-compile requirements.in\n\n# Install dependencies\npip-sync requirements.txt\n\n# Upgrade packages\npip-compile --upgrade requirements.in\n",[1077,5910,5911,5920,5924,5929,5946,5962,5966,5971,5978,5982,5987,5995,5999,6004],{"__ignoreMap":1075},[1080,5912,5913,5915,5917],{"class":1082,"line":1083},[1080,5914,3487],{"class":2424},[1080,5916,2428],{"class":1117},[1080,5918,5919],{"class":1117}," pip-tools\n",[1080,5921,5922],{"class":1082,"line":1090},[1080,5923,2089],{"emptyLinePlaceholder":2088},[1080,5925,5926],{"class":1082,"line":1110},[1080,5927,5928],{"class":1257},"# Create requirements.in\n",[1080,5930,5931,5934,5936,5939,5941,5943],{"class":1082,"line":1126},[1080,5932,5933],{"class":2206},"echo",[1080,5935,1276],{"class":1113},[1080,5937,5938],{"class":1117},"Django>=4.2,\u003C5.0",[1080,5940,1101],{"class":1113},[1080,5942,3509],{"class":2845},[1080,5944,5945],{"class":1117}," requirements.in\n",[1080,5947,5948,5950,5952,5955,5957,5960],{"class":1082,"line":1138},[1080,5949,5933],{"class":2206},[1080,5951,1276],{"class":1113},[1080,5953,5954],{"class":1117},"psycopg2-binary",[1080,5956,1101],{"class":1113},[1080,5958,5959],{"class":2845}," >>",[1080,5961,5945],{"class":1117},[1080,5963,5964],{"class":1082,"line":1150},[1080,5965,2089],{"emptyLinePlaceholder":2088},[1080,5967,5968],{"class":1082,"line":1162},[1080,5969,5970],{"class":1257},"# Generate locked requirements\n",[1080,5972,5973,5976],{"class":1082,"line":1174},[1080,5974,5975],{"class":2424},"pip-compile",[1080,5977,5945],{"class":1117},[1080,5979,5980],{"class":1082,"line":1186},[1080,5981,2089],{"emptyLinePlaceholder":2088},[1080,5983,5984],{"class":1082,"line":1198},[1080,5985,5986],{"class":1257},"# Install dependencies\n",[1080,5988,5989,5992],{"class":1082,"line":1210},[1080,5990,5991],{"class":2424},"pip-sync",[1080,5993,5994],{"class":1117}," requirements.txt\n",[1080,5996,5997],{"class":1082,"line":1222},[1080,5998,2089],{"emptyLinePlaceholder":2088},[1080,6000,6001],{"class":1082,"line":1233},[1080,6002,6003],{"class":1257},"# Upgrade packages\n",[1080,6005,6006,6008,6011],{"class":1082,"line":1239},[1080,6007,5975],{"class":2424},[1080,6009,6010],{"class":2495}," --upgrade",[1080,6012,5945],{"class":1117},[1035,6014,6016],{"id":6015},"poetry-alternative","Poetry (Alternative)",[1026,6018,6019],{},[1042,6020,2407],{},[1070,6022,6024],{"className":2410,"code":6023,"language":2412,"meta":1075,"style":1075},"curl -sSL https://install.python-poetry.org | python3 -\n\n# Initialize project\npoetry init\n\n# Add dependencies\npoetry add django psycopg2-binary\n\n# Add development dependencies\npoetry add --group dev pytest black flake8\n\n# Install dependencies\npoetry install\n\n# Activate virtual environment\npoetry shell\n",[1077,6025,6026,6046,6050,6055,6063,6067,6072,6084,6088,6093,6113,6117,6121,6127,6131,6136],{"__ignoreMap":1075},[1080,6027,6028,6031,6034,6037,6040,6043],{"class":1082,"line":1083},[1080,6029,6030],{"class":2424},"curl",[1080,6032,6033],{"class":2495}," -sSL",[1080,6035,6036],{"class":1117}," https://install.python-poetry.org",[1080,6038,6039],{"class":2845}," |",[1080,6041,6042],{"class":2424}," python3",[1080,6044,6045],{"class":1117}," -\n",[1080,6047,6048],{"class":1082,"line":1090},[1080,6049,2089],{"emptyLinePlaceholder":2088},[1080,6051,6052],{"class":1082,"line":1110},[1080,6053,6054],{"class":1257},"# Initialize project\n",[1080,6056,6057,6060],{"class":1082,"line":1126},[1080,6058,6059],{"class":2424},"poetry",[1080,6061,6062],{"class":1117}," init\n",[1080,6064,6065],{"class":1082,"line":1138},[1080,6066,2089],{"emptyLinePlaceholder":2088},[1080,6068,6069],{"class":1082,"line":1150},[1080,6070,6071],{"class":1257},"# Add dependencies\n",[1080,6073,6074,6076,6079,6081],{"class":1082,"line":1162},[1080,6075,6059],{"class":2424},[1080,6077,6078],{"class":1117}," add",[1080,6080,4906],{"class":1117},[1080,6082,6083],{"class":1117}," psycopg2-binary\n",[1080,6085,6086],{"class":1082,"line":1174},[1080,6087,2089],{"emptyLinePlaceholder":2088},[1080,6089,6090],{"class":1082,"line":1186},[1080,6091,6092],{"class":1257},"# Add development dependencies\n",[1080,6094,6095,6097,6099,6102,6105,6107,6110],{"class":1082,"line":1198},[1080,6096,6059],{"class":2424},[1080,6098,6078],{"class":1117},[1080,6100,6101],{"class":2495}," --group",[1080,6103,6104],{"class":1117}," dev",[1080,6106,4619],{"class":1117},[1080,6108,6109],{"class":1117}," black",[1080,6111,6112],{"class":1117}," flake8\n",[1080,6114,6115],{"class":1082,"line":1210},[1080,6116,2089],{"emptyLinePlaceholder":2088},[1080,6118,6119],{"class":1082,"line":1222},[1080,6120,5986],{"class":1257},[1080,6122,6123,6125],{"class":1082,"line":1233},[1080,6124,6059],{"class":2424},[1080,6126,3697],{"class":1117},[1080,6128,6129],{"class":1082,"line":1239},[1080,6130,2089],{"emptyLinePlaceholder":2088},[1080,6132,6133],{"class":1082,"line":1471},[1080,6134,6135],{"class":1257},"# Activate virtual environment\n",[1080,6137,6138,6140],{"class":1082,"line":1492},[1080,6139,6059],{"class":2424},[1080,6141,6142],{"class":1117}," shell\n",[1030,6144,6146],{"id":6145},"docker-integration","Docker Integration",[1035,6148,6150],{"id":6149},"development-dockerfile","Development Dockerfile",[1070,6152,6156],{"className":6153,"code":6154,"language":6155,"meta":1075,"style":1075},"language-dockerfile shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","FROM python:3.11-slim\n\nWORKDIR /app\n\n# Install system dependencies\nRUN apt-get update && apt-get install -y \\\n    postgresql-client \\\n    build-essential \\\n    && rm -rf /var/lib/apt/lists/*\n\n# Install Python dependencies\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\n# Copy project\nCOPY . .\n\n# Create non-root user\nRUN useradd --create-home --shell /bin/bash django\nUSER django\n\nEXPOSE 8000\n\nCMD [\"python\", \"manage.py\", \"runserver\", \"0.0.0.0:8000\"]\n","dockerfile",[1077,6157,6158,6165,6169,6177,6181,6186,6194,6199,6204,6209,6213,6218,6226,6233,6237,6242,6249,6253,6258,6265,6272,6276,6284,6288],{"__ignoreMap":1075},[1080,6159,6160,6162],{"class":1082,"line":1083},[1080,6161,2901],{"class":2811},[1080,6163,6164],{"class":2117}," python:3.11-slim\n",[1080,6166,6167],{"class":1082,"line":1090},[1080,6168,2089],{"emptyLinePlaceholder":2088},[1080,6170,6171,6174],{"class":1082,"line":1110},[1080,6172,6173],{"class":2811},"WORKDIR",[1080,6175,6176],{"class":2117}," /app\n",[1080,6178,6179],{"class":1082,"line":1126},[1080,6180,2089],{"emptyLinePlaceholder":2088},[1080,6182,6183],{"class":1082,"line":1138},[1080,6184,6185],{"class":1257},"# Install system dependencies\n",[1080,6187,6188,6191],{"class":1082,"line":1150},[1080,6189,6190],{"class":2811},"RUN",[1080,6192,6193],{"class":2117}," apt-get update && apt-get install -y \\\n",[1080,6195,6196],{"class":1082,"line":1162},[1080,6197,6198],{"class":2117},"    postgresql-client \\\n",[1080,6200,6201],{"class":1082,"line":1174},[1080,6202,6203],{"class":2117},"    build-essential \\\n",[1080,6205,6206],{"class":1082,"line":1186},[1080,6207,6208],{"class":2117},"    && rm -rf /var/lib/apt/lists/*\n",[1080,6210,6211],{"class":1082,"line":1198},[1080,6212,2089],{"emptyLinePlaceholder":2088},[1080,6214,6215],{"class":1082,"line":1210},[1080,6216,6217],{"class":1257},"# Install Python dependencies\n",[1080,6219,6220,6223],{"class":1082,"line":1222},[1080,6221,6222],{"class":2811},"COPY",[1080,6224,6225],{"class":2117}," requirements.txt .\n",[1080,6227,6228,6230],{"class":1082,"line":1233},[1080,6229,6190],{"class":2811},[1080,6231,6232],{"class":2117}," pip install --no-cache-dir -r requirements.txt\n",[1080,6234,6235],{"class":1082,"line":1239},[1080,6236,2089],{"emptyLinePlaceholder":2088},[1080,6238,6239],{"class":1082,"line":1471},[1080,6240,6241],{"class":1257},"# Copy project\n",[1080,6243,6244,6246],{"class":1082,"line":1492},[1080,6245,6222],{"class":2811},[1080,6247,6248],{"class":2117}," . .\n",[1080,6250,6251],{"class":1082,"line":1511},[1080,6252,2089],{"emptyLinePlaceholder":2088},[1080,6254,6255],{"class":1082,"line":1516},[1080,6256,6257],{"class":1257},"# Create non-root user\n",[1080,6259,6260,6262],{"class":1082,"line":1530},[1080,6261,6190],{"class":2811},[1080,6263,6264],{"class":2117}," useradd --create-home --shell /bin/bash django\n",[1080,6266,6267,6269],{"class":1082,"line":1548},[1080,6268,2652],{"class":2811},[1080,6270,6271],{"class":2117}," django\n",[1080,6273,6274],{"class":1082,"line":1553},[1080,6275,2089],{"emptyLinePlaceholder":2088},[1080,6277,6278,6281],{"class":1082,"line":1567},[1080,6279,6280],{"class":2811},"EXPOSE",[1080,6282,6283],{"class":2117}," 8000\n",[1080,6285,6286],{"class":1082,"line":1585},[1080,6287,2089],{"emptyLinePlaceholder":2088},[1080,6289,6290,6293,6295,6298,6301,6304,6306,6309,6311,6314],{"class":1082,"line":1601},[1080,6291,6292],{"class":2811},"CMD",[1080,6294,1365],{"class":2117},[1080,6296,6297],{"class":1117},"\"python\"",[1080,6299,6300],{"class":2117},", ",[1080,6302,6303],{"class":1117},"\"manage.py\"",[1080,6305,6300],{"class":2117},[1080,6307,6308],{"class":1117},"\"runserver\"",[1080,6310,6300],{"class":2117},[1080,6312,6313],{"class":1117},"\"0.0.0.0:8000\"",[1080,6315,1618],{"class":2117},[1035,6317,6319],{"id":6318},"docker-compose-for-development","Docker Compose for Development",[1070,6321,6325],{"className":6322,"code":6323,"language":6324,"meta":1075,"style":1075},"language-yaml shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","version: '3.8'\n\nservices:\n  web:\n    build: .\n    ports:\n      - \"8000:8000\"\n    volumes:\n      - .:/app\n    environment:\n      - DEBUG=1\n      - DATABASE_URL=postgresql://django:password@db:5432/django_dev\n    depends_on:\n      - db\n      - redis\n    command: python manage.py runserver 0.0.0.0:8000\n\n  db:\n    image: postgres:15\n    environment:\n      POSTGRES_DB: django_dev\n      POSTGRES_USER: django\n      POSTGRES_PASSWORD: password\n    volumes:\n      - postgres_data:/var/lib/postgresql/data\n    ports:\n      - \"5432:5432\"\n\n  redis:\n    image: redis:7-alpine\n    ports:\n      - \"6379:6379\"\n\nvolumes:\n  postgres_data:\n","yaml",[1077,6326,6327,6341,6345,6352,6359,6369,6376,6388,6395,6402,6409,6416,6423,6430,6437,6444,6454,6458,6465,6475,6481,6491,6500,6510,6516,6523,6529,6540,6544,6551,6560,6566,6577,6581,6588],{"__ignoreMap":1075},[1080,6328,6329,6333,6335,6337,6339],{"class":1082,"line":1083},[1080,6330,6332],{"class":6331},"suXOh","version",[1080,6334,1104],{"class":1086},[1080,6336,2295],{"class":1113},[1080,6338,4450],{"class":1117},[1080,6340,3105],{"class":1113},[1080,6342,6343],{"class":1082,"line":1090},[1080,6344,2089],{"emptyLinePlaceholder":2088},[1080,6346,6347,6350],{"class":1082,"line":1110},[1080,6348,6349],{"class":6331},"services",[1080,6351,4981],{"class":1086},[1080,6353,6354,6357],{"class":1082,"line":1126},[1080,6355,6356],{"class":6331},"  web",[1080,6358,4981],{"class":1086},[1080,6360,6361,6364,6366],{"class":1082,"line":1138},[1080,6362,6363],{"class":6331},"    build",[1080,6365,1104],{"class":1086},[1080,6367,6368],{"class":1579}," .\n",[1080,6370,6371,6374],{"class":1082,"line":1150},[1080,6372,6373],{"class":6331},"    ports",[1080,6375,4981],{"class":1086},[1080,6377,6378,6381,6383,6386],{"class":1082,"line":1162},[1080,6379,6380],{"class":1086},"      -",[1080,6382,1276],{"class":1113},[1080,6384,6385],{"class":1117},"8000:8000",[1080,6387,1230],{"class":1113},[1080,6389,6390,6393],{"class":1082,"line":1174},[1080,6391,6392],{"class":6331},"    volumes",[1080,6394,4981],{"class":1086},[1080,6396,6397,6399],{"class":1082,"line":1186},[1080,6398,6380],{"class":1086},[1080,6400,6401],{"class":1117}," .:/app\n",[1080,6403,6404,6407],{"class":1082,"line":1198},[1080,6405,6406],{"class":6331},"    environment",[1080,6408,4981],{"class":1086},[1080,6410,6411,6413],{"class":1082,"line":1210},[1080,6412,6380],{"class":1086},[1080,6414,6415],{"class":1117}," DEBUG=1\n",[1080,6417,6418,6420],{"class":1082,"line":1222},[1080,6419,6380],{"class":1086},[1080,6421,6422],{"class":1117}," DATABASE_URL=postgresql://django:password@db:5432/django_dev\n",[1080,6424,6425,6428],{"class":1082,"line":1233},[1080,6426,6427],{"class":6331},"    depends_on",[1080,6429,4981],{"class":1086},[1080,6431,6432,6434],{"class":1082,"line":1239},[1080,6433,6380],{"class":1086},[1080,6435,6436],{"class":1117}," db\n",[1080,6438,6439,6441],{"class":1082,"line":1471},[1080,6440,6380],{"class":1086},[1080,6442,6443],{"class":1117}," redis\n",[1080,6445,6446,6449,6451],{"class":1082,"line":1492},[1080,6447,6448],{"class":6331},"    command",[1080,6450,1104],{"class":1086},[1080,6452,6453],{"class":1117}," python manage.py runserver 0.0.0.0:8000\n",[1080,6455,6456],{"class":1082,"line":1511},[1080,6457,2089],{"emptyLinePlaceholder":2088},[1080,6459,6460,6463],{"class":1082,"line":1516},[1080,6461,6462],{"class":6331},"  db",[1080,6464,4981],{"class":1086},[1080,6466,6467,6470,6472],{"class":1082,"line":1530},[1080,6468,6469],{"class":6331},"    image",[1080,6471,1104],{"class":1086},[1080,6473,6474],{"class":1117}," postgres:15\n",[1080,6476,6477,6479],{"class":1082,"line":1548},[1080,6478,6406],{"class":6331},[1080,6480,4981],{"class":1086},[1080,6482,6483,6486,6488],{"class":1082,"line":1553},[1080,6484,6485],{"class":6331},"      POSTGRES_DB",[1080,6487,1104],{"class":1086},[1080,6489,6490],{"class":1117}," django_dev\n",[1080,6492,6493,6496,6498],{"class":1082,"line":1567},[1080,6494,6495],{"class":6331},"      POSTGRES_USER",[1080,6497,1104],{"class":1086},[1080,6499,6271],{"class":1117},[1080,6501,6502,6505,6507],{"class":1082,"line":1585},[1080,6503,6504],{"class":6331},"      POSTGRES_PASSWORD",[1080,6506,1104],{"class":1086},[1080,6508,6509],{"class":1117}," password\n",[1080,6511,6512,6514],{"class":1082,"line":1601},[1080,6513,6392],{"class":6331},[1080,6515,4981],{"class":1086},[1080,6517,6518,6520],{"class":1082,"line":1621},[1080,6519,6380],{"class":1086},[1080,6521,6522],{"class":1117}," postgres_data:/var/lib/postgresql/data\n",[1080,6524,6525,6527],{"class":1082,"line":1626},[1080,6526,6373],{"class":6331},[1080,6528,4981],{"class":1086},[1080,6530,6531,6533,6535,6538],{"class":1082,"line":1642},[1080,6532,6380],{"class":1086},[1080,6534,1276],{"class":1113},[1080,6536,6537],{"class":1117},"5432:5432",[1080,6539,1230],{"class":1113},[1080,6541,6542],{"class":1082,"line":1658},[1080,6543,2089],{"emptyLinePlaceholder":2088},[1080,6545,6546,6549],{"class":1082,"line":1672},[1080,6547,6548],{"class":6331},"  redis",[1080,6550,4981],{"class":1086},[1080,6552,6553,6555,6557],{"class":1082,"line":1682},[1080,6554,6469],{"class":6331},[1080,6556,1104],{"class":1086},[1080,6558,6559],{"class":1117}," redis:7-alpine\n",[1080,6561,6562,6564],{"class":1082,"line":1687},[1080,6563,6373],{"class":6331},[1080,6565,4981],{"class":1086},[1080,6567,6568,6570,6572,6575],{"class":1082,"line":3343},[1080,6569,6380],{"class":1086},[1080,6571,1276],{"class":1113},[1080,6573,6574],{"class":1117},"6379:6379",[1080,6576,1230],{"class":1113},[1080,6578,6579],{"class":1082,"line":3349},[1080,6580,2089],{"emptyLinePlaceholder":2088},[1080,6582,6583,6586],{"class":1082,"line":3355},[1080,6584,6585],{"class":6331},"volumes",[1080,6587,4981],{"class":1086},[1080,6589,6590,6593],{"class":1082,"line":3361},[1080,6591,6592],{"class":6331},"  postgres_data",[1080,6594,4981],{"class":1086},[1030,6596,6598],{"id":6597},"makefile-for-common-tasks","Makefile for Common Tasks",[1070,6600,6604],{"className":6601,"code":6602,"language":6603,"meta":1075,"style":1075},"language-makefile shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Makefile\n.PHONY: help install test lint format clean migrate shell\n\nhelp:\n    @echo \"Available commands:\"\n    @echo \"  install    Install dependencies\"\n    @echo \"  test       Run tests\"\n    @echo \"  lint       Run linting\"\n    @echo \"  format     Format code\"\n    @echo \"  migrate    Run migrations\"\n    @echo \"  shell      Open Django shell\"\n\ninstall:\n    pip install -r requirements.txt\n\ntest:\n    pytest\n\nlint:\n    flake8 .\n    mypy .\n\nformat:\n    black .\n    isort .\n\nclean:\n    find . -type f -name \"*.pyc\" -delete\n    find . -type d -name \"__pycache__\" -delete\n\nmigrate:\n    python manage.py makemigrations\n    python manage.py migrate\n\nshell:\n    python manage.py shell_plus\n\nrunserver:\n    python manage.py runserver\n\ncollectstatic:\n    python manage.py collectstatic --noinput\n\nrequirements:\n    pip-compile requirements.in\n    pip-compile requirements-dev.in\n","makefile",[1077,6605,6606,6611,6616,6620,6625,6630,6635,6640,6645,6650,6655,6660,6664,6669,6674,6678,6683,6688,6692,6697,6702,6707,6711,6716,6721,6726,6730,6735,6740,6745,6749,6754,6759,6764,6768,6773,6778,6782,6787,6792,6796,6801,6806,6810,6815,6820],{"__ignoreMap":1075},[1080,6607,6608],{"class":1082,"line":1083},[1080,6609,6610],{},"# Makefile\n",[1080,6612,6613],{"class":1082,"line":1090},[1080,6614,6615],{},".PHONY: help install test lint format clean migrate shell\n",[1080,6617,6618],{"class":1082,"line":1110},[1080,6619,2089],{"emptyLinePlaceholder":2088},[1080,6621,6622],{"class":1082,"line":1126},[1080,6623,6624],{},"help:\n",[1080,6626,6627],{"class":1082,"line":1138},[1080,6628,6629],{},"    @echo \"Available commands:\"\n",[1080,6631,6632],{"class":1082,"line":1150},[1080,6633,6634],{},"    @echo \"  install    Install dependencies\"\n",[1080,6636,6637],{"class":1082,"line":1162},[1080,6638,6639],{},"    @echo \"  test       Run tests\"\n",[1080,6641,6642],{"class":1082,"line":1174},[1080,6643,6644],{},"    @echo \"  lint       Run linting\"\n",[1080,6646,6647],{"class":1082,"line":1186},[1080,6648,6649],{},"    @echo \"  format     Format code\"\n",[1080,6651,6652],{"class":1082,"line":1198},[1080,6653,6654],{},"    @echo \"  migrate    Run migrations\"\n",[1080,6656,6657],{"class":1082,"line":1210},[1080,6658,6659],{},"    @echo \"  shell      Open Django shell\"\n",[1080,6661,6662],{"class":1082,"line":1222},[1080,6663,2089],{"emptyLinePlaceholder":2088},[1080,6665,6666],{"class":1082,"line":1233},[1080,6667,6668],{},"install:\n",[1080,6670,6671],{"class":1082,"line":1239},[1080,6672,6673],{},"    pip install -r requirements.txt\n",[1080,6675,6676],{"class":1082,"line":1471},[1080,6677,2089],{"emptyLinePlaceholder":2088},[1080,6679,6680],{"class":1082,"line":1492},[1080,6681,6682],{},"test:\n",[1080,6684,6685],{"class":1082,"line":1511},[1080,6686,6687],{},"    pytest\n",[1080,6689,6690],{"class":1082,"line":1516},[1080,6691,2089],{"emptyLinePlaceholder":2088},[1080,6693,6694],{"class":1082,"line":1530},[1080,6695,6696],{},"lint:\n",[1080,6698,6699],{"class":1082,"line":1548},[1080,6700,6701],{},"    flake8 .\n",[1080,6703,6704],{"class":1082,"line":1553},[1080,6705,6706],{},"    mypy .\n",[1080,6708,6709],{"class":1082,"line":1567},[1080,6710,2089],{"emptyLinePlaceholder":2088},[1080,6712,6713],{"class":1082,"line":1585},[1080,6714,6715],{},"format:\n",[1080,6717,6718],{"class":1082,"line":1601},[1080,6719,6720],{},"    black .\n",[1080,6722,6723],{"class":1082,"line":1621},[1080,6724,6725],{},"    isort .\n",[1080,6727,6728],{"class":1082,"line":1626},[1080,6729,2089],{"emptyLinePlaceholder":2088},[1080,6731,6732],{"class":1082,"line":1642},[1080,6733,6734],{},"clean:\n",[1080,6736,6737],{"class":1082,"line":1658},[1080,6738,6739],{},"    find . -type f -name \"*.pyc\" -delete\n",[1080,6741,6742],{"class":1082,"line":1672},[1080,6743,6744],{},"    find . -type d -name \"__pycache__\" -delete\n",[1080,6746,6747],{"class":1082,"line":1682},[1080,6748,2089],{"emptyLinePlaceholder":2088},[1080,6750,6751],{"class":1082,"line":1687},[1080,6752,6753],{},"migrate:\n",[1080,6755,6756],{"class":1082,"line":3343},[1080,6757,6758],{},"    python manage.py makemigrations\n",[1080,6760,6761],{"class":1082,"line":3349},[1080,6762,6763],{},"    python manage.py migrate\n",[1080,6765,6766],{"class":1082,"line":3355},[1080,6767,2089],{"emptyLinePlaceholder":2088},[1080,6769,6770],{"class":1082,"line":3361},[1080,6771,6772],{},"shell:\n",[1080,6774,6775],{"class":1082,"line":3367},[1080,6776,6777],{},"    python manage.py shell_plus\n",[1080,6779,6780],{"class":1082,"line":3372},[1080,6781,2089],{"emptyLinePlaceholder":2088},[1080,6783,6784],{"class":1082,"line":3378},[1080,6785,6786],{},"runserver:\n",[1080,6788,6789],{"class":1082,"line":3384},[1080,6790,6791],{},"    python manage.py runserver\n",[1080,6793,6794],{"class":1082,"line":3390},[1080,6795,2089],{"emptyLinePlaceholder":2088},[1080,6797,6798],{"class":1082,"line":3395},[1080,6799,6800],{},"collectstatic:\n",[1080,6802,6803],{"class":1082,"line":3401},[1080,6804,6805],{},"    python manage.py collectstatic --noinput\n",[1080,6807,6808],{"class":1082,"line":3407},[1080,6809,2089],{"emptyLinePlaceholder":2088},[1080,6811,6812],{"class":1082,"line":3413},[1080,6813,6814],{},"requirements:\n",[1080,6816,6817],{"class":1082,"line":3418},[1080,6818,6819],{},"    pip-compile requirements.in\n",[1080,6821,6822],{"class":1082,"line":3424},[1080,6823,6824],{},"    pip-compile requirements-dev.in\n",[1026,6826,6827],{},"This comprehensive tooling setup provides a solid foundation for professional Django development, ensuring code quality, productivity, and maintainability across your projects.",[6829,6830,6831],"style",{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html .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 .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .srjyR, html code.shiki .srjyR{--shiki-light:#90A4AE;--shiki-light-font-style:inherit;--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .siWMO, html code.shiki .siWMO{--shiki-light:#6182B8;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sRjD_, html code.shiki .sRjD_{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#393A34;--shiki-default-font-style:inherit;--shiki-dark:#DBD7CAEE;--shiki-dark-font-style:inherit}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .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 .spT8q, html code.shiki .spT8q{--shiki-light:#6182B8;--shiki-light-font-style:inherit;--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .s6DHA, html code.shiki .s6DHA{--shiki-light:#6182B8;--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 .sz9Cv, html code.shiki .sz9Cv{--shiki-light:#91B859;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .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 .s3h35, html code.shiki .s3h35{--shiki-light:#F76D47;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .suXOh, html code.shiki .suXOh{--shiki-light:#E53935;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s4Jsk, html code.shiki .s4Jsk{--shiki-light:#39ADB5;--shiki-default:#99841877;--shiki-dark:#B8A96577}html pre.shiki code .sLorS, html code.shiki .sLorS{--shiki-light:#9C3EDA;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .scgAs, html code.shiki .scgAs{--shiki-light:#F76D47;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .sSC40, html code.shiki .sSC40{--shiki-light:#90A4AE;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .sq3J1, html code.shiki .sq3J1{--shiki-light:#FF5370;--shiki-default:#1E754F;--shiki-dark:#4D9375}",{"title":1075,"searchDepth":1083,"depth":1090,"links":6833},[6834,6839,6843,6847,6851,6854,6858,6862,6866,6870],{"id":1032,"depth":1090,"text":1033,"children":6835},[6836,6837,6838],{"id":1037,"depth":1110,"text":1038},{"id":1998,"depth":1110,"text":1999},{"id":2317,"depth":1110,"text":2318},{"id":2397,"depth":1090,"text":2398,"children":6840},[6841,6842],{"id":2401,"depth":1110,"text":2402},{"id":2775,"depth":1110,"text":2776},{"id":2948,"depth":1090,"text":2949,"children":6844},[6845,6846],{"id":2952,"depth":1110,"text":2953},{"id":3466,"depth":1110,"text":3467},{"id":3700,"depth":1090,"text":3701,"children":6848},[6849,6850],{"id":3704,"depth":1110,"text":3705},{"id":4410,"depth":1110,"text":4411},{"id":4596,"depth":1090,"text":4597,"children":6852},[6853],{"id":4600,"depth":1110,"text":4601},{"id":5270,"depth":1090,"text":5271,"children":6855},[6856,6857],{"id":5274,"depth":1110,"text":5275},{"id":5483,"depth":1110,"text":5484},{"id":5629,"depth":1090,"text":5630,"children":6859},[6860,6861],{"id":5633,"depth":1110,"text":5634},{"id":5806,"depth":1110,"text":5807},{"id":5896,"depth":1090,"text":5897,"children":6863},[6864,6865],{"id":5900,"depth":1110,"text":5900},{"id":6015,"depth":1110,"text":6016},{"id":6145,"depth":1090,"text":6146,"children":6867},[6868,6869],{"id":6149,"depth":1110,"text":6150},{"id":6318,"depth":1110,"text":6319},{"id":6597,"depth":1090,"text":6598},"md",null,{},{"title":62,"description":1028},"X5L7IOEmgRvMNUIdPaBrubrJwsN_8slvdbBMpVgoaic",[6877,6879],{"title":60,"path":56,"stem":57,"description":6878,"children":-1},"A well-configured development environment is crucial for productive Django development. This section covers everything you need to set up a professional, efficient, and maintainable development workflow that scales from personal projects to enterprise applications.",{"title":66,"path":67,"stem":68,"description":6880,"children":-1},"Virtual environments are essential for Python and Django development, providing isolated spaces for project dependencies. This comprehensive guide covers everything you need to know about creating, managing, and optimizing virtual environments for Django projects.",1772474900283]