[{"data":1,"prerenderedAt":17380},["ShallowReactive",2],{"navigation":3,"/authentication-and-authorization/authentication-views":1016,"/authentication-and-authorization/authentication-views-surround":17375},[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":412,"body":1018,"description":1028,"extension":17370,"links":17371,"meta":17372,"navigation":1244,"path":413,"seo":17373,"stem":414,"__hash__":17374},"docs/09.authentication-and-authorization/06.authentication-views.md",{"type":1019,"value":1020,"toc":17352},"minimark",[1021,1025,1029,1034,1039,2608,2611,2623,2627,5516,5520,6606,6610,7879,7883,9942,9945,9949,9953,12709,12713,12717,14257,14261,14265,17345,17348],[1022,1023,412],"h1",{"id":1024},"authentication-views",[1026,1027,1028],"p",{},"Django provides built-in authentication views for common authentication workflows like login, logout, password change, and password reset. Understanding how to use and customize these views enables you to implement secure authentication flows that meet your application's specific requirements.",[1030,1031,1033],"h2",{"id":1032},"built-in-authentication-views","Built-in Authentication Views",[1035,1036,1038],"h3",{"id":1037},"djangos-authentication-view-classes","Django's Authentication View Classes",[1040,1041,1046],"pre",{"className":1042,"code":1043,"language":1044,"meta":1045,"style":1045},"language-python shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","# Django's built-in authentication views\nfrom django.contrib.auth.views import (\n    LoginView, LogoutView, PasswordChangeView, PasswordChangeDoneView,\n    PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView,\n    PasswordResetCompleteView\n)\nfrom django.urls import path, reverse_lazy\nfrom django.shortcuts import render, redirect\nfrom django.contrib.auth import authenticate, login, logout\nfrom django.contrib import messages\n\nclass AuthenticationViewOverview:\n    \"\"\"Overview of Django's built-in authentication views\"\"\"\n    \n    @staticmethod\n    def built_in_views_summary():\n        \"\"\"Summary of all built-in authentication views\"\"\"\n        \n        views_summary = {\n            'LoginView': {\n                'purpose': 'Handle user login',\n                'template': 'registration/login.html',\n                'success_url': 'LOGIN_REDIRECT_URL setting',\n                'form_class': 'AuthenticationForm'\n            },\n            'LogoutView': {\n                'purpose': 'Handle user logout',\n                'template': 'registration/logged_out.html',\n                'success_url': 'LOGOUT_REDIRECT_URL setting',\n                'form_class': None\n            },\n            'PasswordChangeView': {\n                'purpose': 'Change user password',\n                'template': 'registration/password_change_form.html',\n                'success_url': 'password_change_done',\n                'form_class': 'PasswordChangeForm'\n            },\n            'PasswordChangeDoneView': {\n                'purpose': 'Password change success page',\n                'template': 'registration/password_change_done.html',\n                'success_url': None,\n                'form_class': None\n            },\n            'PasswordResetView': {\n                'purpose': 'Request password reset',\n                'template': 'registration/password_reset_form.html',\n                'success_url': 'password_reset_done',\n                'form_class': 'PasswordResetForm'\n            },\n            'PasswordResetDoneView': {\n                'purpose': 'Password reset request confirmation',\n                'template': 'registration/password_reset_done.html',\n                'success_url': None,\n                'form_class': None\n            },\n            'PasswordResetConfirmView': {\n                'purpose': 'Confirm password reset with token',\n                'template': 'registration/password_reset_confirm.html',\n                'success_url': 'password_reset_complete',\n                'form_class': 'SetPasswordForm'\n            },\n            'PasswordResetCompleteView': {\n                'purpose': 'Password reset completion page',\n                'template': 'registration/password_reset_complete.html',\n                'success_url': None,\n                'form_class': None\n            }\n        }\n        \n        return views_summary\n    \n    @staticmethod\n    def basic_url_configuration():\n        \"\"\"Basic URL configuration for authentication views\"\"\"\n        \n        # Method 1: Use Django's built-in auth URLs\n        urlpatterns_builtin = [\n            path('accounts/', include('django.contrib.auth.urls')),\n        ]\n        \n        # This includes all these URLs:\n        # accounts/login/ [name='login']\n        # accounts/logout/ [name='logout']\n        # accounts/password_change/ [name='password_change']\n        # accounts/password_change/done/ [name='password_change_done']\n        # accounts/password_reset/ [name='password_reset']\n        # accounts/password_reset/done/ [name='password_reset_done']\n        # accounts/reset/\u003Cuidb64>/\u003Ctoken>/ [name='password_reset_confirm']\n        # accounts/reset/done/ [name='password_reset_complete']\n        \n        # Method 2: Define individual views\n        urlpatterns_individual = [\n            path('login/', LoginView.as_view(), name='login'),\n            path('logout/', LogoutView.as_view(), name='logout'),\n            path('password_change/', PasswordChangeView.as_view(), name='password_change'),\n            path('password_change/done/', PasswordChangeDoneView.as_view(), name='password_change_done'),\n            path('password_reset/', PasswordResetView.as_view(), name='password_reset'),\n            path('password_reset/done/', PasswordResetDoneView.as_view(), name='password_reset_done'),\n            path('reset/\u003Cuidb64>/\u003Ctoken>/', PasswordResetConfirmView.as_view(), name='password_reset_confirm'),\n            path('reset/done/', PasswordResetCompleteView.as_view(), name='password_reset_complete'),\n        ]\n        \n        return urlpatterns_builtin, urlpatterns_individual\n","python","",[1047,1048,1049,1058,1092,1117,1135,1141,1147,1169,1191,1222,1239,1246,1260,1274,1280,1290,1303,1314,1320,1332,1351,1374,1395,1416,1436,1442,1456,1476,1496,1516,1531,1536,1550,1570,1590,1610,1628,1633,1647,1667,1687,1703,1716,1721,1735,1755,1775,1795,1813,1818,1832,1852,1872,1887,1900,1905,1919,1939,1959,1979,1997,2002,2016,2036,2056,2071,2084,2090,2096,2101,2110,2115,2122,2132,2142,2147,2153,2164,2198,2204,2209,2215,2221,2227,2233,2239,2245,2251,2257,2263,2268,2274,2284,2327,2364,2401,2437,2475,2511,2548,2585,2590,2595],"code",{"__ignoreMap":1045},[1050,1051,1054],"span",{"class":1052,"line":1053},"line",1,[1050,1055,1057],{"class":1056},"s9Tkl","# Django's built-in authentication views\n",[1050,1059,1061,1065,1069,1073,1076,1078,1081,1083,1086,1089],{"class":1052,"line":1060},2,[1050,1062,1064],{"class":1063},"siDh9","from",[1050,1066,1068],{"class":1067},"sftqT"," django",[1050,1070,1072],{"class":1071},"soVBu",".",[1050,1074,1075],{"class":1067},"contrib",[1050,1077,1072],{"class":1071},[1050,1079,1080],{"class":1067},"auth",[1050,1082,1072],{"class":1071},[1050,1084,1085],{"class":1067},"views ",[1050,1087,1088],{"class":1063},"import",[1050,1090,1091],{"class":1071}," (\n",[1050,1093,1095,1098,1101,1104,1106,1109,1111,1114],{"class":1052,"line":1094},3,[1050,1096,1097],{"class":1067},"    LoginView",[1050,1099,1100],{"class":1071},",",[1050,1102,1103],{"class":1067}," LogoutView",[1050,1105,1100],{"class":1071},[1050,1107,1108],{"class":1067}," PasswordChangeView",[1050,1110,1100],{"class":1071},[1050,1112,1113],{"class":1067}," PasswordChangeDoneView",[1050,1115,1116],{"class":1071},",\n",[1050,1118,1120,1123,1125,1128,1130,1133],{"class":1052,"line":1119},4,[1050,1121,1122],{"class":1067},"    PasswordResetView",[1050,1124,1100],{"class":1071},[1050,1126,1127],{"class":1067}," PasswordResetDoneView",[1050,1129,1100],{"class":1071},[1050,1131,1132],{"class":1067}," PasswordResetConfirmView",[1050,1134,1116],{"class":1071},[1050,1136,1138],{"class":1052,"line":1137},5,[1050,1139,1140],{"class":1067},"    PasswordResetCompleteView\n",[1050,1142,1144],{"class":1052,"line":1143},6,[1050,1145,1146],{"class":1071},")\n",[1050,1148,1150,1152,1154,1156,1159,1161,1164,1166],{"class":1052,"line":1149},7,[1050,1151,1064],{"class":1063},[1050,1153,1068],{"class":1067},[1050,1155,1072],{"class":1071},[1050,1157,1158],{"class":1067},"urls ",[1050,1160,1088],{"class":1063},[1050,1162,1163],{"class":1067}," path",[1050,1165,1100],{"class":1071},[1050,1167,1168],{"class":1067}," reverse_lazy\n",[1050,1170,1172,1174,1176,1178,1181,1183,1186,1188],{"class":1052,"line":1171},8,[1050,1173,1064],{"class":1063},[1050,1175,1068],{"class":1067},[1050,1177,1072],{"class":1071},[1050,1179,1180],{"class":1067},"shortcuts ",[1050,1182,1088],{"class":1063},[1050,1184,1185],{"class":1067}," render",[1050,1187,1100],{"class":1071},[1050,1189,1190],{"class":1067}," redirect\n",[1050,1192,1194,1196,1198,1200,1202,1204,1207,1209,1212,1214,1217,1219],{"class":1052,"line":1193},9,[1050,1195,1064],{"class":1063},[1050,1197,1068],{"class":1067},[1050,1199,1072],{"class":1071},[1050,1201,1075],{"class":1067},[1050,1203,1072],{"class":1071},[1050,1205,1206],{"class":1067},"auth ",[1050,1208,1088],{"class":1063},[1050,1210,1211],{"class":1067}," authenticate",[1050,1213,1100],{"class":1071},[1050,1215,1216],{"class":1067}," login",[1050,1218,1100],{"class":1071},[1050,1220,1221],{"class":1067}," logout\n",[1050,1223,1225,1227,1229,1231,1234,1236],{"class":1052,"line":1224},10,[1050,1226,1064],{"class":1063},[1050,1228,1068],{"class":1067},[1050,1230,1072],{"class":1071},[1050,1232,1233],{"class":1067},"contrib ",[1050,1235,1088],{"class":1063},[1050,1237,1238],{"class":1067}," messages\n",[1050,1240,1242],{"class":1052,"line":1241},11,[1050,1243,1245],{"emptyLinePlaceholder":1244},true,"\n",[1050,1247,1249,1253,1257],{"class":1052,"line":1248},12,[1050,1250,1252],{"class":1251},"s5Kfy","class",[1050,1254,1256],{"class":1255},"sD-vU"," AuthenticationViewOverview",[1050,1258,1259],{"class":1071},":\n",[1050,1261,1263,1267,1271],{"class":1052,"line":1262},13,[1050,1264,1266],{"class":1265},"sm7ve","    \"\"\"",[1050,1268,1270],{"class":1269},"sVyVU","Overview of Django's built-in authentication views",[1050,1272,1273],{"class":1265},"\"\"\"\n",[1050,1275,1277],{"class":1052,"line":1276},14,[1050,1278,1279],{"class":1067},"    \n",[1050,1281,1283,1286],{"class":1052,"line":1282},15,[1050,1284,1285],{"class":1071},"    @",[1050,1287,1289],{"class":1288},"sa2tF","staticmethod\n",[1050,1291,1293,1296,1300],{"class":1052,"line":1292},16,[1050,1294,1295],{"class":1251},"    def",[1050,1297,1299],{"class":1298},"sljsM"," built_in_views_summary",[1050,1301,1302],{"class":1071},"():\n",[1050,1304,1306,1309,1312],{"class":1052,"line":1305},17,[1050,1307,1308],{"class":1265},"        \"\"\"",[1050,1310,1311],{"class":1269},"Summary of all built-in authentication views",[1050,1313,1273],{"class":1265},[1050,1315,1317],{"class":1052,"line":1316},18,[1050,1318,1319],{"class":1067},"        \n",[1050,1321,1323,1326,1329],{"class":1052,"line":1322},19,[1050,1324,1325],{"class":1067},"        views_summary ",[1050,1327,1328],{"class":1071},"=",[1050,1330,1331],{"class":1071}," {\n",[1050,1333,1335,1339,1343,1346,1349],{"class":1052,"line":1334},20,[1050,1336,1338],{"class":1337},"sbYkP","            '",[1050,1340,1342],{"class":1341},"sTbE_","LoginView",[1050,1344,1345],{"class":1337},"'",[1050,1347,1348],{"class":1071},":",[1050,1350,1331],{"class":1071},[1050,1352,1354,1357,1360,1362,1364,1367,1370,1372],{"class":1052,"line":1353},21,[1050,1355,1356],{"class":1337},"                '",[1050,1358,1359],{"class":1341},"purpose",[1050,1361,1345],{"class":1337},[1050,1363,1348],{"class":1071},[1050,1365,1366],{"class":1337}," '",[1050,1368,1369],{"class":1341},"Handle user login",[1050,1371,1345],{"class":1337},[1050,1373,1116],{"class":1071},[1050,1375,1377,1379,1382,1384,1386,1388,1391,1393],{"class":1052,"line":1376},22,[1050,1378,1356],{"class":1337},[1050,1380,1381],{"class":1341},"template",[1050,1383,1345],{"class":1337},[1050,1385,1348],{"class":1071},[1050,1387,1366],{"class":1337},[1050,1389,1390],{"class":1341},"registration/login.html",[1050,1392,1345],{"class":1337},[1050,1394,1116],{"class":1071},[1050,1396,1398,1400,1403,1405,1407,1409,1412,1414],{"class":1052,"line":1397},23,[1050,1399,1356],{"class":1337},[1050,1401,1402],{"class":1341},"success_url",[1050,1404,1345],{"class":1337},[1050,1406,1348],{"class":1071},[1050,1408,1366],{"class":1337},[1050,1410,1411],{"class":1341},"LOGIN_REDIRECT_URL setting",[1050,1413,1345],{"class":1337},[1050,1415,1116],{"class":1071},[1050,1417,1419,1421,1424,1426,1428,1430,1433],{"class":1052,"line":1418},24,[1050,1420,1356],{"class":1337},[1050,1422,1423],{"class":1341},"form_class",[1050,1425,1345],{"class":1337},[1050,1427,1348],{"class":1071},[1050,1429,1366],{"class":1337},[1050,1431,1432],{"class":1341},"AuthenticationForm",[1050,1434,1435],{"class":1337},"'\n",[1050,1437,1439],{"class":1052,"line":1438},25,[1050,1440,1441],{"class":1071},"            },\n",[1050,1443,1445,1447,1450,1452,1454],{"class":1052,"line":1444},26,[1050,1446,1338],{"class":1337},[1050,1448,1449],{"class":1341},"LogoutView",[1050,1451,1345],{"class":1337},[1050,1453,1348],{"class":1071},[1050,1455,1331],{"class":1071},[1050,1457,1459,1461,1463,1465,1467,1469,1472,1474],{"class":1052,"line":1458},27,[1050,1460,1356],{"class":1337},[1050,1462,1359],{"class":1341},[1050,1464,1345],{"class":1337},[1050,1466,1348],{"class":1071},[1050,1468,1366],{"class":1337},[1050,1470,1471],{"class":1341},"Handle user logout",[1050,1473,1345],{"class":1337},[1050,1475,1116],{"class":1071},[1050,1477,1479,1481,1483,1485,1487,1489,1492,1494],{"class":1052,"line":1478},28,[1050,1480,1356],{"class":1337},[1050,1482,1381],{"class":1341},[1050,1484,1345],{"class":1337},[1050,1486,1348],{"class":1071},[1050,1488,1366],{"class":1337},[1050,1490,1491],{"class":1341},"registration/logged_out.html",[1050,1493,1345],{"class":1337},[1050,1495,1116],{"class":1071},[1050,1497,1499,1501,1503,1505,1507,1509,1512,1514],{"class":1052,"line":1498},29,[1050,1500,1356],{"class":1337},[1050,1502,1402],{"class":1341},[1050,1504,1345],{"class":1337},[1050,1506,1348],{"class":1071},[1050,1508,1366],{"class":1337},[1050,1510,1511],{"class":1341},"LOGOUT_REDIRECT_URL setting",[1050,1513,1345],{"class":1337},[1050,1515,1116],{"class":1071},[1050,1517,1519,1521,1523,1525,1527],{"class":1052,"line":1518},30,[1050,1520,1356],{"class":1337},[1050,1522,1423],{"class":1341},[1050,1524,1345],{"class":1337},[1050,1526,1348],{"class":1071},[1050,1528,1530],{"class":1529},"s8XtY"," None\n",[1050,1532,1534],{"class":1052,"line":1533},31,[1050,1535,1441],{"class":1071},[1050,1537,1539,1541,1544,1546,1548],{"class":1052,"line":1538},32,[1050,1540,1338],{"class":1337},[1050,1542,1543],{"class":1341},"PasswordChangeView",[1050,1545,1345],{"class":1337},[1050,1547,1348],{"class":1071},[1050,1549,1331],{"class":1071},[1050,1551,1553,1555,1557,1559,1561,1563,1566,1568],{"class":1052,"line":1552},33,[1050,1554,1356],{"class":1337},[1050,1556,1359],{"class":1341},[1050,1558,1345],{"class":1337},[1050,1560,1348],{"class":1071},[1050,1562,1366],{"class":1337},[1050,1564,1565],{"class":1341},"Change user password",[1050,1567,1345],{"class":1337},[1050,1569,1116],{"class":1071},[1050,1571,1573,1575,1577,1579,1581,1583,1586,1588],{"class":1052,"line":1572},34,[1050,1574,1356],{"class":1337},[1050,1576,1381],{"class":1341},[1050,1578,1345],{"class":1337},[1050,1580,1348],{"class":1071},[1050,1582,1366],{"class":1337},[1050,1584,1585],{"class":1341},"registration/password_change_form.html",[1050,1587,1345],{"class":1337},[1050,1589,1116],{"class":1071},[1050,1591,1593,1595,1597,1599,1601,1603,1606,1608],{"class":1052,"line":1592},35,[1050,1594,1356],{"class":1337},[1050,1596,1402],{"class":1341},[1050,1598,1345],{"class":1337},[1050,1600,1348],{"class":1071},[1050,1602,1366],{"class":1337},[1050,1604,1605],{"class":1341},"password_change_done",[1050,1607,1345],{"class":1337},[1050,1609,1116],{"class":1071},[1050,1611,1613,1615,1617,1619,1621,1623,1626],{"class":1052,"line":1612},36,[1050,1614,1356],{"class":1337},[1050,1616,1423],{"class":1341},[1050,1618,1345],{"class":1337},[1050,1620,1348],{"class":1071},[1050,1622,1366],{"class":1337},[1050,1624,1625],{"class":1341},"PasswordChangeForm",[1050,1627,1435],{"class":1337},[1050,1629,1631],{"class":1052,"line":1630},37,[1050,1632,1441],{"class":1071},[1050,1634,1636,1638,1641,1643,1645],{"class":1052,"line":1635},38,[1050,1637,1338],{"class":1337},[1050,1639,1640],{"class":1341},"PasswordChangeDoneView",[1050,1642,1345],{"class":1337},[1050,1644,1348],{"class":1071},[1050,1646,1331],{"class":1071},[1050,1648,1650,1652,1654,1656,1658,1660,1663,1665],{"class":1052,"line":1649},39,[1050,1651,1356],{"class":1337},[1050,1653,1359],{"class":1341},[1050,1655,1345],{"class":1337},[1050,1657,1348],{"class":1071},[1050,1659,1366],{"class":1337},[1050,1661,1662],{"class":1341},"Password change success page",[1050,1664,1345],{"class":1337},[1050,1666,1116],{"class":1071},[1050,1668,1670,1672,1674,1676,1678,1680,1683,1685],{"class":1052,"line":1669},40,[1050,1671,1356],{"class":1337},[1050,1673,1381],{"class":1341},[1050,1675,1345],{"class":1337},[1050,1677,1348],{"class":1071},[1050,1679,1366],{"class":1337},[1050,1681,1682],{"class":1341},"registration/password_change_done.html",[1050,1684,1345],{"class":1337},[1050,1686,1116],{"class":1071},[1050,1688,1690,1692,1694,1696,1698,1701],{"class":1052,"line":1689},41,[1050,1691,1356],{"class":1337},[1050,1693,1402],{"class":1341},[1050,1695,1345],{"class":1337},[1050,1697,1348],{"class":1071},[1050,1699,1700],{"class":1529}," None",[1050,1702,1116],{"class":1071},[1050,1704,1706,1708,1710,1712,1714],{"class":1052,"line":1705},42,[1050,1707,1356],{"class":1337},[1050,1709,1423],{"class":1341},[1050,1711,1345],{"class":1337},[1050,1713,1348],{"class":1071},[1050,1715,1530],{"class":1529},[1050,1717,1719],{"class":1052,"line":1718},43,[1050,1720,1441],{"class":1071},[1050,1722,1724,1726,1729,1731,1733],{"class":1052,"line":1723},44,[1050,1725,1338],{"class":1337},[1050,1727,1728],{"class":1341},"PasswordResetView",[1050,1730,1345],{"class":1337},[1050,1732,1348],{"class":1071},[1050,1734,1331],{"class":1071},[1050,1736,1738,1740,1742,1744,1746,1748,1751,1753],{"class":1052,"line":1737},45,[1050,1739,1356],{"class":1337},[1050,1741,1359],{"class":1341},[1050,1743,1345],{"class":1337},[1050,1745,1348],{"class":1071},[1050,1747,1366],{"class":1337},[1050,1749,1750],{"class":1341},"Request password reset",[1050,1752,1345],{"class":1337},[1050,1754,1116],{"class":1071},[1050,1756,1758,1760,1762,1764,1766,1768,1771,1773],{"class":1052,"line":1757},46,[1050,1759,1356],{"class":1337},[1050,1761,1381],{"class":1341},[1050,1763,1345],{"class":1337},[1050,1765,1348],{"class":1071},[1050,1767,1366],{"class":1337},[1050,1769,1770],{"class":1341},"registration/password_reset_form.html",[1050,1772,1345],{"class":1337},[1050,1774,1116],{"class":1071},[1050,1776,1778,1780,1782,1784,1786,1788,1791,1793],{"class":1052,"line":1777},47,[1050,1779,1356],{"class":1337},[1050,1781,1402],{"class":1341},[1050,1783,1345],{"class":1337},[1050,1785,1348],{"class":1071},[1050,1787,1366],{"class":1337},[1050,1789,1790],{"class":1341},"password_reset_done",[1050,1792,1345],{"class":1337},[1050,1794,1116],{"class":1071},[1050,1796,1798,1800,1802,1804,1806,1808,1811],{"class":1052,"line":1797},48,[1050,1799,1356],{"class":1337},[1050,1801,1423],{"class":1341},[1050,1803,1345],{"class":1337},[1050,1805,1348],{"class":1071},[1050,1807,1366],{"class":1337},[1050,1809,1810],{"class":1341},"PasswordResetForm",[1050,1812,1435],{"class":1337},[1050,1814,1816],{"class":1052,"line":1815},49,[1050,1817,1441],{"class":1071},[1050,1819,1821,1823,1826,1828,1830],{"class":1052,"line":1820},50,[1050,1822,1338],{"class":1337},[1050,1824,1825],{"class":1341},"PasswordResetDoneView",[1050,1827,1345],{"class":1337},[1050,1829,1348],{"class":1071},[1050,1831,1331],{"class":1071},[1050,1833,1835,1837,1839,1841,1843,1845,1848,1850],{"class":1052,"line":1834},51,[1050,1836,1356],{"class":1337},[1050,1838,1359],{"class":1341},[1050,1840,1345],{"class":1337},[1050,1842,1348],{"class":1071},[1050,1844,1366],{"class":1337},[1050,1846,1847],{"class":1341},"Password reset request confirmation",[1050,1849,1345],{"class":1337},[1050,1851,1116],{"class":1071},[1050,1853,1855,1857,1859,1861,1863,1865,1868,1870],{"class":1052,"line":1854},52,[1050,1856,1356],{"class":1337},[1050,1858,1381],{"class":1341},[1050,1860,1345],{"class":1337},[1050,1862,1348],{"class":1071},[1050,1864,1366],{"class":1337},[1050,1866,1867],{"class":1341},"registration/password_reset_done.html",[1050,1869,1345],{"class":1337},[1050,1871,1116],{"class":1071},[1050,1873,1875,1877,1879,1881,1883,1885],{"class":1052,"line":1874},53,[1050,1876,1356],{"class":1337},[1050,1878,1402],{"class":1341},[1050,1880,1345],{"class":1337},[1050,1882,1348],{"class":1071},[1050,1884,1700],{"class":1529},[1050,1886,1116],{"class":1071},[1050,1888,1890,1892,1894,1896,1898],{"class":1052,"line":1889},54,[1050,1891,1356],{"class":1337},[1050,1893,1423],{"class":1341},[1050,1895,1345],{"class":1337},[1050,1897,1348],{"class":1071},[1050,1899,1530],{"class":1529},[1050,1901,1903],{"class":1052,"line":1902},55,[1050,1904,1441],{"class":1071},[1050,1906,1908,1910,1913,1915,1917],{"class":1052,"line":1907},56,[1050,1909,1338],{"class":1337},[1050,1911,1912],{"class":1341},"PasswordResetConfirmView",[1050,1914,1345],{"class":1337},[1050,1916,1348],{"class":1071},[1050,1918,1331],{"class":1071},[1050,1920,1922,1924,1926,1928,1930,1932,1935,1937],{"class":1052,"line":1921},57,[1050,1923,1356],{"class":1337},[1050,1925,1359],{"class":1341},[1050,1927,1345],{"class":1337},[1050,1929,1348],{"class":1071},[1050,1931,1366],{"class":1337},[1050,1933,1934],{"class":1341},"Confirm password reset with token",[1050,1936,1345],{"class":1337},[1050,1938,1116],{"class":1071},[1050,1940,1942,1944,1946,1948,1950,1952,1955,1957],{"class":1052,"line":1941},58,[1050,1943,1356],{"class":1337},[1050,1945,1381],{"class":1341},[1050,1947,1345],{"class":1337},[1050,1949,1348],{"class":1071},[1050,1951,1366],{"class":1337},[1050,1953,1954],{"class":1341},"registration/password_reset_confirm.html",[1050,1956,1345],{"class":1337},[1050,1958,1116],{"class":1071},[1050,1960,1962,1964,1966,1968,1970,1972,1975,1977],{"class":1052,"line":1961},59,[1050,1963,1356],{"class":1337},[1050,1965,1402],{"class":1341},[1050,1967,1345],{"class":1337},[1050,1969,1348],{"class":1071},[1050,1971,1366],{"class":1337},[1050,1973,1974],{"class":1341},"password_reset_complete",[1050,1976,1345],{"class":1337},[1050,1978,1116],{"class":1071},[1050,1980,1982,1984,1986,1988,1990,1992,1995],{"class":1052,"line":1981},60,[1050,1983,1356],{"class":1337},[1050,1985,1423],{"class":1341},[1050,1987,1345],{"class":1337},[1050,1989,1348],{"class":1071},[1050,1991,1366],{"class":1337},[1050,1993,1994],{"class":1341},"SetPasswordForm",[1050,1996,1435],{"class":1337},[1050,1998,2000],{"class":1052,"line":1999},61,[1050,2001,1441],{"class":1071},[1050,2003,2005,2007,2010,2012,2014],{"class":1052,"line":2004},62,[1050,2006,1338],{"class":1337},[1050,2008,2009],{"class":1341},"PasswordResetCompleteView",[1050,2011,1345],{"class":1337},[1050,2013,1348],{"class":1071},[1050,2015,1331],{"class":1071},[1050,2017,2019,2021,2023,2025,2027,2029,2032,2034],{"class":1052,"line":2018},63,[1050,2020,1356],{"class":1337},[1050,2022,1359],{"class":1341},[1050,2024,1345],{"class":1337},[1050,2026,1348],{"class":1071},[1050,2028,1366],{"class":1337},[1050,2030,2031],{"class":1341},"Password reset completion page",[1050,2033,1345],{"class":1337},[1050,2035,1116],{"class":1071},[1050,2037,2039,2041,2043,2045,2047,2049,2052,2054],{"class":1052,"line":2038},64,[1050,2040,1356],{"class":1337},[1050,2042,1381],{"class":1341},[1050,2044,1345],{"class":1337},[1050,2046,1348],{"class":1071},[1050,2048,1366],{"class":1337},[1050,2050,2051],{"class":1341},"registration/password_reset_complete.html",[1050,2053,1345],{"class":1337},[1050,2055,1116],{"class":1071},[1050,2057,2059,2061,2063,2065,2067,2069],{"class":1052,"line":2058},65,[1050,2060,1356],{"class":1337},[1050,2062,1402],{"class":1341},[1050,2064,1345],{"class":1337},[1050,2066,1348],{"class":1071},[1050,2068,1700],{"class":1529},[1050,2070,1116],{"class":1071},[1050,2072,2074,2076,2078,2080,2082],{"class":1052,"line":2073},66,[1050,2075,1356],{"class":1337},[1050,2077,1423],{"class":1341},[1050,2079,1345],{"class":1337},[1050,2081,1348],{"class":1071},[1050,2083,1530],{"class":1529},[1050,2085,2087],{"class":1052,"line":2086},67,[1050,2088,2089],{"class":1071},"            }\n",[1050,2091,2093],{"class":1052,"line":2092},68,[1050,2094,2095],{"class":1071},"        }\n",[1050,2097,2099],{"class":1052,"line":2098},69,[1050,2100,1319],{"class":1067},[1050,2102,2104,2107],{"class":1052,"line":2103},70,[1050,2105,2106],{"class":1063},"        return",[1050,2108,2109],{"class":1067}," views_summary\n",[1050,2111,2113],{"class":1052,"line":2112},71,[1050,2114,1279],{"class":1067},[1050,2116,2118,2120],{"class":1052,"line":2117},72,[1050,2119,1285],{"class":1071},[1050,2121,1289],{"class":1288},[1050,2123,2125,2127,2130],{"class":1052,"line":2124},73,[1050,2126,1295],{"class":1251},[1050,2128,2129],{"class":1298}," basic_url_configuration",[1050,2131,1302],{"class":1071},[1050,2133,2135,2137,2140],{"class":1052,"line":2134},74,[1050,2136,1308],{"class":1265},[1050,2138,2139],{"class":1269},"Basic URL configuration for authentication views",[1050,2141,1273],{"class":1265},[1050,2143,2145],{"class":1052,"line":2144},75,[1050,2146,1319],{"class":1067},[1050,2148,2150],{"class":1052,"line":2149},76,[1050,2151,2152],{"class":1056},"        # Method 1: Use Django's built-in auth URLs\n",[1050,2154,2156,2159,2161],{"class":1052,"line":2155},77,[1050,2157,2158],{"class":1067},"        urlpatterns_builtin ",[1050,2160,1328],{"class":1071},[1050,2162,2163],{"class":1071}," [\n",[1050,2165,2167,2171,2174,2176,2179,2181,2183,2186,2188,2190,2193,2195],{"class":1052,"line":2166},78,[1050,2168,2170],{"class":2169},"siWMO","            path",[1050,2172,2173],{"class":1071},"(",[1050,2175,1345],{"class":1337},[1050,2177,2178],{"class":1341},"accounts/",[1050,2180,1345],{"class":1337},[1050,2182,1100],{"class":1071},[1050,2184,2185],{"class":2169}," include",[1050,2187,2173],{"class":1071},[1050,2189,1345],{"class":1337},[1050,2191,2192],{"class":1341},"django.contrib.auth.urls",[1050,2194,1345],{"class":1337},[1050,2196,2197],{"class":1071},")),\n",[1050,2199,2201],{"class":1052,"line":2200},79,[1050,2202,2203],{"class":1071},"        ]\n",[1050,2205,2207],{"class":1052,"line":2206},80,[1050,2208,1319],{"class":1067},[1050,2210,2212],{"class":1052,"line":2211},81,[1050,2213,2214],{"class":1056},"        # This includes all these URLs:\n",[1050,2216,2218],{"class":1052,"line":2217},82,[1050,2219,2220],{"class":1056},"        # accounts/login/ [name='login']\n",[1050,2222,2224],{"class":1052,"line":2223},83,[1050,2225,2226],{"class":1056},"        # accounts/logout/ [name='logout']\n",[1050,2228,2230],{"class":1052,"line":2229},84,[1050,2231,2232],{"class":1056},"        # accounts/password_change/ [name='password_change']\n",[1050,2234,2236],{"class":1052,"line":2235},85,[1050,2237,2238],{"class":1056},"        # accounts/password_change/done/ [name='password_change_done']\n",[1050,2240,2242],{"class":1052,"line":2241},86,[1050,2243,2244],{"class":1056},"        # accounts/password_reset/ [name='password_reset']\n",[1050,2246,2248],{"class":1052,"line":2247},87,[1050,2249,2250],{"class":1056},"        # accounts/password_reset/done/ [name='password_reset_done']\n",[1050,2252,2254],{"class":1052,"line":2253},88,[1050,2255,2256],{"class":1056},"        # accounts/reset/\u003Cuidb64>/\u003Ctoken>/ [name='password_reset_confirm']\n",[1050,2258,2260],{"class":1052,"line":2259},89,[1050,2261,2262],{"class":1056},"        # accounts/reset/done/ [name='password_reset_complete']\n",[1050,2264,2266],{"class":1052,"line":2265},90,[1050,2267,1319],{"class":1067},[1050,2269,2271],{"class":1052,"line":2270},91,[1050,2272,2273],{"class":1056},"        # Method 2: Define individual views\n",[1050,2275,2277,2280,2282],{"class":1052,"line":2276},92,[1050,2278,2279],{"class":1067},"        urlpatterns_individual ",[1050,2281,1328],{"class":1071},[1050,2283,2163],{"class":1071},[1050,2285,2287,2289,2291,2293,2296,2298,2300,2303,2305,2308,2311,2315,2317,2319,2322,2324],{"class":1052,"line":2286},93,[1050,2288,2170],{"class":2169},[1050,2290,2173],{"class":1071},[1050,2292,1345],{"class":1337},[1050,2294,2295],{"class":1341},"login/",[1050,2297,1345],{"class":1337},[1050,2299,1100],{"class":1071},[1050,2301,2302],{"class":2169}," LoginView",[1050,2304,1072],{"class":1071},[1050,2306,2307],{"class":2169},"as_view",[1050,2309,2310],{"class":1071},"(),",[1050,2312,2314],{"class":2313},"sqOPj"," name",[1050,2316,1328],{"class":1071},[1050,2318,1345],{"class":1337},[1050,2320,2321],{"class":1341},"login",[1050,2323,1345],{"class":1337},[1050,2325,2326],{"class":1071},"),\n",[1050,2328,2330,2332,2334,2336,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357,2360,2362],{"class":1052,"line":2329},94,[1050,2331,2170],{"class":2169},[1050,2333,2173],{"class":1071},[1050,2335,1345],{"class":1337},[1050,2337,2338],{"class":1341},"logout/",[1050,2340,1345],{"class":1337},[1050,2342,1100],{"class":1071},[1050,2344,1103],{"class":2169},[1050,2346,1072],{"class":1071},[1050,2348,2307],{"class":2169},[1050,2350,2310],{"class":1071},[1050,2352,2314],{"class":2313},[1050,2354,1328],{"class":1071},[1050,2356,1345],{"class":1337},[1050,2358,2359],{"class":1341},"logout",[1050,2361,1345],{"class":1337},[1050,2363,2326],{"class":1071},[1050,2365,2367,2369,2371,2373,2376,2378,2380,2382,2384,2386,2388,2390,2392,2394,2397,2399],{"class":1052,"line":2366},95,[1050,2368,2170],{"class":2169},[1050,2370,2173],{"class":1071},[1050,2372,1345],{"class":1337},[1050,2374,2375],{"class":1341},"password_change/",[1050,2377,1345],{"class":1337},[1050,2379,1100],{"class":1071},[1050,2381,1108],{"class":2169},[1050,2383,1072],{"class":1071},[1050,2385,2307],{"class":2169},[1050,2387,2310],{"class":1071},[1050,2389,2314],{"class":2313},[1050,2391,1328],{"class":1071},[1050,2393,1345],{"class":1337},[1050,2395,2396],{"class":1341},"password_change",[1050,2398,1345],{"class":1337},[1050,2400,2326],{"class":1071},[1050,2402,2404,2406,2408,2410,2413,2415,2417,2419,2421,2423,2425,2427,2429,2431,2433,2435],{"class":1052,"line":2403},96,[1050,2405,2170],{"class":2169},[1050,2407,2173],{"class":1071},[1050,2409,1345],{"class":1337},[1050,2411,2412],{"class":1341},"password_change/done/",[1050,2414,1345],{"class":1337},[1050,2416,1100],{"class":1071},[1050,2418,1113],{"class":2169},[1050,2420,1072],{"class":1071},[1050,2422,2307],{"class":2169},[1050,2424,2310],{"class":1071},[1050,2426,2314],{"class":2313},[1050,2428,1328],{"class":1071},[1050,2430,1345],{"class":1337},[1050,2432,1605],{"class":1341},[1050,2434,1345],{"class":1337},[1050,2436,2326],{"class":1071},[1050,2438,2440,2442,2444,2446,2449,2451,2453,2456,2458,2460,2462,2464,2466,2468,2471,2473],{"class":1052,"line":2439},97,[1050,2441,2170],{"class":2169},[1050,2443,2173],{"class":1071},[1050,2445,1345],{"class":1337},[1050,2447,2448],{"class":1341},"password_reset/",[1050,2450,1345],{"class":1337},[1050,2452,1100],{"class":1071},[1050,2454,2455],{"class":2169}," PasswordResetView",[1050,2457,1072],{"class":1071},[1050,2459,2307],{"class":2169},[1050,2461,2310],{"class":1071},[1050,2463,2314],{"class":2313},[1050,2465,1328],{"class":1071},[1050,2467,1345],{"class":1337},[1050,2469,2470],{"class":1341},"password_reset",[1050,2472,1345],{"class":1337},[1050,2474,2326],{"class":1071},[1050,2476,2478,2480,2482,2484,2487,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509],{"class":1052,"line":2477},98,[1050,2479,2170],{"class":2169},[1050,2481,2173],{"class":1071},[1050,2483,1345],{"class":1337},[1050,2485,2486],{"class":1341},"password_reset/done/",[1050,2488,1345],{"class":1337},[1050,2490,1100],{"class":1071},[1050,2492,1127],{"class":2169},[1050,2494,1072],{"class":1071},[1050,2496,2307],{"class":2169},[1050,2498,2310],{"class":1071},[1050,2500,2314],{"class":2313},[1050,2502,1328],{"class":1071},[1050,2504,1345],{"class":1337},[1050,2506,1790],{"class":1341},[1050,2508,1345],{"class":1337},[1050,2510,2326],{"class":1071},[1050,2512,2514,2516,2518,2520,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2544,2546],{"class":1052,"line":2513},99,[1050,2515,2170],{"class":2169},[1050,2517,2173],{"class":1071},[1050,2519,1345],{"class":1337},[1050,2521,2522],{"class":1341},"reset/\u003Cuidb64>/\u003Ctoken>/",[1050,2524,1345],{"class":1337},[1050,2526,1100],{"class":1071},[1050,2528,1132],{"class":2169},[1050,2530,1072],{"class":1071},[1050,2532,2307],{"class":2169},[1050,2534,2310],{"class":1071},[1050,2536,2314],{"class":2313},[1050,2538,1328],{"class":1071},[1050,2540,1345],{"class":1337},[1050,2542,2543],{"class":1341},"password_reset_confirm",[1050,2545,1345],{"class":1337},[1050,2547,2326],{"class":1071},[1050,2549,2551,2553,2555,2557,2560,2562,2564,2567,2569,2571,2573,2575,2577,2579,2581,2583],{"class":1052,"line":2550},100,[1050,2552,2170],{"class":2169},[1050,2554,2173],{"class":1071},[1050,2556,1345],{"class":1337},[1050,2558,2559],{"class":1341},"reset/done/",[1050,2561,1345],{"class":1337},[1050,2563,1100],{"class":1071},[1050,2565,2566],{"class":2169}," PasswordResetCompleteView",[1050,2568,1072],{"class":1071},[1050,2570,2307],{"class":2169},[1050,2572,2310],{"class":1071},[1050,2574,2314],{"class":2313},[1050,2576,1328],{"class":1071},[1050,2578,1345],{"class":1337},[1050,2580,1974],{"class":1341},[1050,2582,1345],{"class":1337},[1050,2584,2326],{"class":1071},[1050,2586,2588],{"class":1052,"line":2587},101,[1050,2589,2203],{"class":1071},[1050,2591,2593],{"class":1052,"line":2592},102,[1050,2594,1319],{"class":1067},[1050,2596,2598,2600,2603,2605],{"class":1052,"line":2597},103,[1050,2599,2106],{"class":1063},[1050,2601,2602],{"class":1067}," urlpatterns_builtin",[1050,2604,1100],{"class":1071},[1050,2606,2607],{"class":1067}," urlpatterns_individual\n",[1026,2609,2610],{},"Let me continue with the rest of the content:",[1026,2612,2613,2614],{},"\u003Cfunction_calls>\n",[2615,2616,2618],"invoke",{"name":2617},"fsAppend",[2619,2620,2622],"parameter",{"name":2621},"path","content/09.authentication-and-authorization/06.authentication-views.mdustom Authentication Views",[1035,2624,2626],{"id":2625},"custom-login-views","Custom Login Views",[1040,2628,2630],{"className":1042,"code":2629,"language":1044,"meta":1045,"style":1045},"# Custom login view implementations\nfrom django.contrib.auth.views import LoginView\nfrom django.contrib.auth.forms import AuthenticationForm\nfrom django.contrib.auth import login\nfrom django.shortcuts import render, redirect\nfrom django.contrib import messages\nfrom django.urls import reverse_lazy\nfrom django.utils.decorators import method_decorator\nfrom django.views.decorators.cache import never_cache\nfrom django.views.decorators.csrf import csrf_protect\nfrom django.views.decorators.debug import sensitive_post_parameters\n\nclass CustomLoginView(LoginView):\n    \"\"\"Enhanced login view with additional features\"\"\"\n    \n    template_name = 'auth/login.html'\n    form_class = AuthenticationForm\n    redirect_authenticated_user = True\n    \n    @method_decorator(sensitive_post_parameters())\n    @method_decorator(csrf_protect)\n    @method_decorator(never_cache)\n    def dispatch(self, request, *args, **kwargs):\n        return super().dispatch(request, *args, **kwargs)\n    \n    def get_success_url(self):\n        \"\"\"Determine where to redirect after successful login\"\"\"\n        \n        # Check for 'next' parameter\n        next_url = self.request.POST.get('next') or self.request.GET.get('next')\n        \n        if next_url:\n            return next_url\n        \n        # Redirect based on user type\n        user = self.request.user\n        \n        if user.is_superuser:\n            return reverse_lazy('admin:index')\n        elif user.is_staff:\n            return reverse_lazy('staff_dashboard')\n        elif user.groups.filter(name='Editors').exists():\n            return reverse_lazy('editor_dashboard')\n        else:\n            return reverse_lazy('user_dashboard')\n    \n    def form_valid(self, form):\n        \"\"\"Handle successful login\"\"\"\n        \n        response = super().form_valid(form)\n        \n        user = form.get_user()\n        \n        # Log successful login\n        import logging\n        logger = logging.getLogger('auth')\n        logger.info(f\"User {user.username} logged in from {self.request.META.get('REMOTE_ADDR')}\")\n        \n        # Set session data\n        self.request.session['login_timestamp'] = timezone.now().isoformat()\n        self.request.session['user_agent'] = self.request.META.get('HTTP_USER_AGENT', '')[:200]\n        \n        # Handle \"Remember Me\" functionality\n        remember_me = self.request.POST.get('remember_me')\n        if remember_me:\n            # Set session to expire when browser closes (default)\n            self.request.session.set_expiry(0)\n        else:\n            # Set session to expire in 1 hour\n            self.request.session.set_expiry(3600)\n        \n        # Add success message\n        messages.success(\n            self.request, \n            f'Welcome back, {user.get_full_name() or user.username}!'\n        )\n        \n        # Update last login timestamp\n        user.last_login = timezone.now()\n        user.save(update_fields=['last_login'])\n        \n        return response\n    \n    def form_invalid(self, form):\n        \"\"\"Handle failed login attempt\"\"\"\n        \n        response = super().form_invalid(form)\n        \n        # Log failed login attempt\n        username = form.cleaned_data.get('username', 'unknown')\n        \n        import logging\n        logger = logging.getLogger('auth')\n        logger.warning(\n            f\"Failed login attempt for username: {username} \"\n            f\"from {self.request.META.get('REMOTE_ADDR')}\"\n        )\n        \n        # Implement rate limiting (basic example)\n        from django.core.cache import cache\n        \n        ip_address = self.request.META.get('REMOTE_ADDR')\n        cache_key = f\"failed_login_{ip_address}\"\n        \n        failed_attempts = cache.get(cache_key, 0) + 1\n        cache.set(cache_key, failed_attempts, 300)  # 5 minutes\n        \n        if failed_attempts >= 5:\n            messages.error(\n                self.request,\n                \"Too many failed login attempts. Please try again in 5 minutes.\"\n            )\n        \n        return response\n    \n    def get_context_data(self, **kwargs):\n        \"\"\"Add additional context to template\"\"\"\n        \n        context = super().get_context_data(**kwargs)\n        \n        context.update({\n            'site_name': 'Your Site Name',\n            'allow_registration': True,\n            'social_login_enabled': True,\n            'password_reset_enabled': True,\n        })\n        \n        return context\n\nclass AjaxLoginView(LoginView):\n    \"\"\"Login view that supports AJAX requests\"\"\"\n    \n    def form_valid(self, form):\n        \"\"\"Handle successful AJAX login\"\"\"\n        \n        if self.request.headers.get('X-Requested-With') == 'XMLHttpRequest':\n            login(self.request, form.get_user())\n            \n            return JsonResponse({\n                'success': True,\n                'message': 'Login successful',\n                'redirect_url': self.get_success_url()\n            })\n        \n        return super().form_valid(form)\n    \n    def form_invalid(self, form):\n        \"\"\"Handle failed AJAX login\"\"\"\n        \n        if self.request.headers.get('X-Requested-With') == 'XMLHttpRequest':\n            return JsonResponse({\n                'success': False,\n                'errors': form.errors,\n                'message': 'Login failed'\n            })\n        \n        return super().form_invalid(form)\n\n# Function-based login view\ndef custom_login_view(request):\n    \"\"\"Custom function-based login view\"\"\"\n    \n    if request.user.is_authenticated:\n        return redirect('dashboard')\n    \n    if request.method == 'POST':\n        username = request.POST.get('username')\n        password = request.POST.get('password')\n        remember_me = request.POST.get('remember_me')\n        \n        # Authenticate user\n        user = authenticate(request, username=username, password=password)\n        \n        if user is not None:\n            if user.is_active:\n                # Log in user\n                login(request, user)\n                \n                # Handle remember me\n                if not remember_me:\n                    request.session.set_expiry(0)  # Browser session\n                \n                # Add success message\n                messages.success(request, f'Welcome, {user.get_full_name() or user.username}!')\n                \n                # Redirect to next or default\n                next_url = request.POST.get('next') or request.GET.get('next')\n                return redirect(next_url or 'dashboard')\n            else:\n                messages.error(request, 'Your account is disabled.')\n        else:\n            messages.error(request, 'Invalid username or password.')\n    \n    context = {\n        'next': request.GET.get('next', ''),\n    }\n    \n    return render(request, 'auth/login.html', context)\n",[1047,2631,2632,2637,2660,2684,2703,2721,2735,2749,2770,2796,2820,2844,2848,2863,2872,2876,2890,2899,2909,2913,2928,2941,2954,2992,3024,3028,3041,3050,3054,3059,3126,3130,3140,3148,3152,3157,3175,3179,3193,3211,3225,3242,3280,3297,3304,3321,3325,3343,3352,3356,3377,3381,3397,3401,3406,3414,3439,3510,3514,3519,3564,3627,3631,3636,3668,3677,3682,3707,3713,3718,3741,3745,3750,3763,3776,3809,3814,3818,3823,3843,3869,3873,3880,3884,3901,3910,3914,3933,3937,3942,3979,3983,3989,4011,4022,4038,4076,4080,4084,4089,4110,4114,4145,4167,4172,4205,4235,4240,4256,4269,4281,4292,4298,4303,4310,4315,4335,4345,4350,4374,4379,4393,4414,4431,4447,4463,4469,4474,4482,4487,4501,4511,4516,4533,4543,4548,4591,4615,4621,4631,4646,4667,4688,4694,4699,4716,4721,4738,4748,4753,4792,4801,4817,4837,4855,4860,4865,4882,4887,4893,4908,4918,4923,4942,4961,4966,4988,5015,5044,5071,5076,5082,5115,5120,5138,5153,5159,5175,5181,5187,5199,5222,5227,5233,5279,5284,5290,5340,5364,5372,5396,5403,5427,5432,5442,5478,5484,5489],{"__ignoreMap":1045},[1050,2633,2634],{"class":1052,"line":1053},[1050,2635,2636],{"class":1056},"# Custom login view implementations\n",[1050,2638,2639,2641,2643,2645,2647,2649,2651,2653,2655,2657],{"class":1052,"line":1060},[1050,2640,1064],{"class":1063},[1050,2642,1068],{"class":1067},[1050,2644,1072],{"class":1071},[1050,2646,1075],{"class":1067},[1050,2648,1072],{"class":1071},[1050,2650,1080],{"class":1067},[1050,2652,1072],{"class":1071},[1050,2654,1085],{"class":1067},[1050,2656,1088],{"class":1063},[1050,2658,2659],{"class":1067}," LoginView\n",[1050,2661,2662,2664,2666,2668,2670,2672,2674,2676,2679,2681],{"class":1052,"line":1094},[1050,2663,1064],{"class":1063},[1050,2665,1068],{"class":1067},[1050,2667,1072],{"class":1071},[1050,2669,1075],{"class":1067},[1050,2671,1072],{"class":1071},[1050,2673,1080],{"class":1067},[1050,2675,1072],{"class":1071},[1050,2677,2678],{"class":1067},"forms ",[1050,2680,1088],{"class":1063},[1050,2682,2683],{"class":1067}," AuthenticationForm\n",[1050,2685,2686,2688,2690,2692,2694,2696,2698,2700],{"class":1052,"line":1119},[1050,2687,1064],{"class":1063},[1050,2689,1068],{"class":1067},[1050,2691,1072],{"class":1071},[1050,2693,1075],{"class":1067},[1050,2695,1072],{"class":1071},[1050,2697,1206],{"class":1067},[1050,2699,1088],{"class":1063},[1050,2701,2702],{"class":1067}," login\n",[1050,2704,2705,2707,2709,2711,2713,2715,2717,2719],{"class":1052,"line":1137},[1050,2706,1064],{"class":1063},[1050,2708,1068],{"class":1067},[1050,2710,1072],{"class":1071},[1050,2712,1180],{"class":1067},[1050,2714,1088],{"class":1063},[1050,2716,1185],{"class":1067},[1050,2718,1100],{"class":1071},[1050,2720,1190],{"class":1067},[1050,2722,2723,2725,2727,2729,2731,2733],{"class":1052,"line":1143},[1050,2724,1064],{"class":1063},[1050,2726,1068],{"class":1067},[1050,2728,1072],{"class":1071},[1050,2730,1233],{"class":1067},[1050,2732,1088],{"class":1063},[1050,2734,1238],{"class":1067},[1050,2736,2737,2739,2741,2743,2745,2747],{"class":1052,"line":1149},[1050,2738,1064],{"class":1063},[1050,2740,1068],{"class":1067},[1050,2742,1072],{"class":1071},[1050,2744,1158],{"class":1067},[1050,2746,1088],{"class":1063},[1050,2748,1168],{"class":1067},[1050,2750,2751,2753,2755,2757,2760,2762,2765,2767],{"class":1052,"line":1171},[1050,2752,1064],{"class":1063},[1050,2754,1068],{"class":1067},[1050,2756,1072],{"class":1071},[1050,2758,2759],{"class":1067},"utils",[1050,2761,1072],{"class":1071},[1050,2763,2764],{"class":1067},"decorators ",[1050,2766,1088],{"class":1063},[1050,2768,2769],{"class":1067}," method_decorator\n",[1050,2771,2772,2774,2776,2778,2781,2783,2786,2788,2791,2793],{"class":1052,"line":1193},[1050,2773,1064],{"class":1063},[1050,2775,1068],{"class":1067},[1050,2777,1072],{"class":1071},[1050,2779,2780],{"class":1067},"views",[1050,2782,1072],{"class":1071},[1050,2784,2785],{"class":1067},"decorators",[1050,2787,1072],{"class":1071},[1050,2789,2790],{"class":1067},"cache ",[1050,2792,1088],{"class":1063},[1050,2794,2795],{"class":1067}," never_cache\n",[1050,2797,2798,2800,2802,2804,2806,2808,2810,2812,2815,2817],{"class":1052,"line":1224},[1050,2799,1064],{"class":1063},[1050,2801,1068],{"class":1067},[1050,2803,1072],{"class":1071},[1050,2805,2780],{"class":1067},[1050,2807,1072],{"class":1071},[1050,2809,2785],{"class":1067},[1050,2811,1072],{"class":1071},[1050,2813,2814],{"class":1067},"csrf ",[1050,2816,1088],{"class":1063},[1050,2818,2819],{"class":1067}," csrf_protect\n",[1050,2821,2822,2824,2826,2828,2830,2832,2834,2836,2839,2841],{"class":1052,"line":1241},[1050,2823,1064],{"class":1063},[1050,2825,1068],{"class":1067},[1050,2827,1072],{"class":1071},[1050,2829,2780],{"class":1067},[1050,2831,1072],{"class":1071},[1050,2833,2785],{"class":1067},[1050,2835,1072],{"class":1071},[1050,2837,2838],{"class":1067},"debug ",[1050,2840,1088],{"class":1063},[1050,2842,2843],{"class":1067}," sensitive_post_parameters\n",[1050,2845,2846],{"class":1052,"line":1248},[1050,2847,1245],{"emptyLinePlaceholder":1244},[1050,2849,2850,2852,2855,2857,2860],{"class":1052,"line":1262},[1050,2851,1252],{"class":1251},[1050,2853,2854],{"class":1255}," CustomLoginView",[1050,2856,2173],{"class":1071},[1050,2858,1342],{"class":2859},"sYn-s",[1050,2861,2862],{"class":1071},"):\n",[1050,2864,2865,2867,2870],{"class":1052,"line":1276},[1050,2866,1266],{"class":1265},[1050,2868,2869],{"class":1269},"Enhanced login view with additional features",[1050,2871,1273],{"class":1265},[1050,2873,2874],{"class":1052,"line":1282},[1050,2875,1279],{"class":1067},[1050,2877,2878,2881,2883,2885,2888],{"class":1052,"line":1292},[1050,2879,2880],{"class":1067},"    template_name ",[1050,2882,1328],{"class":1071},[1050,2884,1366],{"class":1337},[1050,2886,2887],{"class":1341},"auth/login.html",[1050,2889,1435],{"class":1337},[1050,2891,2892,2895,2897],{"class":1052,"line":1305},[1050,2893,2894],{"class":1067},"    form_class ",[1050,2896,1328],{"class":1071},[1050,2898,2683],{"class":1067},[1050,2900,2901,2904,2906],{"class":1052,"line":1316},[1050,2902,2903],{"class":1067},"    redirect_authenticated_user ",[1050,2905,1328],{"class":1071},[1050,2907,2908],{"class":1529}," True\n",[1050,2910,2911],{"class":1052,"line":1322},[1050,2912,1279],{"class":1067},[1050,2914,2915,2917,2920,2922,2925],{"class":1052,"line":1334},[1050,2916,1285],{"class":1071},[1050,2918,2919],{"class":1298},"method_decorator",[1050,2921,2173],{"class":1071},[1050,2923,2924],{"class":2169},"sensitive_post_parameters",[1050,2926,2927],{"class":1071},"())\n",[1050,2929,2930,2932,2934,2936,2939],{"class":1052,"line":1353},[1050,2931,1285],{"class":1071},[1050,2933,2919],{"class":1298},[1050,2935,2173],{"class":1071},[1050,2937,2938],{"class":2169},"csrf_protect",[1050,2940,1146],{"class":1071},[1050,2942,2943,2945,2947,2949,2952],{"class":1052,"line":1376},[1050,2944,1285],{"class":1071},[1050,2946,2919],{"class":1298},[1050,2948,2173],{"class":1071},[1050,2950,2951],{"class":2169},"never_cache",[1050,2953,1146],{"class":1071},[1050,2955,2956,2958,2961,2963,2967,2969,2973,2975,2979,2982,2984,2987,2990],{"class":1052,"line":1397},[1050,2957,1295],{"class":1251},[1050,2959,2960],{"class":1298}," dispatch",[1050,2962,2173],{"class":1071},[1050,2964,2966],{"class":2965},"sRjD_","self",[1050,2968,1100],{"class":1071},[1050,2970,2972],{"class":2971},"sCyAa"," request",[1050,2974,1100],{"class":1071},[1050,2976,2978],{"class":2977},"sVsLi"," *",[1050,2980,2981],{"class":2971},"args",[1050,2983,1100],{"class":1071},[1050,2985,2986],{"class":2977}," **",[1050,2988,2989],{"class":2971},"kwargs",[1050,2991,2862],{"class":1071},[1050,2993,2994,2996,2999,3002,3005,3007,3010,3012,3014,3016,3018,3020,3022],{"class":1052,"line":1418},[1050,2995,2106],{"class":1063},[1050,2997,2998],{"class":1288}," super",[1050,3000,3001],{"class":1071},"().",[1050,3003,3004],{"class":2169},"dispatch",[1050,3006,2173],{"class":1071},[1050,3008,3009],{"class":2169},"request",[1050,3011,1100],{"class":1071},[1050,3013,2978],{"class":2977},[1050,3015,2981],{"class":2169},[1050,3017,1100],{"class":1071},[1050,3019,2986],{"class":2977},[1050,3021,2989],{"class":2169},[1050,3023,1146],{"class":1071},[1050,3025,3026],{"class":1052,"line":1438},[1050,3027,1279],{"class":1067},[1050,3029,3030,3032,3035,3037,3039],{"class":1052,"line":1444},[1050,3031,1295],{"class":1251},[1050,3033,3034],{"class":1298}," get_success_url",[1050,3036,2173],{"class":1071},[1050,3038,2966],{"class":2965},[1050,3040,2862],{"class":1071},[1050,3042,3043,3045,3048],{"class":1052,"line":1458},[1050,3044,1308],{"class":1265},[1050,3046,3047],{"class":1269},"Determine where to redirect after successful login",[1050,3049,1273],{"class":1265},[1050,3051,3052],{"class":1052,"line":1478},[1050,3053,1319],{"class":1067},[1050,3055,3056],{"class":1052,"line":1498},[1050,3057,3058],{"class":1056},"        # Check for 'next' parameter\n",[1050,3060,3061,3064,3066,3070,3072,3075,3077,3081,3083,3086,3088,3090,3093,3095,3098,3101,3103,3105,3107,3109,3112,3114,3116,3118,3120,3122,3124],{"class":1052,"line":1518},[1050,3062,3063],{"class":1067},"        next_url ",[1050,3065,1328],{"class":1071},[1050,3067,3069],{"class":3068},"se3Ec"," self",[1050,3071,1072],{"class":1071},[1050,3073,3009],{"class":3074},"sBPpx",[1050,3076,1072],{"class":1071},[1050,3078,3080],{"class":3079},"sFGJz","POST",[1050,3082,1072],{"class":1071},[1050,3084,3085],{"class":2169},"get",[1050,3087,2173],{"class":1071},[1050,3089,1345],{"class":1337},[1050,3091,3092],{"class":1341},"next",[1050,3094,1345],{"class":1337},[1050,3096,3097],{"class":1071},")",[1050,3099,3100],{"class":2977}," or",[1050,3102,3069],{"class":3068},[1050,3104,1072],{"class":1071},[1050,3106,3009],{"class":3074},[1050,3108,1072],{"class":1071},[1050,3110,3111],{"class":3079},"GET",[1050,3113,1072],{"class":1071},[1050,3115,3085],{"class":2169},[1050,3117,2173],{"class":1071},[1050,3119,1345],{"class":1337},[1050,3121,3092],{"class":1341},[1050,3123,1345],{"class":1337},[1050,3125,1146],{"class":1071},[1050,3127,3128],{"class":1052,"line":1533},[1050,3129,1319],{"class":1067},[1050,3131,3132,3135,3138],{"class":1052,"line":1538},[1050,3133,3134],{"class":1063},"        if",[1050,3136,3137],{"class":1067}," next_url",[1050,3139,1259],{"class":1071},[1050,3141,3142,3145],{"class":1052,"line":1552},[1050,3143,3144],{"class":1063},"            return",[1050,3146,3147],{"class":1067}," next_url\n",[1050,3149,3150],{"class":1052,"line":1572},[1050,3151,1319],{"class":1067},[1050,3153,3154],{"class":1052,"line":1592},[1050,3155,3156],{"class":1056},"        # Redirect based on user type\n",[1050,3158,3159,3162,3164,3166,3168,3170,3172],{"class":1052,"line":1612},[1050,3160,3161],{"class":1067},"        user ",[1050,3163,1328],{"class":1071},[1050,3165,3069],{"class":3068},[1050,3167,1072],{"class":1071},[1050,3169,3009],{"class":3074},[1050,3171,1072],{"class":1071},[1050,3173,3174],{"class":3074},"user\n",[1050,3176,3177],{"class":1052,"line":1630},[1050,3178,1319],{"class":1067},[1050,3180,3181,3183,3186,3188,3191],{"class":1052,"line":1635},[1050,3182,3134],{"class":1063},[1050,3184,3185],{"class":1067}," user",[1050,3187,1072],{"class":1071},[1050,3189,3190],{"class":3074},"is_superuser",[1050,3192,1259],{"class":1071},[1050,3194,3195,3197,3200,3202,3204,3207,3209],{"class":1052,"line":1649},[1050,3196,3144],{"class":1063},[1050,3198,3199],{"class":2169}," reverse_lazy",[1050,3201,2173],{"class":1071},[1050,3203,1345],{"class":1337},[1050,3205,3206],{"class":1341},"admin:index",[1050,3208,1345],{"class":1337},[1050,3210,1146],{"class":1071},[1050,3212,3213,3216,3218,3220,3223],{"class":1052,"line":1669},[1050,3214,3215],{"class":1063},"        elif",[1050,3217,3185],{"class":1067},[1050,3219,1072],{"class":1071},[1050,3221,3222],{"class":3074},"is_staff",[1050,3224,1259],{"class":1071},[1050,3226,3227,3229,3231,3233,3235,3238,3240],{"class":1052,"line":1689},[1050,3228,3144],{"class":1063},[1050,3230,3199],{"class":2169},[1050,3232,2173],{"class":1071},[1050,3234,1345],{"class":1337},[1050,3236,3237],{"class":1341},"staff_dashboard",[1050,3239,1345],{"class":1337},[1050,3241,1146],{"class":1071},[1050,3243,3244,3246,3248,3250,3253,3255,3258,3260,3263,3265,3267,3270,3272,3275,3278],{"class":1052,"line":1705},[1050,3245,3215],{"class":1063},[1050,3247,3185],{"class":1067},[1050,3249,1072],{"class":1071},[1050,3251,3252],{"class":3074},"groups",[1050,3254,1072],{"class":1071},[1050,3256,3257],{"class":2169},"filter",[1050,3259,2173],{"class":1071},[1050,3261,3262],{"class":2313},"name",[1050,3264,1328],{"class":1071},[1050,3266,1345],{"class":1337},[1050,3268,3269],{"class":1341},"Editors",[1050,3271,1345],{"class":1337},[1050,3273,3274],{"class":1071},").",[1050,3276,3277],{"class":2169},"exists",[1050,3279,1302],{"class":1071},[1050,3281,3282,3284,3286,3288,3290,3293,3295],{"class":1052,"line":1718},[1050,3283,3144],{"class":1063},[1050,3285,3199],{"class":2169},[1050,3287,2173],{"class":1071},[1050,3289,1345],{"class":1337},[1050,3291,3292],{"class":1341},"editor_dashboard",[1050,3294,1345],{"class":1337},[1050,3296,1146],{"class":1071},[1050,3298,3299,3302],{"class":1052,"line":1723},[1050,3300,3301],{"class":1063},"        else",[1050,3303,1259],{"class":1071},[1050,3305,3306,3308,3310,3312,3314,3317,3319],{"class":1052,"line":1737},[1050,3307,3144],{"class":1063},[1050,3309,3199],{"class":2169},[1050,3311,2173],{"class":1071},[1050,3313,1345],{"class":1337},[1050,3315,3316],{"class":1341},"user_dashboard",[1050,3318,1345],{"class":1337},[1050,3320,1146],{"class":1071},[1050,3322,3323],{"class":1052,"line":1757},[1050,3324,1279],{"class":1067},[1050,3326,3327,3329,3332,3334,3336,3338,3341],{"class":1052,"line":1777},[1050,3328,1295],{"class":1251},[1050,3330,3331],{"class":1298}," form_valid",[1050,3333,2173],{"class":1071},[1050,3335,2966],{"class":2965},[1050,3337,1100],{"class":1071},[1050,3339,3340],{"class":2971}," form",[1050,3342,2862],{"class":1071},[1050,3344,3345,3347,3350],{"class":1052,"line":1797},[1050,3346,1308],{"class":1265},[1050,3348,3349],{"class":1269},"Handle successful login",[1050,3351,1273],{"class":1265},[1050,3353,3354],{"class":1052,"line":1815},[1050,3355,1319],{"class":1067},[1050,3357,3358,3361,3363,3365,3367,3370,3372,3375],{"class":1052,"line":1820},[1050,3359,3360],{"class":1067},"        response ",[1050,3362,1328],{"class":1071},[1050,3364,2998],{"class":1288},[1050,3366,3001],{"class":1071},[1050,3368,3369],{"class":2169},"form_valid",[1050,3371,2173],{"class":1071},[1050,3373,3374],{"class":2169},"form",[1050,3376,1146],{"class":1071},[1050,3378,3379],{"class":1052,"line":1834},[1050,3380,1319],{"class":1067},[1050,3382,3383,3385,3387,3389,3391,3394],{"class":1052,"line":1854},[1050,3384,3161],{"class":1067},[1050,3386,1328],{"class":1071},[1050,3388,3340],{"class":1067},[1050,3390,1072],{"class":1071},[1050,3392,3393],{"class":2169},"get_user",[1050,3395,3396],{"class":1071},"()\n",[1050,3398,3399],{"class":1052,"line":1874},[1050,3400,1319],{"class":1067},[1050,3402,3403],{"class":1052,"line":1889},[1050,3404,3405],{"class":1056},"        # Log successful login\n",[1050,3407,3408,3411],{"class":1052,"line":1902},[1050,3409,3410],{"class":1063},"        import",[1050,3412,3413],{"class":1067}," logging\n",[1050,3415,3416,3419,3421,3424,3426,3429,3431,3433,3435,3437],{"class":1052,"line":1907},[1050,3417,3418],{"class":1067},"        logger ",[1050,3420,1328],{"class":1071},[1050,3422,3423],{"class":1067}," logging",[1050,3425,1072],{"class":1071},[1050,3427,3428],{"class":2169},"getLogger",[1050,3430,2173],{"class":1071},[1050,3432,1345],{"class":1337},[1050,3434,1080],{"class":1341},[1050,3436,1345],{"class":1337},[1050,3438,1146],{"class":1071},[1050,3440,3441,3444,3446,3449,3451,3454,3457,3461,3464,3466,3469,3472,3475,3477,3479,3481,3483,3485,3488,3490,3492,3494,3496,3499,3501,3503,3505,3508],{"class":1052,"line":1921},[1050,3442,3443],{"class":1067},"        logger",[1050,3445,1072],{"class":1071},[1050,3447,3448],{"class":2169},"info",[1050,3450,2173],{"class":1071},[1050,3452,3453],{"class":1251},"f",[1050,3455,3456],{"class":1341},"\"User ",[1050,3458,3460],{"class":3459},"s3h35","{",[1050,3462,3463],{"class":2169},"user",[1050,3465,1072],{"class":1071},[1050,3467,3468],{"class":3074},"username",[1050,3470,3471],{"class":3459},"}",[1050,3473,3474],{"class":1341}," logged in from ",[1050,3476,3460],{"class":3459},[1050,3478,2966],{"class":3068},[1050,3480,1072],{"class":1071},[1050,3482,3009],{"class":3074},[1050,3484,1072],{"class":1071},[1050,3486,3487],{"class":3079},"META",[1050,3489,1072],{"class":1071},[1050,3491,3085],{"class":2169},[1050,3493,2173],{"class":1071},[1050,3495,1345],{"class":1337},[1050,3497,3498],{"class":1341},"REMOTE_ADDR",[1050,3500,1345],{"class":1337},[1050,3502,3097],{"class":1071},[1050,3504,3471],{"class":3459},[1050,3506,3507],{"class":1341},"\"",[1050,3509,1146],{"class":1071},[1050,3511,3512],{"class":1052,"line":1941},[1050,3513,1319],{"class":1067},[1050,3515,3516],{"class":1052,"line":1961},[1050,3517,3518],{"class":1056},"        # Set session data\n",[1050,3520,3521,3524,3526,3528,3530,3533,3536,3538,3541,3543,3546,3549,3552,3554,3557,3559,3562],{"class":1052,"line":1981},[1050,3522,3523],{"class":3068},"        self",[1050,3525,1072],{"class":1071},[1050,3527,3009],{"class":3074},[1050,3529,1072],{"class":1071},[1050,3531,3532],{"class":3074},"session",[1050,3534,3535],{"class":1071},"[",[1050,3537,1345],{"class":1337},[1050,3539,3540],{"class":1341},"login_timestamp",[1050,3542,1345],{"class":1337},[1050,3544,3545],{"class":1071},"]",[1050,3547,3548],{"class":1071}," =",[1050,3550,3551],{"class":1067}," timezone",[1050,3553,1072],{"class":1071},[1050,3555,3556],{"class":2169},"now",[1050,3558,3001],{"class":1071},[1050,3560,3561],{"class":2169},"isoformat",[1050,3563,3396],{"class":1071},[1050,3565,3566,3568,3570,3572,3574,3576,3578,3580,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607,3610,3612,3614,3617,3620,3624],{"class":1052,"line":1999},[1050,3567,3523],{"class":3068},[1050,3569,1072],{"class":1071},[1050,3571,3009],{"class":3074},[1050,3573,1072],{"class":1071},[1050,3575,3532],{"class":3074},[1050,3577,3535],{"class":1071},[1050,3579,1345],{"class":1337},[1050,3581,3582],{"class":1341},"user_agent",[1050,3584,1345],{"class":1337},[1050,3586,3545],{"class":1071},[1050,3588,3548],{"class":1071},[1050,3590,3069],{"class":3068},[1050,3592,1072],{"class":1071},[1050,3594,3009],{"class":3074},[1050,3596,1072],{"class":1071},[1050,3598,3487],{"class":3079},[1050,3600,1072],{"class":1071},[1050,3602,3085],{"class":2169},[1050,3604,2173],{"class":1071},[1050,3606,1345],{"class":1337},[1050,3608,3609],{"class":1341},"HTTP_USER_AGENT",[1050,3611,1345],{"class":1337},[1050,3613,1100],{"class":1071},[1050,3615,3616],{"class":1337}," ''",[1050,3618,3619],{"class":1071},")[:",[1050,3621,3623],{"class":3622},"s7CZa","200",[1050,3625,3626],{"class":1071},"]\n",[1050,3628,3629],{"class":1052,"line":2004},[1050,3630,1319],{"class":1067},[1050,3632,3633],{"class":1052,"line":2018},[1050,3634,3635],{"class":1056},"        # Handle \"Remember Me\" functionality\n",[1050,3637,3638,3641,3643,3645,3647,3649,3651,3653,3655,3657,3659,3661,3664,3666],{"class":1052,"line":2038},[1050,3639,3640],{"class":1067},"        remember_me ",[1050,3642,1328],{"class":1071},[1050,3644,3069],{"class":3068},[1050,3646,1072],{"class":1071},[1050,3648,3009],{"class":3074},[1050,3650,1072],{"class":1071},[1050,3652,3080],{"class":3079},[1050,3654,1072],{"class":1071},[1050,3656,3085],{"class":2169},[1050,3658,2173],{"class":1071},[1050,3660,1345],{"class":1337},[1050,3662,3663],{"class":1341},"remember_me",[1050,3665,1345],{"class":1337},[1050,3667,1146],{"class":1071},[1050,3669,3670,3672,3675],{"class":1052,"line":2058},[1050,3671,3134],{"class":1063},[1050,3673,3674],{"class":1067}," remember_me",[1050,3676,1259],{"class":1071},[1050,3678,3679],{"class":1052,"line":2073},[1050,3680,3681],{"class":1056},"            # Set session to expire when browser closes (default)\n",[1050,3683,3684,3687,3689,3691,3693,3695,3697,3700,3702,3705],{"class":1052,"line":2086},[1050,3685,3686],{"class":3068},"            self",[1050,3688,1072],{"class":1071},[1050,3690,3009],{"class":3074},[1050,3692,1072],{"class":1071},[1050,3694,3532],{"class":3074},[1050,3696,1072],{"class":1071},[1050,3698,3699],{"class":2169},"set_expiry",[1050,3701,2173],{"class":1071},[1050,3703,3704],{"class":3622},"0",[1050,3706,1146],{"class":1071},[1050,3708,3709,3711],{"class":1052,"line":2092},[1050,3710,3301],{"class":1063},[1050,3712,1259],{"class":1071},[1050,3714,3715],{"class":1052,"line":2098},[1050,3716,3717],{"class":1056},"            # Set session to expire in 1 hour\n",[1050,3719,3720,3722,3724,3726,3728,3730,3732,3734,3736,3739],{"class":1052,"line":2103},[1050,3721,3686],{"class":3068},[1050,3723,1072],{"class":1071},[1050,3725,3009],{"class":3074},[1050,3727,1072],{"class":1071},[1050,3729,3532],{"class":3074},[1050,3731,1072],{"class":1071},[1050,3733,3699],{"class":2169},[1050,3735,2173],{"class":1071},[1050,3737,3738],{"class":3622},"3600",[1050,3740,1146],{"class":1071},[1050,3742,3743],{"class":1052,"line":2112},[1050,3744,1319],{"class":1067},[1050,3746,3747],{"class":1052,"line":2117},[1050,3748,3749],{"class":1056},"        # Add success message\n",[1050,3751,3752,3755,3757,3760],{"class":1052,"line":2124},[1050,3753,3754],{"class":1067},"        messages",[1050,3756,1072],{"class":1071},[1050,3758,3759],{"class":2169},"success",[1050,3761,3762],{"class":1071},"(\n",[1050,3764,3765,3767,3769,3771,3773],{"class":1052,"line":2134},[1050,3766,3686],{"class":3068},[1050,3768,1072],{"class":1071},[1050,3770,3009],{"class":3074},[1050,3772,1100],{"class":1071},[1050,3774,3775],{"class":2169}," \n",[1050,3777,3778,3781,3784,3786,3788,3790,3793,3796,3798,3800,3802,3804,3806],{"class":1052,"line":2144},[1050,3779,3780],{"class":1251},"            f",[1050,3782,3783],{"class":1341},"'Welcome back, ",[1050,3785,3460],{"class":3459},[1050,3787,3463],{"class":2169},[1050,3789,1072],{"class":1071},[1050,3791,3792],{"class":2169},"get_full_name",[1050,3794,3795],{"class":1071},"()",[1050,3797,3100],{"class":2977},[1050,3799,3185],{"class":2169},[1050,3801,1072],{"class":1071},[1050,3803,3468],{"class":3074},[1050,3805,3471],{"class":3459},[1050,3807,3808],{"class":1341},"!'\n",[1050,3810,3811],{"class":1052,"line":2149},[1050,3812,3813],{"class":1071},"        )\n",[1050,3815,3816],{"class":1052,"line":2155},[1050,3817,1319],{"class":1067},[1050,3819,3820],{"class":1052,"line":2166},[1050,3821,3822],{"class":1056},"        # Update last login timestamp\n",[1050,3824,3825,3828,3830,3833,3835,3837,3839,3841],{"class":1052,"line":2200},[1050,3826,3827],{"class":1067},"        user",[1050,3829,1072],{"class":1071},[1050,3831,3832],{"class":3074},"last_login",[1050,3834,3548],{"class":1071},[1050,3836,3551],{"class":1067},[1050,3838,1072],{"class":1071},[1050,3840,3556],{"class":2169},[1050,3842,3396],{"class":1071},[1050,3844,3845,3847,3849,3852,3854,3857,3860,3862,3864,3866],{"class":1052,"line":2206},[1050,3846,3827],{"class":1067},[1050,3848,1072],{"class":1071},[1050,3850,3851],{"class":2169},"save",[1050,3853,2173],{"class":1071},[1050,3855,3856],{"class":2313},"update_fields",[1050,3858,3859],{"class":1071},"=[",[1050,3861,1345],{"class":1337},[1050,3863,3832],{"class":1341},[1050,3865,1345],{"class":1337},[1050,3867,3868],{"class":1071},"])\n",[1050,3870,3871],{"class":1052,"line":2211},[1050,3872,1319],{"class":1067},[1050,3874,3875,3877],{"class":1052,"line":2217},[1050,3876,2106],{"class":1063},[1050,3878,3879],{"class":1067}," response\n",[1050,3881,3882],{"class":1052,"line":2223},[1050,3883,1279],{"class":1067},[1050,3885,3886,3888,3891,3893,3895,3897,3899],{"class":1052,"line":2229},[1050,3887,1295],{"class":1251},[1050,3889,3890],{"class":1298}," form_invalid",[1050,3892,2173],{"class":1071},[1050,3894,2966],{"class":2965},[1050,3896,1100],{"class":1071},[1050,3898,3340],{"class":2971},[1050,3900,2862],{"class":1071},[1050,3902,3903,3905,3908],{"class":1052,"line":2235},[1050,3904,1308],{"class":1265},[1050,3906,3907],{"class":1269},"Handle failed login attempt",[1050,3909,1273],{"class":1265},[1050,3911,3912],{"class":1052,"line":2241},[1050,3913,1319],{"class":1067},[1050,3915,3916,3918,3920,3922,3924,3927,3929,3931],{"class":1052,"line":2247},[1050,3917,3360],{"class":1067},[1050,3919,1328],{"class":1071},[1050,3921,2998],{"class":1288},[1050,3923,3001],{"class":1071},[1050,3925,3926],{"class":2169},"form_invalid",[1050,3928,2173],{"class":1071},[1050,3930,3374],{"class":2169},[1050,3932,1146],{"class":1071},[1050,3934,3935],{"class":1052,"line":2253},[1050,3936,1319],{"class":1067},[1050,3938,3939],{"class":1052,"line":2259},[1050,3940,3941],{"class":1056},"        # Log failed login attempt\n",[1050,3943,3944,3947,3949,3951,3953,3956,3958,3960,3962,3964,3966,3968,3970,3972,3975,3977],{"class":1052,"line":2265},[1050,3945,3946],{"class":1067},"        username ",[1050,3948,1328],{"class":1071},[1050,3950,3340],{"class":1067},[1050,3952,1072],{"class":1071},[1050,3954,3955],{"class":3074},"cleaned_data",[1050,3957,1072],{"class":1071},[1050,3959,3085],{"class":2169},[1050,3961,2173],{"class":1071},[1050,3963,1345],{"class":1337},[1050,3965,3468],{"class":1341},[1050,3967,1345],{"class":1337},[1050,3969,1100],{"class":1071},[1050,3971,1366],{"class":1337},[1050,3973,3974],{"class":1341},"unknown",[1050,3976,1345],{"class":1337},[1050,3978,1146],{"class":1071},[1050,3980,3981],{"class":1052,"line":2270},[1050,3982,1319],{"class":1067},[1050,3984,3985,3987],{"class":1052,"line":2276},[1050,3986,3410],{"class":1063},[1050,3988,3413],{"class":1067},[1050,3990,3991,3993,3995,3997,3999,4001,4003,4005,4007,4009],{"class":1052,"line":2286},[1050,3992,3418],{"class":1067},[1050,3994,1328],{"class":1071},[1050,3996,3423],{"class":1067},[1050,3998,1072],{"class":1071},[1050,4000,3428],{"class":2169},[1050,4002,2173],{"class":1071},[1050,4004,1345],{"class":1337},[1050,4006,1080],{"class":1341},[1050,4008,1345],{"class":1337},[1050,4010,1146],{"class":1071},[1050,4012,4013,4015,4017,4020],{"class":1052,"line":2329},[1050,4014,3443],{"class":1067},[1050,4016,1072],{"class":1071},[1050,4018,4019],{"class":2169},"warning",[1050,4021,3762],{"class":1071},[1050,4023,4024,4026,4029,4031,4033,4035],{"class":1052,"line":2366},[1050,4025,3780],{"class":1251},[1050,4027,4028],{"class":1341},"\"Failed login attempt for username: ",[1050,4030,3460],{"class":3459},[1050,4032,3468],{"class":2169},[1050,4034,3471],{"class":3459},[1050,4036,4037],{"class":1341}," \"\n",[1050,4039,4040,4042,4045,4047,4049,4051,4053,4055,4057,4059,4061,4063,4065,4067,4069,4071,4073],{"class":1052,"line":2403},[1050,4041,3780],{"class":1251},[1050,4043,4044],{"class":1341},"\"from ",[1050,4046,3460],{"class":3459},[1050,4048,2966],{"class":3068},[1050,4050,1072],{"class":1071},[1050,4052,3009],{"class":3074},[1050,4054,1072],{"class":1071},[1050,4056,3487],{"class":3079},[1050,4058,1072],{"class":1071},[1050,4060,3085],{"class":2169},[1050,4062,2173],{"class":1071},[1050,4064,1345],{"class":1337},[1050,4066,3498],{"class":1341},[1050,4068,1345],{"class":1337},[1050,4070,3097],{"class":1071},[1050,4072,3471],{"class":3459},[1050,4074,4075],{"class":1341},"\"\n",[1050,4077,4078],{"class":1052,"line":2439},[1050,4079,3813],{"class":1071},[1050,4081,4082],{"class":1052,"line":2477},[1050,4083,1319],{"class":1067},[1050,4085,4086],{"class":1052,"line":2513},[1050,4087,4088],{"class":1056},"        # Implement rate limiting (basic example)\n",[1050,4090,4091,4094,4096,4098,4101,4103,4105,4107],{"class":1052,"line":2550},[1050,4092,4093],{"class":1063},"        from",[1050,4095,1068],{"class":1067},[1050,4097,1072],{"class":1071},[1050,4099,4100],{"class":1067},"core",[1050,4102,1072],{"class":1071},[1050,4104,2790],{"class":1067},[1050,4106,1088],{"class":1063},[1050,4108,4109],{"class":1067}," cache\n",[1050,4111,4112],{"class":1052,"line":2587},[1050,4113,1319],{"class":1067},[1050,4115,4116,4119,4121,4123,4125,4127,4129,4131,4133,4135,4137,4139,4141,4143],{"class":1052,"line":2592},[1050,4117,4118],{"class":1067},"        ip_address ",[1050,4120,1328],{"class":1071},[1050,4122,3069],{"class":3068},[1050,4124,1072],{"class":1071},[1050,4126,3009],{"class":3074},[1050,4128,1072],{"class":1071},[1050,4130,3487],{"class":3079},[1050,4132,1072],{"class":1071},[1050,4134,3085],{"class":2169},[1050,4136,2173],{"class":1071},[1050,4138,1345],{"class":1337},[1050,4140,3498],{"class":1341},[1050,4142,1345],{"class":1337},[1050,4144,1146],{"class":1071},[1050,4146,4147,4150,4152,4155,4158,4160,4163,4165],{"class":1052,"line":2597},[1050,4148,4149],{"class":1067},"        cache_key ",[1050,4151,1328],{"class":1071},[1050,4153,4154],{"class":1251}," f",[1050,4156,4157],{"class":1341},"\"failed_login_",[1050,4159,3460],{"class":3459},[1050,4161,4162],{"class":1067},"ip_address",[1050,4164,3471],{"class":3459},[1050,4166,4075],{"class":1341},[1050,4168,4170],{"class":1052,"line":4169},104,[1050,4171,1319],{"class":1067},[1050,4173,4175,4178,4180,4183,4185,4187,4189,4192,4194,4197,4199,4202],{"class":1052,"line":4174},105,[1050,4176,4177],{"class":1067},"        failed_attempts ",[1050,4179,1328],{"class":1071},[1050,4181,4182],{"class":1067}," cache",[1050,4184,1072],{"class":1071},[1050,4186,3085],{"class":2169},[1050,4188,2173],{"class":1071},[1050,4190,4191],{"class":2169},"cache_key",[1050,4193,1100],{"class":1071},[1050,4195,4196],{"class":3622}," 0",[1050,4198,3097],{"class":1071},[1050,4200,4201],{"class":2977}," +",[1050,4203,4204],{"class":3622}," 1\n",[1050,4206,4208,4211,4213,4216,4218,4220,4222,4225,4227,4230,4232],{"class":1052,"line":4207},106,[1050,4209,4210],{"class":1067},"        cache",[1050,4212,1072],{"class":1071},[1050,4214,4215],{"class":2169},"set",[1050,4217,2173],{"class":1071},[1050,4219,4191],{"class":2169},[1050,4221,1100],{"class":1071},[1050,4223,4224],{"class":2169}," failed_attempts",[1050,4226,1100],{"class":1071},[1050,4228,4229],{"class":3622}," 300",[1050,4231,3097],{"class":1071},[1050,4233,4234],{"class":1056},"  # 5 minutes\n",[1050,4236,4238],{"class":1052,"line":4237},107,[1050,4239,1319],{"class":1067},[1050,4241,4243,4245,4248,4251,4254],{"class":1052,"line":4242},108,[1050,4244,3134],{"class":1063},[1050,4246,4247],{"class":1067}," failed_attempts ",[1050,4249,4250],{"class":2977},">=",[1050,4252,4253],{"class":3622}," 5",[1050,4255,1259],{"class":1071},[1050,4257,4259,4262,4264,4267],{"class":1052,"line":4258},109,[1050,4260,4261],{"class":1067},"            messages",[1050,4263,1072],{"class":1071},[1050,4265,4266],{"class":2169},"error",[1050,4268,3762],{"class":1071},[1050,4270,4272,4275,4277,4279],{"class":1052,"line":4271},110,[1050,4273,4274],{"class":3068},"                self",[1050,4276,1072],{"class":1071},[1050,4278,3009],{"class":3074},[1050,4280,1116],{"class":1071},[1050,4282,4284,4287,4290],{"class":1052,"line":4283},111,[1050,4285,4286],{"class":1337},"                \"",[1050,4288,4289],{"class":1341},"Too many failed login attempts. Please try again in 5 minutes.",[1050,4291,4075],{"class":1337},[1050,4293,4295],{"class":1052,"line":4294},112,[1050,4296,4297],{"class":1071},"            )\n",[1050,4299,4301],{"class":1052,"line":4300},113,[1050,4302,1319],{"class":1067},[1050,4304,4306,4308],{"class":1052,"line":4305},114,[1050,4307,2106],{"class":1063},[1050,4309,3879],{"class":1067},[1050,4311,4313],{"class":1052,"line":4312},115,[1050,4314,1279],{"class":1067},[1050,4316,4318,4320,4323,4325,4327,4329,4331,4333],{"class":1052,"line":4317},116,[1050,4319,1295],{"class":1251},[1050,4321,4322],{"class":1298}," get_context_data",[1050,4324,2173],{"class":1071},[1050,4326,2966],{"class":2965},[1050,4328,1100],{"class":1071},[1050,4330,2986],{"class":2977},[1050,4332,2989],{"class":2971},[1050,4334,2862],{"class":1071},[1050,4336,4338,4340,4343],{"class":1052,"line":4337},117,[1050,4339,1308],{"class":1265},[1050,4341,4342],{"class":1269},"Add additional context to template",[1050,4344,1273],{"class":1265},[1050,4346,4348],{"class":1052,"line":4347},118,[1050,4349,1319],{"class":1067},[1050,4351,4353,4356,4358,4360,4362,4365,4367,4370,4372],{"class":1052,"line":4352},119,[1050,4354,4355],{"class":1067},"        context ",[1050,4357,1328],{"class":1071},[1050,4359,2998],{"class":1288},[1050,4361,3001],{"class":1071},[1050,4363,4364],{"class":2169},"get_context_data",[1050,4366,2173],{"class":1071},[1050,4368,4369],{"class":2977},"**",[1050,4371,2989],{"class":2169},[1050,4373,1146],{"class":1071},[1050,4375,4377],{"class":1052,"line":4376},120,[1050,4378,1319],{"class":1067},[1050,4380,4382,4385,4387,4390],{"class":1052,"line":4381},121,[1050,4383,4384],{"class":1067},"        context",[1050,4386,1072],{"class":1071},[1050,4388,4389],{"class":2169},"update",[1050,4391,4392],{"class":1071},"({\n",[1050,4394,4396,4398,4401,4403,4405,4407,4410,4412],{"class":1052,"line":4395},122,[1050,4397,1338],{"class":1337},[1050,4399,4400],{"class":1341},"site_name",[1050,4402,1345],{"class":1337},[1050,4404,1348],{"class":1071},[1050,4406,1366],{"class":1337},[1050,4408,4409],{"class":1341},"Your Site Name",[1050,4411,1345],{"class":1337},[1050,4413,1116],{"class":1071},[1050,4415,4417,4419,4422,4424,4426,4429],{"class":1052,"line":4416},123,[1050,4418,1338],{"class":1337},[1050,4420,4421],{"class":1341},"allow_registration",[1050,4423,1345],{"class":1337},[1050,4425,1348],{"class":1071},[1050,4427,4428],{"class":1529}," True",[1050,4430,1116],{"class":1071},[1050,4432,4434,4436,4439,4441,4443,4445],{"class":1052,"line":4433},124,[1050,4435,1338],{"class":1337},[1050,4437,4438],{"class":1341},"social_login_enabled",[1050,4440,1345],{"class":1337},[1050,4442,1348],{"class":1071},[1050,4444,4428],{"class":1529},[1050,4446,1116],{"class":1071},[1050,4448,4450,4452,4455,4457,4459,4461],{"class":1052,"line":4449},125,[1050,4451,1338],{"class":1337},[1050,4453,4454],{"class":1341},"password_reset_enabled",[1050,4456,1345],{"class":1337},[1050,4458,1348],{"class":1071},[1050,4460,4428],{"class":1529},[1050,4462,1116],{"class":1071},[1050,4464,4466],{"class":1052,"line":4465},126,[1050,4467,4468],{"class":1071},"        })\n",[1050,4470,4472],{"class":1052,"line":4471},127,[1050,4473,1319],{"class":1067},[1050,4475,4477,4479],{"class":1052,"line":4476},128,[1050,4478,2106],{"class":1063},[1050,4480,4481],{"class":1067}," context\n",[1050,4483,4485],{"class":1052,"line":4484},129,[1050,4486,1245],{"emptyLinePlaceholder":1244},[1050,4488,4490,4492,4495,4497,4499],{"class":1052,"line":4489},130,[1050,4491,1252],{"class":1251},[1050,4493,4494],{"class":1255}," AjaxLoginView",[1050,4496,2173],{"class":1071},[1050,4498,1342],{"class":2859},[1050,4500,2862],{"class":1071},[1050,4502,4504,4506,4509],{"class":1052,"line":4503},131,[1050,4505,1266],{"class":1265},[1050,4507,4508],{"class":1269},"Login view that supports AJAX requests",[1050,4510,1273],{"class":1265},[1050,4512,4514],{"class":1052,"line":4513},132,[1050,4515,1279],{"class":1067},[1050,4517,4519,4521,4523,4525,4527,4529,4531],{"class":1052,"line":4518},133,[1050,4520,1295],{"class":1251},[1050,4522,3331],{"class":1298},[1050,4524,2173],{"class":1071},[1050,4526,2966],{"class":2965},[1050,4528,1100],{"class":1071},[1050,4530,3340],{"class":2971},[1050,4532,2862],{"class":1071},[1050,4534,4536,4538,4541],{"class":1052,"line":4535},134,[1050,4537,1308],{"class":1265},[1050,4539,4540],{"class":1269},"Handle successful AJAX login",[1050,4542,1273],{"class":1265},[1050,4544,4546],{"class":1052,"line":4545},135,[1050,4547,1319],{"class":1067},[1050,4549,4551,4553,4555,4557,4559,4561,4564,4566,4568,4570,4572,4575,4577,4579,4582,4584,4587,4589],{"class":1052,"line":4550},136,[1050,4552,3134],{"class":1063},[1050,4554,3069],{"class":3068},[1050,4556,1072],{"class":1071},[1050,4558,3009],{"class":3074},[1050,4560,1072],{"class":1071},[1050,4562,4563],{"class":3074},"headers",[1050,4565,1072],{"class":1071},[1050,4567,3085],{"class":2169},[1050,4569,2173],{"class":1071},[1050,4571,1345],{"class":1337},[1050,4573,4574],{"class":1341},"X-Requested-With",[1050,4576,1345],{"class":1337},[1050,4578,3097],{"class":1071},[1050,4580,4581],{"class":2977}," ==",[1050,4583,1366],{"class":1337},[1050,4585,4586],{"class":1341},"XMLHttpRequest",[1050,4588,1345],{"class":1337},[1050,4590,1259],{"class":1071},[1050,4592,4594,4597,4599,4601,4603,4605,4607,4609,4611,4613],{"class":1052,"line":4593},137,[1050,4595,4596],{"class":2169},"            login",[1050,4598,2173],{"class":1071},[1050,4600,2966],{"class":3068},[1050,4602,1072],{"class":1071},[1050,4604,3009],{"class":3074},[1050,4606,1100],{"class":1071},[1050,4608,3340],{"class":2169},[1050,4610,1072],{"class":1071},[1050,4612,3393],{"class":2169},[1050,4614,2927],{"class":1071},[1050,4616,4618],{"class":1052,"line":4617},138,[1050,4619,4620],{"class":1067},"            \n",[1050,4622,4624,4626,4629],{"class":1052,"line":4623},139,[1050,4625,3144],{"class":1063},[1050,4627,4628],{"class":2169}," JsonResponse",[1050,4630,4392],{"class":1071},[1050,4632,4634,4636,4638,4640,4642,4644],{"class":1052,"line":4633},140,[1050,4635,1356],{"class":1337},[1050,4637,3759],{"class":1341},[1050,4639,1345],{"class":1337},[1050,4641,1348],{"class":1071},[1050,4643,4428],{"class":1529},[1050,4645,1116],{"class":1071},[1050,4647,4649,4651,4654,4656,4658,4660,4663,4665],{"class":1052,"line":4648},141,[1050,4650,1356],{"class":1337},[1050,4652,4653],{"class":1341},"message",[1050,4655,1345],{"class":1337},[1050,4657,1348],{"class":1071},[1050,4659,1366],{"class":1337},[1050,4661,4662],{"class":1341},"Login successful",[1050,4664,1345],{"class":1337},[1050,4666,1116],{"class":1071},[1050,4668,4670,4672,4675,4677,4679,4681,4683,4686],{"class":1052,"line":4669},142,[1050,4671,1356],{"class":1337},[1050,4673,4674],{"class":1341},"redirect_url",[1050,4676,1345],{"class":1337},[1050,4678,1348],{"class":1071},[1050,4680,3069],{"class":3068},[1050,4682,1072],{"class":1071},[1050,4684,4685],{"class":2169},"get_success_url",[1050,4687,3396],{"class":1071},[1050,4689,4691],{"class":1052,"line":4690},143,[1050,4692,4693],{"class":1071},"            })\n",[1050,4695,4697],{"class":1052,"line":4696},144,[1050,4698,1319],{"class":1067},[1050,4700,4702,4704,4706,4708,4710,4712,4714],{"class":1052,"line":4701},145,[1050,4703,2106],{"class":1063},[1050,4705,2998],{"class":1288},[1050,4707,3001],{"class":1071},[1050,4709,3369],{"class":2169},[1050,4711,2173],{"class":1071},[1050,4713,3374],{"class":2169},[1050,4715,1146],{"class":1071},[1050,4717,4719],{"class":1052,"line":4718},146,[1050,4720,1279],{"class":1067},[1050,4722,4724,4726,4728,4730,4732,4734,4736],{"class":1052,"line":4723},147,[1050,4725,1295],{"class":1251},[1050,4727,3890],{"class":1298},[1050,4729,2173],{"class":1071},[1050,4731,2966],{"class":2965},[1050,4733,1100],{"class":1071},[1050,4735,3340],{"class":2971},[1050,4737,2862],{"class":1071},[1050,4739,4741,4743,4746],{"class":1052,"line":4740},148,[1050,4742,1308],{"class":1265},[1050,4744,4745],{"class":1269},"Handle failed AJAX login",[1050,4747,1273],{"class":1265},[1050,4749,4751],{"class":1052,"line":4750},149,[1050,4752,1319],{"class":1067},[1050,4754,4756,4758,4760,4762,4764,4766,4768,4770,4772,4774,4776,4778,4780,4782,4784,4786,4788,4790],{"class":1052,"line":4755},150,[1050,4757,3134],{"class":1063},[1050,4759,3069],{"class":3068},[1050,4761,1072],{"class":1071},[1050,4763,3009],{"class":3074},[1050,4765,1072],{"class":1071},[1050,4767,4563],{"class":3074},[1050,4769,1072],{"class":1071},[1050,4771,3085],{"class":2169},[1050,4773,2173],{"class":1071},[1050,4775,1345],{"class":1337},[1050,4777,4574],{"class":1341},[1050,4779,1345],{"class":1337},[1050,4781,3097],{"class":1071},[1050,4783,4581],{"class":2977},[1050,4785,1366],{"class":1337},[1050,4787,4586],{"class":1341},[1050,4789,1345],{"class":1337},[1050,4791,1259],{"class":1071},[1050,4793,4795,4797,4799],{"class":1052,"line":4794},151,[1050,4796,3144],{"class":1063},[1050,4798,4628],{"class":2169},[1050,4800,4392],{"class":1071},[1050,4802,4804,4806,4808,4810,4812,4815],{"class":1052,"line":4803},152,[1050,4805,1356],{"class":1337},[1050,4807,3759],{"class":1341},[1050,4809,1345],{"class":1337},[1050,4811,1348],{"class":1071},[1050,4813,4814],{"class":1529}," False",[1050,4816,1116],{"class":1071},[1050,4818,4820,4822,4825,4827,4829,4831,4833,4835],{"class":1052,"line":4819},153,[1050,4821,1356],{"class":1337},[1050,4823,4824],{"class":1341},"errors",[1050,4826,1345],{"class":1337},[1050,4828,1348],{"class":1071},[1050,4830,3340],{"class":2169},[1050,4832,1072],{"class":1071},[1050,4834,4824],{"class":3074},[1050,4836,1116],{"class":1071},[1050,4838,4840,4842,4844,4846,4848,4850,4853],{"class":1052,"line":4839},154,[1050,4841,1356],{"class":1337},[1050,4843,4653],{"class":1341},[1050,4845,1345],{"class":1337},[1050,4847,1348],{"class":1071},[1050,4849,1366],{"class":1337},[1050,4851,4852],{"class":1341},"Login failed",[1050,4854,1435],{"class":1337},[1050,4856,4858],{"class":1052,"line":4857},155,[1050,4859,4693],{"class":1071},[1050,4861,4863],{"class":1052,"line":4862},156,[1050,4864,1319],{"class":1067},[1050,4866,4868,4870,4872,4874,4876,4878,4880],{"class":1052,"line":4867},157,[1050,4869,2106],{"class":1063},[1050,4871,2998],{"class":1288},[1050,4873,3001],{"class":1071},[1050,4875,3926],{"class":2169},[1050,4877,2173],{"class":1071},[1050,4879,3374],{"class":2169},[1050,4881,1146],{"class":1071},[1050,4883,4885],{"class":1052,"line":4884},158,[1050,4886,1245],{"emptyLinePlaceholder":1244},[1050,4888,4890],{"class":1052,"line":4889},159,[1050,4891,4892],{"class":1056},"# Function-based login view\n",[1050,4894,4896,4899,4902,4904,4906],{"class":1052,"line":4895},160,[1050,4897,4898],{"class":1251},"def",[1050,4900,4901],{"class":1298}," custom_login_view",[1050,4903,2173],{"class":1071},[1050,4905,3009],{"class":2971},[1050,4907,2862],{"class":1071},[1050,4909,4911,4913,4916],{"class":1052,"line":4910},161,[1050,4912,1266],{"class":1265},[1050,4914,4915],{"class":1269},"Custom function-based login view",[1050,4917,1273],{"class":1265},[1050,4919,4921],{"class":1052,"line":4920},162,[1050,4922,1279],{"class":1067},[1050,4924,4926,4929,4931,4933,4935,4937,4940],{"class":1052,"line":4925},163,[1050,4927,4928],{"class":1063},"    if",[1050,4930,2972],{"class":1067},[1050,4932,1072],{"class":1071},[1050,4934,3463],{"class":3074},[1050,4936,1072],{"class":1071},[1050,4938,4939],{"class":3074},"is_authenticated",[1050,4941,1259],{"class":1071},[1050,4943,4945,4947,4950,4952,4954,4957,4959],{"class":1052,"line":4944},164,[1050,4946,2106],{"class":1063},[1050,4948,4949],{"class":2169}," redirect",[1050,4951,2173],{"class":1071},[1050,4953,1345],{"class":1337},[1050,4955,4956],{"class":1341},"dashboard",[1050,4958,1345],{"class":1337},[1050,4960,1146],{"class":1071},[1050,4962,4964],{"class":1052,"line":4963},165,[1050,4965,1279],{"class":1067},[1050,4967,4969,4971,4973,4975,4978,4980,4982,4984,4986],{"class":1052,"line":4968},166,[1050,4970,4928],{"class":1063},[1050,4972,2972],{"class":1067},[1050,4974,1072],{"class":1071},[1050,4976,4977],{"class":3074},"method",[1050,4979,4581],{"class":2977},[1050,4981,1366],{"class":1337},[1050,4983,3080],{"class":1341},[1050,4985,1345],{"class":1337},[1050,4987,1259],{"class":1071},[1050,4989,4991,4993,4995,4997,4999,5001,5003,5005,5007,5009,5011,5013],{"class":1052,"line":4990},167,[1050,4992,3946],{"class":1067},[1050,4994,1328],{"class":1071},[1050,4996,2972],{"class":1067},[1050,4998,1072],{"class":1071},[1050,5000,3080],{"class":3079},[1050,5002,1072],{"class":1071},[1050,5004,3085],{"class":2169},[1050,5006,2173],{"class":1071},[1050,5008,1345],{"class":1337},[1050,5010,3468],{"class":1341},[1050,5012,1345],{"class":1337},[1050,5014,1146],{"class":1071},[1050,5016,5018,5021,5023,5025,5027,5029,5031,5033,5035,5037,5040,5042],{"class":1052,"line":5017},168,[1050,5019,5020],{"class":1067},"        password ",[1050,5022,1328],{"class":1071},[1050,5024,2972],{"class":1067},[1050,5026,1072],{"class":1071},[1050,5028,3080],{"class":3079},[1050,5030,1072],{"class":1071},[1050,5032,3085],{"class":2169},[1050,5034,2173],{"class":1071},[1050,5036,1345],{"class":1337},[1050,5038,5039],{"class":1341},"password",[1050,5041,1345],{"class":1337},[1050,5043,1146],{"class":1071},[1050,5045,5047,5049,5051,5053,5055,5057,5059,5061,5063,5065,5067,5069],{"class":1052,"line":5046},169,[1050,5048,3640],{"class":1067},[1050,5050,1328],{"class":1071},[1050,5052,2972],{"class":1067},[1050,5054,1072],{"class":1071},[1050,5056,3080],{"class":3079},[1050,5058,1072],{"class":1071},[1050,5060,3085],{"class":2169},[1050,5062,2173],{"class":1071},[1050,5064,1345],{"class":1337},[1050,5066,3663],{"class":1341},[1050,5068,1345],{"class":1337},[1050,5070,1146],{"class":1071},[1050,5072,5074],{"class":1052,"line":5073},170,[1050,5075,1319],{"class":1067},[1050,5077,5079],{"class":1052,"line":5078},171,[1050,5080,5081],{"class":1056},"        # Authenticate user\n",[1050,5083,5085,5087,5089,5091,5093,5095,5097,5100,5102,5104,5106,5109,5111,5113],{"class":1052,"line":5084},172,[1050,5086,3161],{"class":1067},[1050,5088,1328],{"class":1071},[1050,5090,1211],{"class":2169},[1050,5092,2173],{"class":1071},[1050,5094,3009],{"class":2169},[1050,5096,1100],{"class":1071},[1050,5098,5099],{"class":2313}," username",[1050,5101,1328],{"class":1071},[1050,5103,3468],{"class":2169},[1050,5105,1100],{"class":1071},[1050,5107,5108],{"class":2313}," password",[1050,5110,1328],{"class":1071},[1050,5112,5039],{"class":2169},[1050,5114,1146],{"class":1071},[1050,5116,5118],{"class":1052,"line":5117},173,[1050,5119,1319],{"class":1067},[1050,5121,5123,5125,5128,5131,5134,5136],{"class":1052,"line":5122},174,[1050,5124,3134],{"class":1063},[1050,5126,5127],{"class":1067}," user ",[1050,5129,5130],{"class":2977},"is",[1050,5132,5133],{"class":2977}," not",[1050,5135,1700],{"class":1529},[1050,5137,1259],{"class":1071},[1050,5139,5141,5144,5146,5148,5151],{"class":1052,"line":5140},175,[1050,5142,5143],{"class":1063},"            if",[1050,5145,3185],{"class":1067},[1050,5147,1072],{"class":1071},[1050,5149,5150],{"class":3074},"is_active",[1050,5152,1259],{"class":1071},[1050,5154,5156],{"class":1052,"line":5155},176,[1050,5157,5158],{"class":1056},"                # Log in user\n",[1050,5160,5162,5165,5167,5169,5171,5173],{"class":1052,"line":5161},177,[1050,5163,5164],{"class":2169},"                login",[1050,5166,2173],{"class":1071},[1050,5168,3009],{"class":2169},[1050,5170,1100],{"class":1071},[1050,5172,3185],{"class":2169},[1050,5174,1146],{"class":1071},[1050,5176,5178],{"class":1052,"line":5177},178,[1050,5179,5180],{"class":1067},"                \n",[1050,5182,5184],{"class":1052,"line":5183},179,[1050,5185,5186],{"class":1056},"                # Handle remember me\n",[1050,5188,5190,5193,5195,5197],{"class":1052,"line":5189},180,[1050,5191,5192],{"class":1063},"                if",[1050,5194,5133],{"class":2977},[1050,5196,3674],{"class":1067},[1050,5198,1259],{"class":1071},[1050,5200,5202,5205,5207,5209,5211,5213,5215,5217,5219],{"class":1052,"line":5201},181,[1050,5203,5204],{"class":1067},"                    request",[1050,5206,1072],{"class":1071},[1050,5208,3532],{"class":3074},[1050,5210,1072],{"class":1071},[1050,5212,3699],{"class":2169},[1050,5214,2173],{"class":1071},[1050,5216,3704],{"class":3622},[1050,5218,3097],{"class":1071},[1050,5220,5221],{"class":1056},"  # Browser session\n",[1050,5223,5225],{"class":1052,"line":5224},182,[1050,5226,5180],{"class":1067},[1050,5228,5230],{"class":1052,"line":5229},183,[1050,5231,5232],{"class":1056},"                # Add success message\n",[1050,5234,5236,5239,5241,5243,5245,5247,5249,5251,5254,5256,5258,5260,5262,5264,5266,5268,5270,5272,5274,5277],{"class":1052,"line":5235},184,[1050,5237,5238],{"class":1067},"                messages",[1050,5240,1072],{"class":1071},[1050,5242,3759],{"class":2169},[1050,5244,2173],{"class":1071},[1050,5246,3009],{"class":2169},[1050,5248,1100],{"class":1071},[1050,5250,4154],{"class":1251},[1050,5252,5253],{"class":1341},"'Welcome, ",[1050,5255,3460],{"class":3459},[1050,5257,3463],{"class":2169},[1050,5259,1072],{"class":1071},[1050,5261,3792],{"class":2169},[1050,5263,3795],{"class":1071},[1050,5265,3100],{"class":2977},[1050,5267,3185],{"class":2169},[1050,5269,1072],{"class":1071},[1050,5271,3468],{"class":3074},[1050,5273,3471],{"class":3459},[1050,5275,5276],{"class":1341},"!'",[1050,5278,1146],{"class":1071},[1050,5280,5282],{"class":1052,"line":5281},185,[1050,5283,5180],{"class":1067},[1050,5285,5287],{"class":1052,"line":5286},186,[1050,5288,5289],{"class":1056},"                # Redirect to next or default\n",[1050,5291,5293,5296,5298,5300,5302,5304,5306,5308,5310,5312,5314,5316,5318,5320,5322,5324,5326,5328,5330,5332,5334,5336,5338],{"class":1052,"line":5292},187,[1050,5294,5295],{"class":1067},"                next_url ",[1050,5297,1328],{"class":1071},[1050,5299,2972],{"class":1067},[1050,5301,1072],{"class":1071},[1050,5303,3080],{"class":3079},[1050,5305,1072],{"class":1071},[1050,5307,3085],{"class":2169},[1050,5309,2173],{"class":1071},[1050,5311,1345],{"class":1337},[1050,5313,3092],{"class":1341},[1050,5315,1345],{"class":1337},[1050,5317,3097],{"class":1071},[1050,5319,3100],{"class":2977},[1050,5321,2972],{"class":1067},[1050,5323,1072],{"class":1071},[1050,5325,3111],{"class":3079},[1050,5327,1072],{"class":1071},[1050,5329,3085],{"class":2169},[1050,5331,2173],{"class":1071},[1050,5333,1345],{"class":1337},[1050,5335,3092],{"class":1341},[1050,5337,1345],{"class":1337},[1050,5339,1146],{"class":1071},[1050,5341,5343,5346,5348,5350,5353,5356,5358,5360,5362],{"class":1052,"line":5342},188,[1050,5344,5345],{"class":1063},"                return",[1050,5347,4949],{"class":2169},[1050,5349,2173],{"class":1071},[1050,5351,5352],{"class":2169},"next_url ",[1050,5354,5355],{"class":1063},"or",[1050,5357,1366],{"class":1337},[1050,5359,4956],{"class":1341},[1050,5361,1345],{"class":1337},[1050,5363,1146],{"class":1071},[1050,5365,5367,5370],{"class":1052,"line":5366},189,[1050,5368,5369],{"class":1063},"            else",[1050,5371,1259],{"class":1071},[1050,5373,5375,5377,5379,5381,5383,5385,5387,5389,5392,5394],{"class":1052,"line":5374},190,[1050,5376,5238],{"class":1067},[1050,5378,1072],{"class":1071},[1050,5380,4266],{"class":2169},[1050,5382,2173],{"class":1071},[1050,5384,3009],{"class":2169},[1050,5386,1100],{"class":1071},[1050,5388,1366],{"class":1337},[1050,5390,5391],{"class":1341},"Your account is disabled.",[1050,5393,1345],{"class":1337},[1050,5395,1146],{"class":1071},[1050,5397,5399,5401],{"class":1052,"line":5398},191,[1050,5400,3301],{"class":1063},[1050,5402,1259],{"class":1071},[1050,5404,5406,5408,5410,5412,5414,5416,5418,5420,5423,5425],{"class":1052,"line":5405},192,[1050,5407,4261],{"class":1067},[1050,5409,1072],{"class":1071},[1050,5411,4266],{"class":2169},[1050,5413,2173],{"class":1071},[1050,5415,3009],{"class":2169},[1050,5417,1100],{"class":1071},[1050,5419,1366],{"class":1337},[1050,5421,5422],{"class":1341},"Invalid username or password.",[1050,5424,1345],{"class":1337},[1050,5426,1146],{"class":1071},[1050,5428,5430],{"class":1052,"line":5429},193,[1050,5431,1279],{"class":1067},[1050,5433,5435,5438,5440],{"class":1052,"line":5434},194,[1050,5436,5437],{"class":1067},"    context ",[1050,5439,1328],{"class":1071},[1050,5441,1331],{"class":1071},[1050,5443,5445,5448,5450,5452,5454,5456,5458,5460,5462,5464,5466,5468,5470,5472,5474,5476],{"class":1052,"line":5444},195,[1050,5446,5447],{"class":1337},"        '",[1050,5449,3092],{"class":1341},[1050,5451,1345],{"class":1337},[1050,5453,1348],{"class":1071},[1050,5455,2972],{"class":1067},[1050,5457,1072],{"class":1071},[1050,5459,3111],{"class":3079},[1050,5461,1072],{"class":1071},[1050,5463,3085],{"class":2169},[1050,5465,2173],{"class":1071},[1050,5467,1345],{"class":1337},[1050,5469,3092],{"class":1341},[1050,5471,1345],{"class":1337},[1050,5473,1100],{"class":1071},[1050,5475,3616],{"class":1337},[1050,5477,2326],{"class":1071},[1050,5479,5481],{"class":1052,"line":5480},196,[1050,5482,5483],{"class":1071},"    }\n",[1050,5485,5487],{"class":1052,"line":5486},197,[1050,5488,1279],{"class":1067},[1050,5490,5492,5495,5497,5499,5501,5503,5505,5507,5509,5511,5514],{"class":1052,"line":5491},198,[1050,5493,5494],{"class":1063},"    return",[1050,5496,1185],{"class":2169},[1050,5498,2173],{"class":1071},[1050,5500,3009],{"class":2169},[1050,5502,1100],{"class":1071},[1050,5504,1366],{"class":1337},[1050,5506,2887],{"class":1341},[1050,5508,1345],{"class":1337},[1050,5510,1100],{"class":1071},[1050,5512,5513],{"class":2169}," context",[1050,5515,1146],{"class":1071},[1035,5517,5519],{"id":5518},"custom-logout-views","Custom Logout Views",[1040,5521,5523],{"className":1042,"code":5522,"language":1044,"meta":1045,"style":1045},"# Custom logout view implementations\nfrom django.contrib.auth.views import LogoutView\nfrom django.contrib.auth import logout\nfrom django.shortcuts import render, redirect\n\nclass CustomLogoutView(LogoutView):\n    \"\"\"Enhanced logout view with additional features\"\"\"\n    \n    template_name = 'auth/logout.html'\n    \n    def dispatch(self, request, *args, **kwargs):\n        \"\"\"Handle logout process\"\"\"\n        \n        if request.user.is_authenticated:\n            # Log logout\n            import logging\n            logger = logging.getLogger('auth')\n            logger.info(f\"User {request.user.username} logged out\")\n            \n            # Store user info before logout\n            user_info = {\n                'username': request.user.username,\n                'full_name': request.user.get_full_name(),\n            }\n            \n            # Clear custom session data\n            session_keys_to_clear = [\n                'user_preferences', 'shopping_cart', 'temp_data'\n            ]\n            \n            for key in session_keys_to_clear:\n                request.session.pop(key, None)\n            \n            # Add logout message\n            messages.info(\n                request, \n                f\"You have been logged out, {user_info['full_name'] or user_info['username']}.\"\n            )\n        \n        return super().dispatch(request, *args, **kwargs)\n    \n    def get_next_page(self):\n        \"\"\"Determine where to redirect after logout\"\"\"\n        \n        next_page = super().get_next_page()\n        \n        if next_page:\n            return next_page\n        \n        # Custom logout redirect logic\n        return reverse_lazy('home')\n\nclass AjaxLogoutView(LogoutView):\n    \"\"\"Logout view that supports AJAX requests\"\"\"\n    \n    def dispatch(self, request, *args, **kwargs):\n        \"\"\"Handle AJAX logout\"\"\"\n        \n        if request.headers.get('X-Requested-With') == 'XMLHttpRequest':\n            if request.user.is_authenticated:\n                username = request.user.username\n                logout(request)\n                \n                return JsonResponse({\n                    'success': True,\n                    'message': f'Goodbye, {username}!',\n                    'redirect_url': self.get_next_page()\n                })\n            else:\n                return JsonResponse({\n                    'success': False,\n                    'message': 'Not logged in'\n                })\n        \n        return super().dispatch(request, *args, **kwargs)\n\n# Function-based logout view\ndef custom_logout_view(request):\n    \"\"\"Custom function-based logout view\"\"\"\n    \n    if request.user.is_authenticated:\n        username = request.user.username\n        \n        # Clear specific session data\n        request.session.pop('user_preferences', None)\n        \n        # Log out user\n        logout(request)\n        \n        messages.success(request, f'You have been logged out, {username}.')\n    \n    return redirect('home')\n",[1047,5524,5525,5530,5553,5571,5589,5593,5606,5615,5619,5632,5636,5664,5673,5677,5693,5698,5705,5728,5762,5766,5771,5780,5802,5826,5830,5834,5839,5848,5875,5880,5884,5900,5925,5929,5934,5944,5952,5995,5999,6003,6031,6035,6048,6057,6061,6077,6081,6090,6097,6101,6106,6123,6127,6140,6149,6153,6181,6190,6194,6228,6244,6262,6273,6277,6285,6300,6325,6343,6348,6354,6362,6376,6393,6397,6401,6429,6433,6438,6451,6460,6464,6480,6496,6500,6505,6532,6536,6541,6552,6556,6586,6590],{"__ignoreMap":1045},[1050,5526,5527],{"class":1052,"line":1053},[1050,5528,5529],{"class":1056},"# Custom logout view implementations\n",[1050,5531,5532,5534,5536,5538,5540,5542,5544,5546,5548,5550],{"class":1052,"line":1060},[1050,5533,1064],{"class":1063},[1050,5535,1068],{"class":1067},[1050,5537,1072],{"class":1071},[1050,5539,1075],{"class":1067},[1050,5541,1072],{"class":1071},[1050,5543,1080],{"class":1067},[1050,5545,1072],{"class":1071},[1050,5547,1085],{"class":1067},[1050,5549,1088],{"class":1063},[1050,5551,5552],{"class":1067}," LogoutView\n",[1050,5554,5555,5557,5559,5561,5563,5565,5567,5569],{"class":1052,"line":1094},[1050,5556,1064],{"class":1063},[1050,5558,1068],{"class":1067},[1050,5560,1072],{"class":1071},[1050,5562,1075],{"class":1067},[1050,5564,1072],{"class":1071},[1050,5566,1206],{"class":1067},[1050,5568,1088],{"class":1063},[1050,5570,1221],{"class":1067},[1050,5572,5573,5575,5577,5579,5581,5583,5585,5587],{"class":1052,"line":1119},[1050,5574,1064],{"class":1063},[1050,5576,1068],{"class":1067},[1050,5578,1072],{"class":1071},[1050,5580,1180],{"class":1067},[1050,5582,1088],{"class":1063},[1050,5584,1185],{"class":1067},[1050,5586,1100],{"class":1071},[1050,5588,1190],{"class":1067},[1050,5590,5591],{"class":1052,"line":1137},[1050,5592,1245],{"emptyLinePlaceholder":1244},[1050,5594,5595,5597,5600,5602,5604],{"class":1052,"line":1143},[1050,5596,1252],{"class":1251},[1050,5598,5599],{"class":1255}," CustomLogoutView",[1050,5601,2173],{"class":1071},[1050,5603,1449],{"class":2859},[1050,5605,2862],{"class":1071},[1050,5607,5608,5610,5613],{"class":1052,"line":1149},[1050,5609,1266],{"class":1265},[1050,5611,5612],{"class":1269},"Enhanced logout view with additional features",[1050,5614,1273],{"class":1265},[1050,5616,5617],{"class":1052,"line":1171},[1050,5618,1279],{"class":1067},[1050,5620,5621,5623,5625,5627,5630],{"class":1052,"line":1193},[1050,5622,2880],{"class":1067},[1050,5624,1328],{"class":1071},[1050,5626,1366],{"class":1337},[1050,5628,5629],{"class":1341},"auth/logout.html",[1050,5631,1435],{"class":1337},[1050,5633,5634],{"class":1052,"line":1224},[1050,5635,1279],{"class":1067},[1050,5637,5638,5640,5642,5644,5646,5648,5650,5652,5654,5656,5658,5660,5662],{"class":1052,"line":1241},[1050,5639,1295],{"class":1251},[1050,5641,2960],{"class":1298},[1050,5643,2173],{"class":1071},[1050,5645,2966],{"class":2965},[1050,5647,1100],{"class":1071},[1050,5649,2972],{"class":2971},[1050,5651,1100],{"class":1071},[1050,5653,2978],{"class":2977},[1050,5655,2981],{"class":2971},[1050,5657,1100],{"class":1071},[1050,5659,2986],{"class":2977},[1050,5661,2989],{"class":2971},[1050,5663,2862],{"class":1071},[1050,5665,5666,5668,5671],{"class":1052,"line":1248},[1050,5667,1308],{"class":1265},[1050,5669,5670],{"class":1269},"Handle logout process",[1050,5672,1273],{"class":1265},[1050,5674,5675],{"class":1052,"line":1262},[1050,5676,1319],{"class":1067},[1050,5678,5679,5681,5683,5685,5687,5689,5691],{"class":1052,"line":1276},[1050,5680,3134],{"class":1063},[1050,5682,2972],{"class":1067},[1050,5684,1072],{"class":1071},[1050,5686,3463],{"class":3074},[1050,5688,1072],{"class":1071},[1050,5690,4939],{"class":3074},[1050,5692,1259],{"class":1071},[1050,5694,5695],{"class":1052,"line":1282},[1050,5696,5697],{"class":1056},"            # Log logout\n",[1050,5699,5700,5703],{"class":1052,"line":1292},[1050,5701,5702],{"class":1063},"            import",[1050,5704,3413],{"class":1067},[1050,5706,5707,5710,5712,5714,5716,5718,5720,5722,5724,5726],{"class":1052,"line":1305},[1050,5708,5709],{"class":1067},"            logger ",[1050,5711,1328],{"class":1071},[1050,5713,3423],{"class":1067},[1050,5715,1072],{"class":1071},[1050,5717,3428],{"class":2169},[1050,5719,2173],{"class":1071},[1050,5721,1345],{"class":1337},[1050,5723,1080],{"class":1341},[1050,5725,1345],{"class":1337},[1050,5727,1146],{"class":1071},[1050,5729,5730,5733,5735,5737,5739,5741,5743,5745,5747,5749,5751,5753,5755,5757,5760],{"class":1052,"line":1316},[1050,5731,5732],{"class":1067},"            logger",[1050,5734,1072],{"class":1071},[1050,5736,3448],{"class":2169},[1050,5738,2173],{"class":1071},[1050,5740,3453],{"class":1251},[1050,5742,3456],{"class":1341},[1050,5744,3460],{"class":3459},[1050,5746,3009],{"class":2169},[1050,5748,1072],{"class":1071},[1050,5750,3463],{"class":3074},[1050,5752,1072],{"class":1071},[1050,5754,3468],{"class":3074},[1050,5756,3471],{"class":3459},[1050,5758,5759],{"class":1341}," logged out\"",[1050,5761,1146],{"class":1071},[1050,5763,5764],{"class":1052,"line":1322},[1050,5765,4620],{"class":1067},[1050,5767,5768],{"class":1052,"line":1334},[1050,5769,5770],{"class":1056},"            # Store user info before logout\n",[1050,5772,5773,5776,5778],{"class":1052,"line":1353},[1050,5774,5775],{"class":1067},"            user_info ",[1050,5777,1328],{"class":1071},[1050,5779,1331],{"class":1071},[1050,5781,5782,5784,5786,5788,5790,5792,5794,5796,5798,5800],{"class":1052,"line":1376},[1050,5783,1356],{"class":1337},[1050,5785,3468],{"class":1341},[1050,5787,1345],{"class":1337},[1050,5789,1348],{"class":1071},[1050,5791,2972],{"class":1067},[1050,5793,1072],{"class":1071},[1050,5795,3463],{"class":3074},[1050,5797,1072],{"class":1071},[1050,5799,3468],{"class":3074},[1050,5801,1116],{"class":1071},[1050,5803,5804,5806,5809,5811,5813,5815,5817,5819,5821,5823],{"class":1052,"line":1397},[1050,5805,1356],{"class":1337},[1050,5807,5808],{"class":1341},"full_name",[1050,5810,1345],{"class":1337},[1050,5812,1348],{"class":1071},[1050,5814,2972],{"class":1067},[1050,5816,1072],{"class":1071},[1050,5818,3463],{"class":3074},[1050,5820,1072],{"class":1071},[1050,5822,3792],{"class":2169},[1050,5824,5825],{"class":1071},"(),\n",[1050,5827,5828],{"class":1052,"line":1418},[1050,5829,2089],{"class":1071},[1050,5831,5832],{"class":1052,"line":1438},[1050,5833,4620],{"class":1067},[1050,5835,5836],{"class":1052,"line":1444},[1050,5837,5838],{"class":1056},"            # Clear custom session data\n",[1050,5840,5841,5844,5846],{"class":1052,"line":1458},[1050,5842,5843],{"class":1067},"            session_keys_to_clear ",[1050,5845,1328],{"class":1071},[1050,5847,2163],{"class":1071},[1050,5849,5850,5852,5855,5857,5859,5861,5864,5866,5868,5870,5873],{"class":1052,"line":1478},[1050,5851,1356],{"class":1337},[1050,5853,5854],{"class":1341},"user_preferences",[1050,5856,1345],{"class":1337},[1050,5858,1100],{"class":1071},[1050,5860,1366],{"class":1337},[1050,5862,5863],{"class":1341},"shopping_cart",[1050,5865,1345],{"class":1337},[1050,5867,1100],{"class":1071},[1050,5869,1366],{"class":1337},[1050,5871,5872],{"class":1341},"temp_data",[1050,5874,1435],{"class":1337},[1050,5876,5877],{"class":1052,"line":1498},[1050,5878,5879],{"class":1071},"            ]\n",[1050,5881,5882],{"class":1052,"line":1518},[1050,5883,4620],{"class":1067},[1050,5885,5886,5889,5892,5895,5898],{"class":1052,"line":1533},[1050,5887,5888],{"class":1063},"            for",[1050,5890,5891],{"class":1067}," key ",[1050,5893,5894],{"class":1063},"in",[1050,5896,5897],{"class":1067}," session_keys_to_clear",[1050,5899,1259],{"class":1071},[1050,5901,5902,5905,5907,5909,5911,5914,5916,5919,5921,5923],{"class":1052,"line":1538},[1050,5903,5904],{"class":1067},"                request",[1050,5906,1072],{"class":1071},[1050,5908,3532],{"class":3074},[1050,5910,1072],{"class":1071},[1050,5912,5913],{"class":2169},"pop",[1050,5915,2173],{"class":1071},[1050,5917,5918],{"class":2169},"key",[1050,5920,1100],{"class":1071},[1050,5922,1700],{"class":1529},[1050,5924,1146],{"class":1071},[1050,5926,5927],{"class":1052,"line":1552},[1050,5928,4620],{"class":1067},[1050,5930,5931],{"class":1052,"line":1572},[1050,5932,5933],{"class":1056},"            # Add logout message\n",[1050,5935,5936,5938,5940,5942],{"class":1052,"line":1592},[1050,5937,4261],{"class":1067},[1050,5939,1072],{"class":1071},[1050,5941,3448],{"class":2169},[1050,5943,3762],{"class":1071},[1050,5945,5946,5948,5950],{"class":1052,"line":1612},[1050,5947,5904],{"class":2169},[1050,5949,1100],{"class":1071},[1050,5951,3775],{"class":2169},[1050,5953,5954,5957,5960,5962,5965,5967,5969,5971,5973,5975,5977,5980,5982,5984,5986,5988,5990,5992],{"class":1052,"line":1630},[1050,5955,5956],{"class":1251},"                f",[1050,5958,5959],{"class":1341},"\"You have been logged out, ",[1050,5961,3460],{"class":3459},[1050,5963,5964],{"class":2169},"user_info",[1050,5966,3535],{"class":1071},[1050,5968,1345],{"class":1337},[1050,5970,5808],{"class":1341},[1050,5972,1345],{"class":1337},[1050,5974,3545],{"class":1071},[1050,5976,3100],{"class":2977},[1050,5978,5979],{"class":2169}," user_info",[1050,5981,3535],{"class":1071},[1050,5983,1345],{"class":1337},[1050,5985,3468],{"class":1341},[1050,5987,1345],{"class":1337},[1050,5989,3545],{"class":1071},[1050,5991,3471],{"class":3459},[1050,5993,5994],{"class":1341},".\"\n",[1050,5996,5997],{"class":1052,"line":1635},[1050,5998,4297],{"class":1071},[1050,6000,6001],{"class":1052,"line":1649},[1050,6002,1319],{"class":1067},[1050,6004,6005,6007,6009,6011,6013,6015,6017,6019,6021,6023,6025,6027,6029],{"class":1052,"line":1669},[1050,6006,2106],{"class":1063},[1050,6008,2998],{"class":1288},[1050,6010,3001],{"class":1071},[1050,6012,3004],{"class":2169},[1050,6014,2173],{"class":1071},[1050,6016,3009],{"class":2169},[1050,6018,1100],{"class":1071},[1050,6020,2978],{"class":2977},[1050,6022,2981],{"class":2169},[1050,6024,1100],{"class":1071},[1050,6026,2986],{"class":2977},[1050,6028,2989],{"class":2169},[1050,6030,1146],{"class":1071},[1050,6032,6033],{"class":1052,"line":1689},[1050,6034,1279],{"class":1067},[1050,6036,6037,6039,6042,6044,6046],{"class":1052,"line":1705},[1050,6038,1295],{"class":1251},[1050,6040,6041],{"class":1298}," get_next_page",[1050,6043,2173],{"class":1071},[1050,6045,2966],{"class":2965},[1050,6047,2862],{"class":1071},[1050,6049,6050,6052,6055],{"class":1052,"line":1718},[1050,6051,1308],{"class":1265},[1050,6053,6054],{"class":1269},"Determine where to redirect after logout",[1050,6056,1273],{"class":1265},[1050,6058,6059],{"class":1052,"line":1723},[1050,6060,1319],{"class":1067},[1050,6062,6063,6066,6068,6070,6072,6075],{"class":1052,"line":1737},[1050,6064,6065],{"class":1067},"        next_page ",[1050,6067,1328],{"class":1071},[1050,6069,2998],{"class":1288},[1050,6071,3001],{"class":1071},[1050,6073,6074],{"class":2169},"get_next_page",[1050,6076,3396],{"class":1071},[1050,6078,6079],{"class":1052,"line":1757},[1050,6080,1319],{"class":1067},[1050,6082,6083,6085,6088],{"class":1052,"line":1777},[1050,6084,3134],{"class":1063},[1050,6086,6087],{"class":1067}," next_page",[1050,6089,1259],{"class":1071},[1050,6091,6092,6094],{"class":1052,"line":1797},[1050,6093,3144],{"class":1063},[1050,6095,6096],{"class":1067}," next_page\n",[1050,6098,6099],{"class":1052,"line":1815},[1050,6100,1319],{"class":1067},[1050,6102,6103],{"class":1052,"line":1820},[1050,6104,6105],{"class":1056},"        # Custom logout redirect logic\n",[1050,6107,6108,6110,6112,6114,6116,6119,6121],{"class":1052,"line":1834},[1050,6109,2106],{"class":1063},[1050,6111,3199],{"class":2169},[1050,6113,2173],{"class":1071},[1050,6115,1345],{"class":1337},[1050,6117,6118],{"class":1341},"home",[1050,6120,1345],{"class":1337},[1050,6122,1146],{"class":1071},[1050,6124,6125],{"class":1052,"line":1854},[1050,6126,1245],{"emptyLinePlaceholder":1244},[1050,6128,6129,6131,6134,6136,6138],{"class":1052,"line":1874},[1050,6130,1252],{"class":1251},[1050,6132,6133],{"class":1255}," AjaxLogoutView",[1050,6135,2173],{"class":1071},[1050,6137,1449],{"class":2859},[1050,6139,2862],{"class":1071},[1050,6141,6142,6144,6147],{"class":1052,"line":1889},[1050,6143,1266],{"class":1265},[1050,6145,6146],{"class":1269},"Logout view that supports AJAX requests",[1050,6148,1273],{"class":1265},[1050,6150,6151],{"class":1052,"line":1902},[1050,6152,1279],{"class":1067},[1050,6154,6155,6157,6159,6161,6163,6165,6167,6169,6171,6173,6175,6177,6179],{"class":1052,"line":1907},[1050,6156,1295],{"class":1251},[1050,6158,2960],{"class":1298},[1050,6160,2173],{"class":1071},[1050,6162,2966],{"class":2965},[1050,6164,1100],{"class":1071},[1050,6166,2972],{"class":2971},[1050,6168,1100],{"class":1071},[1050,6170,2978],{"class":2977},[1050,6172,2981],{"class":2971},[1050,6174,1100],{"class":1071},[1050,6176,2986],{"class":2977},[1050,6178,2989],{"class":2971},[1050,6180,2862],{"class":1071},[1050,6182,6183,6185,6188],{"class":1052,"line":1921},[1050,6184,1308],{"class":1265},[1050,6186,6187],{"class":1269},"Handle AJAX logout",[1050,6189,1273],{"class":1265},[1050,6191,6192],{"class":1052,"line":1941},[1050,6193,1319],{"class":1067},[1050,6195,6196,6198,6200,6202,6204,6206,6208,6210,6212,6214,6216,6218,6220,6222,6224,6226],{"class":1052,"line":1961},[1050,6197,3134],{"class":1063},[1050,6199,2972],{"class":1067},[1050,6201,1072],{"class":1071},[1050,6203,4563],{"class":3074},[1050,6205,1072],{"class":1071},[1050,6207,3085],{"class":2169},[1050,6209,2173],{"class":1071},[1050,6211,1345],{"class":1337},[1050,6213,4574],{"class":1341},[1050,6215,1345],{"class":1337},[1050,6217,3097],{"class":1071},[1050,6219,4581],{"class":2977},[1050,6221,1366],{"class":1337},[1050,6223,4586],{"class":1341},[1050,6225,1345],{"class":1337},[1050,6227,1259],{"class":1071},[1050,6229,6230,6232,6234,6236,6238,6240,6242],{"class":1052,"line":1981},[1050,6231,5143],{"class":1063},[1050,6233,2972],{"class":1067},[1050,6235,1072],{"class":1071},[1050,6237,3463],{"class":3074},[1050,6239,1072],{"class":1071},[1050,6241,4939],{"class":3074},[1050,6243,1259],{"class":1071},[1050,6245,6246,6249,6251,6253,6255,6257,6259],{"class":1052,"line":1999},[1050,6247,6248],{"class":1067},"                username ",[1050,6250,1328],{"class":1071},[1050,6252,2972],{"class":1067},[1050,6254,1072],{"class":1071},[1050,6256,3463],{"class":3074},[1050,6258,1072],{"class":1071},[1050,6260,6261],{"class":3074},"username\n",[1050,6263,6264,6267,6269,6271],{"class":1052,"line":2004},[1050,6265,6266],{"class":2169},"                logout",[1050,6268,2173],{"class":1071},[1050,6270,3009],{"class":2169},[1050,6272,1146],{"class":1071},[1050,6274,6275],{"class":1052,"line":2018},[1050,6276,5180],{"class":1067},[1050,6278,6279,6281,6283],{"class":1052,"line":2038},[1050,6280,5345],{"class":1063},[1050,6282,4628],{"class":2169},[1050,6284,4392],{"class":1071},[1050,6286,6287,6290,6292,6294,6296,6298],{"class":1052,"line":2058},[1050,6288,6289],{"class":1337},"                    '",[1050,6291,3759],{"class":1341},[1050,6293,1345],{"class":1337},[1050,6295,1348],{"class":1071},[1050,6297,4428],{"class":1529},[1050,6299,1116],{"class":1071},[1050,6301,6302,6304,6306,6308,6310,6312,6315,6317,6319,6321,6323],{"class":1052,"line":2073},[1050,6303,6289],{"class":1337},[1050,6305,4653],{"class":1341},[1050,6307,1345],{"class":1337},[1050,6309,1348],{"class":1071},[1050,6311,4154],{"class":1251},[1050,6313,6314],{"class":1341},"'Goodbye, ",[1050,6316,3460],{"class":3459},[1050,6318,3468],{"class":2169},[1050,6320,3471],{"class":3459},[1050,6322,5276],{"class":1341},[1050,6324,1116],{"class":1071},[1050,6326,6327,6329,6331,6333,6335,6337,6339,6341],{"class":1052,"line":2086},[1050,6328,6289],{"class":1337},[1050,6330,4674],{"class":1341},[1050,6332,1345],{"class":1337},[1050,6334,1348],{"class":1071},[1050,6336,3069],{"class":3068},[1050,6338,1072],{"class":1071},[1050,6340,6074],{"class":2169},[1050,6342,3396],{"class":1071},[1050,6344,6345],{"class":1052,"line":2092},[1050,6346,6347],{"class":1071},"                })\n",[1050,6349,6350,6352],{"class":1052,"line":2098},[1050,6351,5369],{"class":1063},[1050,6353,1259],{"class":1071},[1050,6355,6356,6358,6360],{"class":1052,"line":2103},[1050,6357,5345],{"class":1063},[1050,6359,4628],{"class":2169},[1050,6361,4392],{"class":1071},[1050,6363,6364,6366,6368,6370,6372,6374],{"class":1052,"line":2112},[1050,6365,6289],{"class":1337},[1050,6367,3759],{"class":1341},[1050,6369,1345],{"class":1337},[1050,6371,1348],{"class":1071},[1050,6373,4814],{"class":1529},[1050,6375,1116],{"class":1071},[1050,6377,6378,6380,6382,6384,6386,6388,6391],{"class":1052,"line":2117},[1050,6379,6289],{"class":1337},[1050,6381,4653],{"class":1341},[1050,6383,1345],{"class":1337},[1050,6385,1348],{"class":1071},[1050,6387,1366],{"class":1337},[1050,6389,6390],{"class":1341},"Not logged in",[1050,6392,1435],{"class":1337},[1050,6394,6395],{"class":1052,"line":2124},[1050,6396,6347],{"class":1071},[1050,6398,6399],{"class":1052,"line":2134},[1050,6400,1319],{"class":1067},[1050,6402,6403,6405,6407,6409,6411,6413,6415,6417,6419,6421,6423,6425,6427],{"class":1052,"line":2144},[1050,6404,2106],{"class":1063},[1050,6406,2998],{"class":1288},[1050,6408,3001],{"class":1071},[1050,6410,3004],{"class":2169},[1050,6412,2173],{"class":1071},[1050,6414,3009],{"class":2169},[1050,6416,1100],{"class":1071},[1050,6418,2978],{"class":2977},[1050,6420,2981],{"class":2169},[1050,6422,1100],{"class":1071},[1050,6424,2986],{"class":2977},[1050,6426,2989],{"class":2169},[1050,6428,1146],{"class":1071},[1050,6430,6431],{"class":1052,"line":2149},[1050,6432,1245],{"emptyLinePlaceholder":1244},[1050,6434,6435],{"class":1052,"line":2155},[1050,6436,6437],{"class":1056},"# Function-based logout view\n",[1050,6439,6440,6442,6445,6447,6449],{"class":1052,"line":2166},[1050,6441,4898],{"class":1251},[1050,6443,6444],{"class":1298}," custom_logout_view",[1050,6446,2173],{"class":1071},[1050,6448,3009],{"class":2971},[1050,6450,2862],{"class":1071},[1050,6452,6453,6455,6458],{"class":1052,"line":2200},[1050,6454,1266],{"class":1265},[1050,6456,6457],{"class":1269},"Custom function-based logout view",[1050,6459,1273],{"class":1265},[1050,6461,6462],{"class":1052,"line":2206},[1050,6463,1279],{"class":1067},[1050,6465,6466,6468,6470,6472,6474,6476,6478],{"class":1052,"line":2211},[1050,6467,4928],{"class":1063},[1050,6469,2972],{"class":1067},[1050,6471,1072],{"class":1071},[1050,6473,3463],{"class":3074},[1050,6475,1072],{"class":1071},[1050,6477,4939],{"class":3074},[1050,6479,1259],{"class":1071},[1050,6481,6482,6484,6486,6488,6490,6492,6494],{"class":1052,"line":2217},[1050,6483,3946],{"class":1067},[1050,6485,1328],{"class":1071},[1050,6487,2972],{"class":1067},[1050,6489,1072],{"class":1071},[1050,6491,3463],{"class":3074},[1050,6493,1072],{"class":1071},[1050,6495,6261],{"class":3074},[1050,6497,6498],{"class":1052,"line":2223},[1050,6499,1319],{"class":1067},[1050,6501,6502],{"class":1052,"line":2229},[1050,6503,6504],{"class":1056},"        # Clear specific session data\n",[1050,6506,6507,6510,6512,6514,6516,6518,6520,6522,6524,6526,6528,6530],{"class":1052,"line":2235},[1050,6508,6509],{"class":1067},"        request",[1050,6511,1072],{"class":1071},[1050,6513,3532],{"class":3074},[1050,6515,1072],{"class":1071},[1050,6517,5913],{"class":2169},[1050,6519,2173],{"class":1071},[1050,6521,1345],{"class":1337},[1050,6523,5854],{"class":1341},[1050,6525,1345],{"class":1337},[1050,6527,1100],{"class":1071},[1050,6529,1700],{"class":1529},[1050,6531,1146],{"class":1071},[1050,6533,6534],{"class":1052,"line":2241},[1050,6535,1319],{"class":1067},[1050,6537,6538],{"class":1052,"line":2247},[1050,6539,6540],{"class":1056},"        # Log out user\n",[1050,6542,6543,6546,6548,6550],{"class":1052,"line":2253},[1050,6544,6545],{"class":2169},"        logout",[1050,6547,2173],{"class":1071},[1050,6549,3009],{"class":2169},[1050,6551,1146],{"class":1071},[1050,6553,6554],{"class":1052,"line":2259},[1050,6555,1319],{"class":1067},[1050,6557,6558,6560,6562,6564,6566,6568,6570,6572,6575,6577,6579,6581,6584],{"class":1052,"line":2265},[1050,6559,3754],{"class":1067},[1050,6561,1072],{"class":1071},[1050,6563,3759],{"class":2169},[1050,6565,2173],{"class":1071},[1050,6567,3009],{"class":2169},[1050,6569,1100],{"class":1071},[1050,6571,4154],{"class":1251},[1050,6573,6574],{"class":1341},"'You have been logged out, ",[1050,6576,3460],{"class":3459},[1050,6578,3468],{"class":2169},[1050,6580,3471],{"class":3459},[1050,6582,6583],{"class":1341},".'",[1050,6585,1146],{"class":1071},[1050,6587,6588],{"class":1052,"line":2270},[1050,6589,1279],{"class":1067},[1050,6591,6592,6594,6596,6598,6600,6602,6604],{"class":1052,"line":2276},[1050,6593,5494],{"class":1063},[1050,6595,4949],{"class":2169},[1050,6597,2173],{"class":1071},[1050,6599,1345],{"class":1337},[1050,6601,6118],{"class":1341},[1050,6603,1345],{"class":1337},[1050,6605,1146],{"class":1071},[1035,6607,6609],{"id":6608},"password-change-views","Password Change Views",[1040,6611,6613],{"className":1042,"code":6612,"language":1044,"meta":1045,"style":1045},"# Custom password change views\nfrom django.contrib.auth.views import PasswordChangeView, PasswordChangeDoneView\nfrom django.contrib.auth.forms import PasswordChangeForm\nfrom django.contrib.auth.decorators import login_required\n\nclass CustomPasswordChangeView(PasswordChangeView):\n    \"\"\"Enhanced password change view\"\"\"\n    \n    template_name = 'auth/password_change.html'\n    success_url = reverse_lazy('password_change_done')\n    \n    def form_valid(self, form):\n        \"\"\"Handle successful password change\"\"\"\n        \n        response = super().form_valid(form)\n        \n        user = self.request.user\n        \n        # Log password change\n        import logging\n        logger = logging.getLogger('auth')\n        logger.info(f\"Password changed for user: {user.username}\")\n        \n        # Store password change timestamp\n        if hasattr(user, 'profile'):\n            user.profile.password_changed_at = timezone.now()\n            user.profile.save()\n        \n        # Invalidate all other sessions\n        from django.contrib.sessions.models import Session\n        \n        current_session_key = self.request.session.session_key\n        \n        # Get all user sessions\n        user_sessions = []\n        for session in Session.objects.all():\n            try:\n                session_data = session.get_decoded()\n                if session_data.get('_auth_user_id') == str(user.id):\n                    if session.session_key != current_session_key:\n                        user_sessions.append(session)\n            except:\n                continue\n        \n        # Delete other sessions\n        for session in user_sessions:\n            session.delete()\n        \n        messages.success(\n            self.request,\n            'Your password has been changed successfully. '\n            'All other sessions have been logged out for security.'\n        )\n        \n        return response\n    \n    def get_context_data(self, **kwargs):\n        \"\"\"Add password strength requirements to context\"\"\"\n        \n        context = super().get_context_data(**kwargs)\n        \n        context.update({\n            'password_requirements': [\n                'At least 12 characters long',\n                'Contains uppercase and lowercase letters',\n                'Contains at least one number',\n                'Contains at least one special character',\n                'Not similar to your personal information',\n                'Not a commonly used password'\n            ]\n        })\n        \n        return context\n\nclass CustomPasswordChangeDoneView(PasswordChangeDoneView):\n    \"\"\"Custom password change success view\"\"\"\n    \n    template_name = 'auth/password_change_done.html'\n    \n    def get_context_data(self, **kwargs):\n        \"\"\"Add additional context\"\"\"\n        \n        context = super().get_context_data(**kwargs)\n        \n        context.update({\n            'next_steps': [\n                'Update your password in any saved browsers',\n                'Update your password in mobile apps',\n                'Consider enabling two-factor authentication'\n            ]\n        })\n        \n        return context\n\n# Function-based password change view\n@login_required\ndef custom_password_change_view(request):\n    \"\"\"Custom function-based password change view\"\"\"\n    \n    if request.method == 'POST':\n        form = PasswordChangeForm(request.user, request.POST)\n        \n        if form.is_valid():\n            user = form.save()\n            \n            # Update session to prevent logout\n            from django.contrib.auth import update_session_auth_hash\n            update_session_auth_hash(request, user)\n            \n            messages.success(request, 'Your password has been changed successfully!')\n            return redirect('password_change_done')\n    else:\n        form = PasswordChangeForm(request.user)\n    \n    return render(request, 'auth/password_change.html', {'form': form})\n",[1047,6614,6615,6620,6647,6670,6693,6697,6710,6719,6723,6736,6755,6759,6775,6784,6788,6806,6810,6826,6830,6835,6841,6863,6892,6896,6901,6924,6948,6962,6966,6971,6996,7000,7022,7026,7031,7041,7066,7073,7090,7128,7148,7164,7171,7176,7180,7185,7198,7210,7214,7224,7234,7243,7252,7256,7260,7266,7270,7288,7297,7301,7321,7325,7335,7348,7359,7370,7381,7392,7403,7412,7416,7420,7424,7430,7434,7447,7456,7460,7473,7477,7495,7504,7508,7528,7532,7542,7555,7566,7577,7586,7590,7594,7598,7604,7608,7613,7621,7634,7643,7647,7667,7695,7699,7712,7727,7731,7736,7756,7771,7775,7798,7814,7821,7839,7843],{"__ignoreMap":1045},[1050,6616,6617],{"class":1052,"line":1053},[1050,6618,6619],{"class":1056},"# Custom password change views\n",[1050,6621,6622,6624,6626,6628,6630,6632,6634,6636,6638,6640,6642,6644],{"class":1052,"line":1060},[1050,6623,1064],{"class":1063},[1050,6625,1068],{"class":1067},[1050,6627,1072],{"class":1071},[1050,6629,1075],{"class":1067},[1050,6631,1072],{"class":1071},[1050,6633,1080],{"class":1067},[1050,6635,1072],{"class":1071},[1050,6637,1085],{"class":1067},[1050,6639,1088],{"class":1063},[1050,6641,1108],{"class":1067},[1050,6643,1100],{"class":1071},[1050,6645,6646],{"class":1067}," PasswordChangeDoneView\n",[1050,6648,6649,6651,6653,6655,6657,6659,6661,6663,6665,6667],{"class":1052,"line":1094},[1050,6650,1064],{"class":1063},[1050,6652,1068],{"class":1067},[1050,6654,1072],{"class":1071},[1050,6656,1075],{"class":1067},[1050,6658,1072],{"class":1071},[1050,6660,1080],{"class":1067},[1050,6662,1072],{"class":1071},[1050,6664,2678],{"class":1067},[1050,6666,1088],{"class":1063},[1050,6668,6669],{"class":1067}," PasswordChangeForm\n",[1050,6671,6672,6674,6676,6678,6680,6682,6684,6686,6688,6690],{"class":1052,"line":1119},[1050,6673,1064],{"class":1063},[1050,6675,1068],{"class":1067},[1050,6677,1072],{"class":1071},[1050,6679,1075],{"class":1067},[1050,6681,1072],{"class":1071},[1050,6683,1080],{"class":1067},[1050,6685,1072],{"class":1071},[1050,6687,2764],{"class":1067},[1050,6689,1088],{"class":1063},[1050,6691,6692],{"class":1067}," login_required\n",[1050,6694,6695],{"class":1052,"line":1137},[1050,6696,1245],{"emptyLinePlaceholder":1244},[1050,6698,6699,6701,6704,6706,6708],{"class":1052,"line":1143},[1050,6700,1252],{"class":1251},[1050,6702,6703],{"class":1255}," CustomPasswordChangeView",[1050,6705,2173],{"class":1071},[1050,6707,1543],{"class":2859},[1050,6709,2862],{"class":1071},[1050,6711,6712,6714,6717],{"class":1052,"line":1149},[1050,6713,1266],{"class":1265},[1050,6715,6716],{"class":1269},"Enhanced password change view",[1050,6718,1273],{"class":1265},[1050,6720,6721],{"class":1052,"line":1171},[1050,6722,1279],{"class":1067},[1050,6724,6725,6727,6729,6731,6734],{"class":1052,"line":1193},[1050,6726,2880],{"class":1067},[1050,6728,1328],{"class":1071},[1050,6730,1366],{"class":1337},[1050,6732,6733],{"class":1341},"auth/password_change.html",[1050,6735,1435],{"class":1337},[1050,6737,6738,6741,6743,6745,6747,6749,6751,6753],{"class":1052,"line":1224},[1050,6739,6740],{"class":1067},"    success_url ",[1050,6742,1328],{"class":1071},[1050,6744,3199],{"class":2169},[1050,6746,2173],{"class":1071},[1050,6748,1345],{"class":1337},[1050,6750,1605],{"class":1341},[1050,6752,1345],{"class":1337},[1050,6754,1146],{"class":1071},[1050,6756,6757],{"class":1052,"line":1241},[1050,6758,1279],{"class":1067},[1050,6760,6761,6763,6765,6767,6769,6771,6773],{"class":1052,"line":1248},[1050,6762,1295],{"class":1251},[1050,6764,3331],{"class":1298},[1050,6766,2173],{"class":1071},[1050,6768,2966],{"class":2965},[1050,6770,1100],{"class":1071},[1050,6772,3340],{"class":2971},[1050,6774,2862],{"class":1071},[1050,6776,6777,6779,6782],{"class":1052,"line":1262},[1050,6778,1308],{"class":1265},[1050,6780,6781],{"class":1269},"Handle successful password change",[1050,6783,1273],{"class":1265},[1050,6785,6786],{"class":1052,"line":1276},[1050,6787,1319],{"class":1067},[1050,6789,6790,6792,6794,6796,6798,6800,6802,6804],{"class":1052,"line":1282},[1050,6791,3360],{"class":1067},[1050,6793,1328],{"class":1071},[1050,6795,2998],{"class":1288},[1050,6797,3001],{"class":1071},[1050,6799,3369],{"class":2169},[1050,6801,2173],{"class":1071},[1050,6803,3374],{"class":2169},[1050,6805,1146],{"class":1071},[1050,6807,6808],{"class":1052,"line":1292},[1050,6809,1319],{"class":1067},[1050,6811,6812,6814,6816,6818,6820,6822,6824],{"class":1052,"line":1305},[1050,6813,3161],{"class":1067},[1050,6815,1328],{"class":1071},[1050,6817,3069],{"class":3068},[1050,6819,1072],{"class":1071},[1050,6821,3009],{"class":3074},[1050,6823,1072],{"class":1071},[1050,6825,3174],{"class":3074},[1050,6827,6828],{"class":1052,"line":1316},[1050,6829,1319],{"class":1067},[1050,6831,6832],{"class":1052,"line":1322},[1050,6833,6834],{"class":1056},"        # Log password change\n",[1050,6836,6837,6839],{"class":1052,"line":1334},[1050,6838,3410],{"class":1063},[1050,6840,3413],{"class":1067},[1050,6842,6843,6845,6847,6849,6851,6853,6855,6857,6859,6861],{"class":1052,"line":1353},[1050,6844,3418],{"class":1067},[1050,6846,1328],{"class":1071},[1050,6848,3423],{"class":1067},[1050,6850,1072],{"class":1071},[1050,6852,3428],{"class":2169},[1050,6854,2173],{"class":1071},[1050,6856,1345],{"class":1337},[1050,6858,1080],{"class":1341},[1050,6860,1345],{"class":1337},[1050,6862,1146],{"class":1071},[1050,6864,6865,6867,6869,6871,6873,6875,6878,6880,6882,6884,6886,6888,6890],{"class":1052,"line":1376},[1050,6866,3443],{"class":1067},[1050,6868,1072],{"class":1071},[1050,6870,3448],{"class":2169},[1050,6872,2173],{"class":1071},[1050,6874,3453],{"class":1251},[1050,6876,6877],{"class":1341},"\"Password changed for user: ",[1050,6879,3460],{"class":3459},[1050,6881,3463],{"class":2169},[1050,6883,1072],{"class":1071},[1050,6885,3468],{"class":3074},[1050,6887,3471],{"class":3459},[1050,6889,3507],{"class":1341},[1050,6891,1146],{"class":1071},[1050,6893,6894],{"class":1052,"line":1397},[1050,6895,1319],{"class":1067},[1050,6897,6898],{"class":1052,"line":1418},[1050,6899,6900],{"class":1056},"        # Store password change timestamp\n",[1050,6902,6903,6905,6909,6911,6913,6915,6917,6920,6922],{"class":1052,"line":1438},[1050,6904,3134],{"class":1063},[1050,6906,6908],{"class":6907},"sJdAF"," hasattr",[1050,6910,2173],{"class":1071},[1050,6912,3463],{"class":2169},[1050,6914,1100],{"class":1071},[1050,6916,1366],{"class":1337},[1050,6918,6919],{"class":1341},"profile",[1050,6921,1345],{"class":1337},[1050,6923,2862],{"class":1071},[1050,6925,6926,6929,6931,6933,6935,6938,6940,6942,6944,6946],{"class":1052,"line":1444},[1050,6927,6928],{"class":1067},"            user",[1050,6930,1072],{"class":1071},[1050,6932,6919],{"class":3074},[1050,6934,1072],{"class":1071},[1050,6936,6937],{"class":3074},"password_changed_at",[1050,6939,3548],{"class":1071},[1050,6941,3551],{"class":1067},[1050,6943,1072],{"class":1071},[1050,6945,3556],{"class":2169},[1050,6947,3396],{"class":1071},[1050,6949,6950,6952,6954,6956,6958,6960],{"class":1052,"line":1458},[1050,6951,6928],{"class":1067},[1050,6953,1072],{"class":1071},[1050,6955,6919],{"class":3074},[1050,6957,1072],{"class":1071},[1050,6959,3851],{"class":2169},[1050,6961,3396],{"class":1071},[1050,6963,6964],{"class":1052,"line":1478},[1050,6965,1319],{"class":1067},[1050,6967,6968],{"class":1052,"line":1498},[1050,6969,6970],{"class":1056},"        # Invalidate all other sessions\n",[1050,6972,6973,6975,6977,6979,6981,6983,6986,6988,6991,6993],{"class":1052,"line":1518},[1050,6974,4093],{"class":1063},[1050,6976,1068],{"class":1067},[1050,6978,1072],{"class":1071},[1050,6980,1075],{"class":1067},[1050,6982,1072],{"class":1071},[1050,6984,6985],{"class":1067},"sessions",[1050,6987,1072],{"class":1071},[1050,6989,6990],{"class":1067},"models ",[1050,6992,1088],{"class":1063},[1050,6994,6995],{"class":1067}," Session\n",[1050,6997,6998],{"class":1052,"line":1533},[1050,6999,1319],{"class":1067},[1050,7001,7002,7005,7007,7009,7011,7013,7015,7017,7019],{"class":1052,"line":1538},[1050,7003,7004],{"class":1067},"        current_session_key ",[1050,7006,1328],{"class":1071},[1050,7008,3069],{"class":3068},[1050,7010,1072],{"class":1071},[1050,7012,3009],{"class":3074},[1050,7014,1072],{"class":1071},[1050,7016,3532],{"class":3074},[1050,7018,1072],{"class":1071},[1050,7020,7021],{"class":3074},"session_key\n",[1050,7023,7024],{"class":1052,"line":1552},[1050,7025,1319],{"class":1067},[1050,7027,7028],{"class":1052,"line":1572},[1050,7029,7030],{"class":1056},"        # Get all user sessions\n",[1050,7032,7033,7036,7038],{"class":1052,"line":1592},[1050,7034,7035],{"class":1067},"        user_sessions ",[1050,7037,1328],{"class":1071},[1050,7039,7040],{"class":1071}," []\n",[1050,7042,7043,7046,7049,7051,7054,7056,7059,7061,7064],{"class":1052,"line":1612},[1050,7044,7045],{"class":1063},"        for",[1050,7047,7048],{"class":1067}," session ",[1050,7050,5894],{"class":1063},[1050,7052,7053],{"class":1067}," Session",[1050,7055,1072],{"class":1071},[1050,7057,7058],{"class":3074},"objects",[1050,7060,1072],{"class":1071},[1050,7062,7063],{"class":2169},"all",[1050,7065,1302],{"class":1071},[1050,7067,7068,7071],{"class":1052,"line":1630},[1050,7069,7070],{"class":1063},"            try",[1050,7072,1259],{"class":1071},[1050,7074,7075,7078,7080,7083,7085,7088],{"class":1052,"line":1635},[1050,7076,7077],{"class":1067},"                session_data ",[1050,7079,1328],{"class":1071},[1050,7081,7082],{"class":1067}," session",[1050,7084,1072],{"class":1071},[1050,7086,7087],{"class":2169},"get_decoded",[1050,7089,3396],{"class":1071},[1050,7091,7092,7094,7097,7099,7101,7103,7105,7108,7110,7112,7114,7117,7119,7121,7123,7126],{"class":1052,"line":1649},[1050,7093,5192],{"class":1063},[1050,7095,7096],{"class":1067}," session_data",[1050,7098,1072],{"class":1071},[1050,7100,3085],{"class":2169},[1050,7102,2173],{"class":1071},[1050,7104,1345],{"class":1337},[1050,7106,7107],{"class":1341},"_auth_user_id",[1050,7109,1345],{"class":1337},[1050,7111,3097],{"class":1071},[1050,7113,4581],{"class":2977},[1050,7115,7116],{"class":1288}," str",[1050,7118,2173],{"class":1071},[1050,7120,3463],{"class":2169},[1050,7122,1072],{"class":1071},[1050,7124,7125],{"class":3074},"id",[1050,7127,2862],{"class":1071},[1050,7129,7130,7133,7135,7137,7140,7143,7146],{"class":1052,"line":1669},[1050,7131,7132],{"class":1063},"                    if",[1050,7134,7082],{"class":1067},[1050,7136,1072],{"class":1071},[1050,7138,7139],{"class":3074},"session_key",[1050,7141,7142],{"class":2977}," !=",[1050,7144,7145],{"class":1067}," current_session_key",[1050,7147,1259],{"class":1071},[1050,7149,7150,7153,7155,7158,7160,7162],{"class":1052,"line":1689},[1050,7151,7152],{"class":1067},"                        user_sessions",[1050,7154,1072],{"class":1071},[1050,7156,7157],{"class":2169},"append",[1050,7159,2173],{"class":1071},[1050,7161,3532],{"class":2169},[1050,7163,1146],{"class":1071},[1050,7165,7166,7169],{"class":1052,"line":1705},[1050,7167,7168],{"class":1063},"            except",[1050,7170,1259],{"class":1071},[1050,7172,7173],{"class":1052,"line":1718},[1050,7174,7175],{"class":1063},"                continue\n",[1050,7177,7178],{"class":1052,"line":1723},[1050,7179,1319],{"class":1067},[1050,7181,7182],{"class":1052,"line":1737},[1050,7183,7184],{"class":1056},"        # Delete other sessions\n",[1050,7186,7187,7189,7191,7193,7196],{"class":1052,"line":1757},[1050,7188,7045],{"class":1063},[1050,7190,7048],{"class":1067},[1050,7192,5894],{"class":1063},[1050,7194,7195],{"class":1067}," user_sessions",[1050,7197,1259],{"class":1071},[1050,7199,7200,7203,7205,7208],{"class":1052,"line":1777},[1050,7201,7202],{"class":1067},"            session",[1050,7204,1072],{"class":1071},[1050,7206,7207],{"class":2169},"delete",[1050,7209,3396],{"class":1071},[1050,7211,7212],{"class":1052,"line":1797},[1050,7213,1319],{"class":1067},[1050,7215,7216,7218,7220,7222],{"class":1052,"line":1815},[1050,7217,3754],{"class":1067},[1050,7219,1072],{"class":1071},[1050,7221,3759],{"class":2169},[1050,7223,3762],{"class":1071},[1050,7225,7226,7228,7230,7232],{"class":1052,"line":1820},[1050,7227,3686],{"class":3068},[1050,7229,1072],{"class":1071},[1050,7231,3009],{"class":3074},[1050,7233,1116],{"class":1071},[1050,7235,7236,7238,7241],{"class":1052,"line":1834},[1050,7237,1338],{"class":1337},[1050,7239,7240],{"class":1341},"Your password has been changed successfully. ",[1050,7242,1435],{"class":1337},[1050,7244,7245,7247,7250],{"class":1052,"line":1854},[1050,7246,1338],{"class":1337},[1050,7248,7249],{"class":1341},"All other sessions have been logged out for security.",[1050,7251,1435],{"class":1337},[1050,7253,7254],{"class":1052,"line":1874},[1050,7255,3813],{"class":1071},[1050,7257,7258],{"class":1052,"line":1889},[1050,7259,1319],{"class":1067},[1050,7261,7262,7264],{"class":1052,"line":1902},[1050,7263,2106],{"class":1063},[1050,7265,3879],{"class":1067},[1050,7267,7268],{"class":1052,"line":1907},[1050,7269,1279],{"class":1067},[1050,7271,7272,7274,7276,7278,7280,7282,7284,7286],{"class":1052,"line":1921},[1050,7273,1295],{"class":1251},[1050,7275,4322],{"class":1298},[1050,7277,2173],{"class":1071},[1050,7279,2966],{"class":2965},[1050,7281,1100],{"class":1071},[1050,7283,2986],{"class":2977},[1050,7285,2989],{"class":2971},[1050,7287,2862],{"class":1071},[1050,7289,7290,7292,7295],{"class":1052,"line":1941},[1050,7291,1308],{"class":1265},[1050,7293,7294],{"class":1269},"Add password strength requirements to context",[1050,7296,1273],{"class":1265},[1050,7298,7299],{"class":1052,"line":1961},[1050,7300,1319],{"class":1067},[1050,7302,7303,7305,7307,7309,7311,7313,7315,7317,7319],{"class":1052,"line":1981},[1050,7304,4355],{"class":1067},[1050,7306,1328],{"class":1071},[1050,7308,2998],{"class":1288},[1050,7310,3001],{"class":1071},[1050,7312,4364],{"class":2169},[1050,7314,2173],{"class":1071},[1050,7316,4369],{"class":2977},[1050,7318,2989],{"class":2169},[1050,7320,1146],{"class":1071},[1050,7322,7323],{"class":1052,"line":1999},[1050,7324,1319],{"class":1067},[1050,7326,7327,7329,7331,7333],{"class":1052,"line":2004},[1050,7328,4384],{"class":1067},[1050,7330,1072],{"class":1071},[1050,7332,4389],{"class":2169},[1050,7334,4392],{"class":1071},[1050,7336,7337,7339,7342,7344,7346],{"class":1052,"line":2018},[1050,7338,1338],{"class":1337},[1050,7340,7341],{"class":1341},"password_requirements",[1050,7343,1345],{"class":1337},[1050,7345,1348],{"class":1071},[1050,7347,2163],{"class":1071},[1050,7349,7350,7352,7355,7357],{"class":1052,"line":2038},[1050,7351,1356],{"class":1337},[1050,7353,7354],{"class":1341},"At least 12 characters long",[1050,7356,1345],{"class":1337},[1050,7358,1116],{"class":1071},[1050,7360,7361,7363,7366,7368],{"class":1052,"line":2058},[1050,7362,1356],{"class":1337},[1050,7364,7365],{"class":1341},"Contains uppercase and lowercase letters",[1050,7367,1345],{"class":1337},[1050,7369,1116],{"class":1071},[1050,7371,7372,7374,7377,7379],{"class":1052,"line":2073},[1050,7373,1356],{"class":1337},[1050,7375,7376],{"class":1341},"Contains at least one number",[1050,7378,1345],{"class":1337},[1050,7380,1116],{"class":1071},[1050,7382,7383,7385,7388,7390],{"class":1052,"line":2086},[1050,7384,1356],{"class":1337},[1050,7386,7387],{"class":1341},"Contains at least one special character",[1050,7389,1345],{"class":1337},[1050,7391,1116],{"class":1071},[1050,7393,7394,7396,7399,7401],{"class":1052,"line":2092},[1050,7395,1356],{"class":1337},[1050,7397,7398],{"class":1341},"Not similar to your personal information",[1050,7400,1345],{"class":1337},[1050,7402,1116],{"class":1071},[1050,7404,7405,7407,7410],{"class":1052,"line":2098},[1050,7406,1356],{"class":1337},[1050,7408,7409],{"class":1341},"Not a commonly used password",[1050,7411,1435],{"class":1337},[1050,7413,7414],{"class":1052,"line":2103},[1050,7415,5879],{"class":1071},[1050,7417,7418],{"class":1052,"line":2112},[1050,7419,4468],{"class":1071},[1050,7421,7422],{"class":1052,"line":2117},[1050,7423,1319],{"class":1067},[1050,7425,7426,7428],{"class":1052,"line":2124},[1050,7427,2106],{"class":1063},[1050,7429,4481],{"class":1067},[1050,7431,7432],{"class":1052,"line":2134},[1050,7433,1245],{"emptyLinePlaceholder":1244},[1050,7435,7436,7438,7441,7443,7445],{"class":1052,"line":2144},[1050,7437,1252],{"class":1251},[1050,7439,7440],{"class":1255}," CustomPasswordChangeDoneView",[1050,7442,2173],{"class":1071},[1050,7444,1640],{"class":2859},[1050,7446,2862],{"class":1071},[1050,7448,7449,7451,7454],{"class":1052,"line":2149},[1050,7450,1266],{"class":1265},[1050,7452,7453],{"class":1269},"Custom password change success view",[1050,7455,1273],{"class":1265},[1050,7457,7458],{"class":1052,"line":2155},[1050,7459,1279],{"class":1067},[1050,7461,7462,7464,7466,7468,7471],{"class":1052,"line":2166},[1050,7463,2880],{"class":1067},[1050,7465,1328],{"class":1071},[1050,7467,1366],{"class":1337},[1050,7469,7470],{"class":1341},"auth/password_change_done.html",[1050,7472,1435],{"class":1337},[1050,7474,7475],{"class":1052,"line":2200},[1050,7476,1279],{"class":1067},[1050,7478,7479,7481,7483,7485,7487,7489,7491,7493],{"class":1052,"line":2206},[1050,7480,1295],{"class":1251},[1050,7482,4322],{"class":1298},[1050,7484,2173],{"class":1071},[1050,7486,2966],{"class":2965},[1050,7488,1100],{"class":1071},[1050,7490,2986],{"class":2977},[1050,7492,2989],{"class":2971},[1050,7494,2862],{"class":1071},[1050,7496,7497,7499,7502],{"class":1052,"line":2211},[1050,7498,1308],{"class":1265},[1050,7500,7501],{"class":1269},"Add additional context",[1050,7503,1273],{"class":1265},[1050,7505,7506],{"class":1052,"line":2217},[1050,7507,1319],{"class":1067},[1050,7509,7510,7512,7514,7516,7518,7520,7522,7524,7526],{"class":1052,"line":2223},[1050,7511,4355],{"class":1067},[1050,7513,1328],{"class":1071},[1050,7515,2998],{"class":1288},[1050,7517,3001],{"class":1071},[1050,7519,4364],{"class":2169},[1050,7521,2173],{"class":1071},[1050,7523,4369],{"class":2977},[1050,7525,2989],{"class":2169},[1050,7527,1146],{"class":1071},[1050,7529,7530],{"class":1052,"line":2229},[1050,7531,1319],{"class":1067},[1050,7533,7534,7536,7538,7540],{"class":1052,"line":2235},[1050,7535,4384],{"class":1067},[1050,7537,1072],{"class":1071},[1050,7539,4389],{"class":2169},[1050,7541,4392],{"class":1071},[1050,7543,7544,7546,7549,7551,7553],{"class":1052,"line":2241},[1050,7545,1338],{"class":1337},[1050,7547,7548],{"class":1341},"next_steps",[1050,7550,1345],{"class":1337},[1050,7552,1348],{"class":1071},[1050,7554,2163],{"class":1071},[1050,7556,7557,7559,7562,7564],{"class":1052,"line":2247},[1050,7558,1356],{"class":1337},[1050,7560,7561],{"class":1341},"Update your password in any saved browsers",[1050,7563,1345],{"class":1337},[1050,7565,1116],{"class":1071},[1050,7567,7568,7570,7573,7575],{"class":1052,"line":2253},[1050,7569,1356],{"class":1337},[1050,7571,7572],{"class":1341},"Update your password in mobile apps",[1050,7574,1345],{"class":1337},[1050,7576,1116],{"class":1071},[1050,7578,7579,7581,7584],{"class":1052,"line":2259},[1050,7580,1356],{"class":1337},[1050,7582,7583],{"class":1341},"Consider enabling two-factor authentication",[1050,7585,1435],{"class":1337},[1050,7587,7588],{"class":1052,"line":2265},[1050,7589,5879],{"class":1071},[1050,7591,7592],{"class":1052,"line":2270},[1050,7593,4468],{"class":1071},[1050,7595,7596],{"class":1052,"line":2276},[1050,7597,1319],{"class":1067},[1050,7599,7600,7602],{"class":1052,"line":2286},[1050,7601,2106],{"class":1063},[1050,7603,4481],{"class":1067},[1050,7605,7606],{"class":1052,"line":2329},[1050,7607,1245],{"emptyLinePlaceholder":1244},[1050,7609,7610],{"class":1052,"line":2366},[1050,7611,7612],{"class":1056},"# Function-based password change view\n",[1050,7614,7615,7618],{"class":1052,"line":2403},[1050,7616,7617],{"class":1071},"@",[1050,7619,7620],{"class":1298},"login_required\n",[1050,7622,7623,7625,7628,7630,7632],{"class":1052,"line":2439},[1050,7624,4898],{"class":1251},[1050,7626,7627],{"class":1298}," custom_password_change_view",[1050,7629,2173],{"class":1071},[1050,7631,3009],{"class":2971},[1050,7633,2862],{"class":1071},[1050,7635,7636,7638,7641],{"class":1052,"line":2477},[1050,7637,1266],{"class":1265},[1050,7639,7640],{"class":1269},"Custom function-based password change view",[1050,7642,1273],{"class":1265},[1050,7644,7645],{"class":1052,"line":2513},[1050,7646,1279],{"class":1067},[1050,7648,7649,7651,7653,7655,7657,7659,7661,7663,7665],{"class":1052,"line":2550},[1050,7650,4928],{"class":1063},[1050,7652,2972],{"class":1067},[1050,7654,1072],{"class":1071},[1050,7656,4977],{"class":3074},[1050,7658,4581],{"class":2977},[1050,7660,1366],{"class":1337},[1050,7662,3080],{"class":1341},[1050,7664,1345],{"class":1337},[1050,7666,1259],{"class":1071},[1050,7668,7669,7672,7674,7677,7679,7681,7683,7685,7687,7689,7691,7693],{"class":1052,"line":2587},[1050,7670,7671],{"class":1067},"        form ",[1050,7673,1328],{"class":1071},[1050,7675,7676],{"class":2169}," PasswordChangeForm",[1050,7678,2173],{"class":1071},[1050,7680,3009],{"class":2169},[1050,7682,1072],{"class":1071},[1050,7684,3463],{"class":3074},[1050,7686,1100],{"class":1071},[1050,7688,2972],{"class":2169},[1050,7690,1072],{"class":1071},[1050,7692,3080],{"class":3079},[1050,7694,1146],{"class":1071},[1050,7696,7697],{"class":1052,"line":2592},[1050,7698,1319],{"class":1067},[1050,7700,7701,7703,7705,7707,7710],{"class":1052,"line":2597},[1050,7702,3134],{"class":1063},[1050,7704,3340],{"class":1067},[1050,7706,1072],{"class":1071},[1050,7708,7709],{"class":2169},"is_valid",[1050,7711,1302],{"class":1071},[1050,7713,7714,7717,7719,7721,7723,7725],{"class":1052,"line":4169},[1050,7715,7716],{"class":1067},"            user ",[1050,7718,1328],{"class":1071},[1050,7720,3340],{"class":1067},[1050,7722,1072],{"class":1071},[1050,7724,3851],{"class":2169},[1050,7726,3396],{"class":1071},[1050,7728,7729],{"class":1052,"line":4174},[1050,7730,4620],{"class":1067},[1050,7732,7733],{"class":1052,"line":4207},[1050,7734,7735],{"class":1056},"            # Update session to prevent logout\n",[1050,7737,7738,7741,7743,7745,7747,7749,7751,7753],{"class":1052,"line":4237},[1050,7739,7740],{"class":1063},"            from",[1050,7742,1068],{"class":1067},[1050,7744,1072],{"class":1071},[1050,7746,1075],{"class":1067},[1050,7748,1072],{"class":1071},[1050,7750,1206],{"class":1067},[1050,7752,1088],{"class":1063},[1050,7754,7755],{"class":1067}," update_session_auth_hash\n",[1050,7757,7758,7761,7763,7765,7767,7769],{"class":1052,"line":4242},[1050,7759,7760],{"class":2169},"            update_session_auth_hash",[1050,7762,2173],{"class":1071},[1050,7764,3009],{"class":2169},[1050,7766,1100],{"class":1071},[1050,7768,3185],{"class":2169},[1050,7770,1146],{"class":1071},[1050,7772,7773],{"class":1052,"line":4258},[1050,7774,4620],{"class":1067},[1050,7776,7777,7779,7781,7783,7785,7787,7789,7791,7794,7796],{"class":1052,"line":4271},[1050,7778,4261],{"class":1067},[1050,7780,1072],{"class":1071},[1050,7782,3759],{"class":2169},[1050,7784,2173],{"class":1071},[1050,7786,3009],{"class":2169},[1050,7788,1100],{"class":1071},[1050,7790,1366],{"class":1337},[1050,7792,7793],{"class":1341},"Your password has been changed successfully!",[1050,7795,1345],{"class":1337},[1050,7797,1146],{"class":1071},[1050,7799,7800,7802,7804,7806,7808,7810,7812],{"class":1052,"line":4283},[1050,7801,3144],{"class":1063},[1050,7803,4949],{"class":2169},[1050,7805,2173],{"class":1071},[1050,7807,1345],{"class":1337},[1050,7809,1605],{"class":1341},[1050,7811,1345],{"class":1337},[1050,7813,1146],{"class":1071},[1050,7815,7816,7819],{"class":1052,"line":4294},[1050,7817,7818],{"class":1063},"    else",[1050,7820,1259],{"class":1071},[1050,7822,7823,7825,7827,7829,7831,7833,7835,7837],{"class":1052,"line":4300},[1050,7824,7671],{"class":1067},[1050,7826,1328],{"class":1071},[1050,7828,7676],{"class":2169},[1050,7830,2173],{"class":1071},[1050,7832,3009],{"class":2169},[1050,7834,1072],{"class":1071},[1050,7836,3463],{"class":3074},[1050,7838,1146],{"class":1071},[1050,7840,7841],{"class":1052,"line":4305},[1050,7842,1279],{"class":1067},[1050,7844,7845,7847,7849,7851,7853,7855,7857,7859,7861,7863,7866,7868,7870,7872,7874,7876],{"class":1052,"line":4312},[1050,7846,5494],{"class":1063},[1050,7848,1185],{"class":2169},[1050,7850,2173],{"class":1071},[1050,7852,3009],{"class":2169},[1050,7854,1100],{"class":1071},[1050,7856,1366],{"class":1337},[1050,7858,6733],{"class":1341},[1050,7860,1345],{"class":1337},[1050,7862,1100],{"class":1071},[1050,7864,7865],{"class":1071}," {",[1050,7867,1345],{"class":1337},[1050,7869,3374],{"class":1341},[1050,7871,1345],{"class":1337},[1050,7873,1348],{"class":1071},[1050,7875,3340],{"class":2169},[1050,7877,7878],{"class":1071},"})\n",[1035,7880,7882],{"id":7881},"password-reset-views","Password Reset Views",[1040,7884,7886],{"className":1042,"code":7885,"language":1044,"meta":1045,"style":1045},"# Custom password reset views\nfrom django.contrib.auth.views import (\n    PasswordResetView, PasswordResetDoneView,\n    PasswordResetConfirmView, PasswordResetCompleteView\n)\nfrom django.contrib.auth.forms import PasswordResetForm, SetPasswordForm\nfrom django.core.mail import send_mail\nfrom django.template.loader import render_to_string\n\nclass CustomPasswordResetView(PasswordResetView):\n    \"\"\"Enhanced password reset view\"\"\"\n    \n    template_name = 'auth/password_reset.html'\n    email_template_name = 'auth/password_reset_email.html'\n    subject_template_name = 'auth/password_reset_subject.txt'\n    success_url = reverse_lazy('password_reset_done')\n    \n    def form_valid(self, form):\n        \"\"\"Handle password reset request\"\"\"\n        \n        email = form.cleaned_data['email']\n        \n        # Rate limiting\n        from django.core.cache import cache\n        \n        cache_key = f\"password_reset_{email}\"\n        recent_requests = cache.get(cache_key, 0)\n        \n        if recent_requests >= 3:\n            messages.error(\n                self.request,\n                \"Too many password reset requests. Please try again later.\"\n            )\n            return redirect('password_reset')\n        \n        # Increment request count\n        cache.set(cache_key, recent_requests + 1, 3600)  # 1 hour\n        \n        # Log password reset request\n        import logging\n        logger = logging.getLogger('auth')\n        logger.info(f\"Password reset requested for email: {email}\")\n        \n        return super().form_valid(form)\n    \n    def send_mail(self, subject_template_name, email_template_name,\n                  context, from_email, to_email, html_email_template_name=None):\n        \"\"\"Send password reset email with enhanced template\"\"\"\n        \n        # Add additional context\n        context.update({\n            'site_name': 'Your Site Name',\n            'support_email': 'support@yoursite.com',\n            'security_tips': [\n                'Never share your password with anyone',\n                'Use a unique password for this account',\n                'Consider enabling two-factor authentication'\n            ]\n        })\n        \n        return super().send_mail(\n            subject_template_name, email_template_name, context,\n            from_email, to_email, html_email_template_name\n        )\n\nclass CustomPasswordResetConfirmView(PasswordResetConfirmView):\n    \"\"\"Enhanced password reset confirmation view\"\"\"\n    \n    template_name = 'auth/password_reset_confirm.html'\n    success_url = reverse_lazy('password_reset_complete')\n    \n    def form_valid(self, form):\n        \"\"\"Handle successful password reset\"\"\"\n        \n        response = super().form_valid(form)\n        \n        user = form.user\n        \n        # Log successful password reset\n        import logging\n        logger = logging.getLogger('auth')\n        logger.info(f\"Password reset completed for user: {user.username}\")\n        \n        # Invalidate all user sessions\n        from django.contrib.sessions.models import Session\n        \n        for session in Session.objects.all():\n            try:\n                session_data = session.get_decoded()\n                if session_data.get('_auth_user_id') == str(user.id):\n                    session.delete()\n            except:\n                continue\n        \n        # Send confirmation email\n        send_mail(\n            'Password Reset Successful',\n            f'Your password has been reset successfully for {user.username}.',\n            settings.DEFAULT_FROM_EMAIL,\n            [user.email],\n            fail_silently=True,\n        )\n        \n        messages.success(\n            self.request,\n            'Your password has been reset successfully. '\n            'Please log in with your new password.'\n        )\n        \n        return response\n\n# Two-factor authentication integration\nclass TwoFactorLoginView(LoginView):\n    \"\"\"Login view with two-factor authentication\"\"\"\n    \n    template_name = 'auth/2fa_login.html'\n    \n    def form_valid(self, form):\n        \"\"\"Handle login with 2FA check\"\"\"\n        \n        user = form.get_user()\n        \n        # Check if user has 2FA enabled\n        if hasattr(user, 'profile') and user.profile.two_factor_enabled:\n            # Store user in session temporarily\n            self.request.session['2fa_user_id'] = user.id\n            self.request.session['2fa_timestamp'] = timezone.now().isoformat()\n            \n            # Redirect to 2FA verification\n            return redirect('2fa_verify')\n        \n        # Normal login process\n        return super().form_valid(form)\n\ndef two_factor_verify_view(request):\n    \"\"\"Verify two-factor authentication token\"\"\"\n    \n    if request.method == 'POST':\n        token = request.POST.get('token')\n        user_id = request.session.get('2fa_user_id')\n        \n        if not user_id:\n            messages.error(request, 'Invalid session. Please log in again.')\n            return redirect('login')\n        \n        try:\n            user = User.objects.get(id=user_id)\n            \n            # Verify TOTP token (example with pyotp)\n            import pyotp\n            \n            if hasattr(user, 'profile') and user.profile.totp_secret:\n                totp = pyotp.TOTP(user.profile.totp_secret)\n                \n                if totp.verify(token, valid_window=1):\n                    # Complete login\n                    login(request, user)\n                    \n                    # Clean up session\n                    del request.session['2fa_user_id']\n                    del request.session['2fa_timestamp']\n                    \n                    messages.success(request, 'Login successful!')\n                    return redirect('dashboard')\n                else:\n                    messages.error(request, 'Invalid verification code.')\n            else:\n                messages.error(request, 'Two-factor authentication not properly configured.')\n        \n        except User.DoesNotExist:\n            messages.error(request, 'Invalid session. Please log in again.')\n            return redirect('login')\n    \n    return render(request, 'auth/2fa_verify.html')\n",[1047,7887,7888,7893,7915,7925,7935,7939,7967,7987,8007,8011,8024,8033,8037,8050,8064,8078,8096,8100,8116,8125,8129,8153,8157,8162,8180,8184,8203,8226,8230,8244,8254,8264,8273,8277,8293,8297,8302,8334,8338,8343,8349,8371,8396,8400,8416,8420,8443,8470,8479,8483,8488,8498,8516,8536,8549,8560,8571,8579,8583,8587,8591,8604,8619,8633,8637,8641,8654,8663,8667,8680,8698,8702,8718,8727,8731,8749,8753,8765,8769,8774,8780,8802,8831,8835,8840,8862,8866,8886,8892,8906,8940,8951,8957,8961,8965,8970,8977,8988,9009,9021,9035,9047,9051,9055,9065,9075,9084,9093,9097,9101,9107,9111,9116,9129,9138,9142,9155,9159,9175,9184,9188,9202,9206,9211,9247,9252,9284,9321,9325,9330,9347,9351,9356,9372,9376,9389,9398,9402,9422,9450,9477,9481,9492,9515,9531,9535,9542,9570,9574,9579,9586,9590,9625,9654,9658,9686,9691,9706,9711,9716,9737,9757,9761,9785,9802,9809,9832,9838,9861,9865,9879,9901,9917,9921],{"__ignoreMap":1045},[1050,7889,7890],{"class":1052,"line":1053},[1050,7891,7892],{"class":1056},"# Custom password reset views\n",[1050,7894,7895,7897,7899,7901,7903,7905,7907,7909,7911,7913],{"class":1052,"line":1060},[1050,7896,1064],{"class":1063},[1050,7898,1068],{"class":1067},[1050,7900,1072],{"class":1071},[1050,7902,1075],{"class":1067},[1050,7904,1072],{"class":1071},[1050,7906,1080],{"class":1067},[1050,7908,1072],{"class":1071},[1050,7910,1085],{"class":1067},[1050,7912,1088],{"class":1063},[1050,7914,1091],{"class":1071},[1050,7916,7917,7919,7921,7923],{"class":1052,"line":1094},[1050,7918,1122],{"class":1067},[1050,7920,1100],{"class":1071},[1050,7922,1127],{"class":1067},[1050,7924,1116],{"class":1071},[1050,7926,7927,7930,7932],{"class":1052,"line":1119},[1050,7928,7929],{"class":1067},"    PasswordResetConfirmView",[1050,7931,1100],{"class":1071},[1050,7933,7934],{"class":1067}," PasswordResetCompleteView\n",[1050,7936,7937],{"class":1052,"line":1137},[1050,7938,1146],{"class":1071},[1050,7940,7941,7943,7945,7947,7949,7951,7953,7955,7957,7959,7962,7964],{"class":1052,"line":1143},[1050,7942,1064],{"class":1063},[1050,7944,1068],{"class":1067},[1050,7946,1072],{"class":1071},[1050,7948,1075],{"class":1067},[1050,7950,1072],{"class":1071},[1050,7952,1080],{"class":1067},[1050,7954,1072],{"class":1071},[1050,7956,2678],{"class":1067},[1050,7958,1088],{"class":1063},[1050,7960,7961],{"class":1067}," PasswordResetForm",[1050,7963,1100],{"class":1071},[1050,7965,7966],{"class":1067}," SetPasswordForm\n",[1050,7968,7969,7971,7973,7975,7977,7979,7982,7984],{"class":1052,"line":1149},[1050,7970,1064],{"class":1063},[1050,7972,1068],{"class":1067},[1050,7974,1072],{"class":1071},[1050,7976,4100],{"class":1067},[1050,7978,1072],{"class":1071},[1050,7980,7981],{"class":1067},"mail ",[1050,7983,1088],{"class":1063},[1050,7985,7986],{"class":1067}," send_mail\n",[1050,7988,7989,7991,7993,7995,7997,7999,8002,8004],{"class":1052,"line":1171},[1050,7990,1064],{"class":1063},[1050,7992,1068],{"class":1067},[1050,7994,1072],{"class":1071},[1050,7996,1381],{"class":1067},[1050,7998,1072],{"class":1071},[1050,8000,8001],{"class":1067},"loader ",[1050,8003,1088],{"class":1063},[1050,8005,8006],{"class":1067}," render_to_string\n",[1050,8008,8009],{"class":1052,"line":1193},[1050,8010,1245],{"emptyLinePlaceholder":1244},[1050,8012,8013,8015,8018,8020,8022],{"class":1052,"line":1224},[1050,8014,1252],{"class":1251},[1050,8016,8017],{"class":1255}," CustomPasswordResetView",[1050,8019,2173],{"class":1071},[1050,8021,1728],{"class":2859},[1050,8023,2862],{"class":1071},[1050,8025,8026,8028,8031],{"class":1052,"line":1241},[1050,8027,1266],{"class":1265},[1050,8029,8030],{"class":1269},"Enhanced password reset view",[1050,8032,1273],{"class":1265},[1050,8034,8035],{"class":1052,"line":1248},[1050,8036,1279],{"class":1067},[1050,8038,8039,8041,8043,8045,8048],{"class":1052,"line":1262},[1050,8040,2880],{"class":1067},[1050,8042,1328],{"class":1071},[1050,8044,1366],{"class":1337},[1050,8046,8047],{"class":1341},"auth/password_reset.html",[1050,8049,1435],{"class":1337},[1050,8051,8052,8055,8057,8059,8062],{"class":1052,"line":1276},[1050,8053,8054],{"class":1067},"    email_template_name ",[1050,8056,1328],{"class":1071},[1050,8058,1366],{"class":1337},[1050,8060,8061],{"class":1341},"auth/password_reset_email.html",[1050,8063,1435],{"class":1337},[1050,8065,8066,8069,8071,8073,8076],{"class":1052,"line":1282},[1050,8067,8068],{"class":1067},"    subject_template_name ",[1050,8070,1328],{"class":1071},[1050,8072,1366],{"class":1337},[1050,8074,8075],{"class":1341},"auth/password_reset_subject.txt",[1050,8077,1435],{"class":1337},[1050,8079,8080,8082,8084,8086,8088,8090,8092,8094],{"class":1052,"line":1292},[1050,8081,6740],{"class":1067},[1050,8083,1328],{"class":1071},[1050,8085,3199],{"class":2169},[1050,8087,2173],{"class":1071},[1050,8089,1345],{"class":1337},[1050,8091,1790],{"class":1341},[1050,8093,1345],{"class":1337},[1050,8095,1146],{"class":1071},[1050,8097,8098],{"class":1052,"line":1305},[1050,8099,1279],{"class":1067},[1050,8101,8102,8104,8106,8108,8110,8112,8114],{"class":1052,"line":1316},[1050,8103,1295],{"class":1251},[1050,8105,3331],{"class":1298},[1050,8107,2173],{"class":1071},[1050,8109,2966],{"class":2965},[1050,8111,1100],{"class":1071},[1050,8113,3340],{"class":2971},[1050,8115,2862],{"class":1071},[1050,8117,8118,8120,8123],{"class":1052,"line":1322},[1050,8119,1308],{"class":1265},[1050,8121,8122],{"class":1269},"Handle password reset request",[1050,8124,1273],{"class":1265},[1050,8126,8127],{"class":1052,"line":1334},[1050,8128,1319],{"class":1067},[1050,8130,8131,8134,8136,8138,8140,8142,8144,8146,8149,8151],{"class":1052,"line":1353},[1050,8132,8133],{"class":1067},"        email ",[1050,8135,1328],{"class":1071},[1050,8137,3340],{"class":1067},[1050,8139,1072],{"class":1071},[1050,8141,3955],{"class":3074},[1050,8143,3535],{"class":1071},[1050,8145,1345],{"class":1337},[1050,8147,8148],{"class":1341},"email",[1050,8150,1345],{"class":1337},[1050,8152,3626],{"class":1071},[1050,8154,8155],{"class":1052,"line":1376},[1050,8156,1319],{"class":1067},[1050,8158,8159],{"class":1052,"line":1397},[1050,8160,8161],{"class":1056},"        # Rate limiting\n",[1050,8163,8164,8166,8168,8170,8172,8174,8176,8178],{"class":1052,"line":1418},[1050,8165,4093],{"class":1063},[1050,8167,1068],{"class":1067},[1050,8169,1072],{"class":1071},[1050,8171,4100],{"class":1067},[1050,8173,1072],{"class":1071},[1050,8175,2790],{"class":1067},[1050,8177,1088],{"class":1063},[1050,8179,4109],{"class":1067},[1050,8181,8182],{"class":1052,"line":1438},[1050,8183,1319],{"class":1067},[1050,8185,8186,8188,8190,8192,8195,8197,8199,8201],{"class":1052,"line":1444},[1050,8187,4149],{"class":1067},[1050,8189,1328],{"class":1071},[1050,8191,4154],{"class":1251},[1050,8193,8194],{"class":1341},"\"password_reset_",[1050,8196,3460],{"class":3459},[1050,8198,8148],{"class":1067},[1050,8200,3471],{"class":3459},[1050,8202,4075],{"class":1341},[1050,8204,8205,8208,8210,8212,8214,8216,8218,8220,8222,8224],{"class":1052,"line":1458},[1050,8206,8207],{"class":1067},"        recent_requests ",[1050,8209,1328],{"class":1071},[1050,8211,4182],{"class":1067},[1050,8213,1072],{"class":1071},[1050,8215,3085],{"class":2169},[1050,8217,2173],{"class":1071},[1050,8219,4191],{"class":2169},[1050,8221,1100],{"class":1071},[1050,8223,4196],{"class":3622},[1050,8225,1146],{"class":1071},[1050,8227,8228],{"class":1052,"line":1478},[1050,8229,1319],{"class":1067},[1050,8231,8232,8234,8237,8239,8242],{"class":1052,"line":1498},[1050,8233,3134],{"class":1063},[1050,8235,8236],{"class":1067}," recent_requests ",[1050,8238,4250],{"class":2977},[1050,8240,8241],{"class":3622}," 3",[1050,8243,1259],{"class":1071},[1050,8245,8246,8248,8250,8252],{"class":1052,"line":1518},[1050,8247,4261],{"class":1067},[1050,8249,1072],{"class":1071},[1050,8251,4266],{"class":2169},[1050,8253,3762],{"class":1071},[1050,8255,8256,8258,8260,8262],{"class":1052,"line":1533},[1050,8257,4274],{"class":3068},[1050,8259,1072],{"class":1071},[1050,8261,3009],{"class":3074},[1050,8263,1116],{"class":1071},[1050,8265,8266,8268,8271],{"class":1052,"line":1538},[1050,8267,4286],{"class":1337},[1050,8269,8270],{"class":1341},"Too many password reset requests. Please try again later.",[1050,8272,4075],{"class":1337},[1050,8274,8275],{"class":1052,"line":1552},[1050,8276,4297],{"class":1071},[1050,8278,8279,8281,8283,8285,8287,8289,8291],{"class":1052,"line":1572},[1050,8280,3144],{"class":1063},[1050,8282,4949],{"class":2169},[1050,8284,2173],{"class":1071},[1050,8286,1345],{"class":1337},[1050,8288,2470],{"class":1341},[1050,8290,1345],{"class":1337},[1050,8292,1146],{"class":1071},[1050,8294,8295],{"class":1052,"line":1592},[1050,8296,1319],{"class":1067},[1050,8298,8299],{"class":1052,"line":1612},[1050,8300,8301],{"class":1056},"        # Increment request count\n",[1050,8303,8304,8306,8308,8310,8312,8314,8316,8318,8321,8324,8326,8329,8331],{"class":1052,"line":1630},[1050,8305,4210],{"class":1067},[1050,8307,1072],{"class":1071},[1050,8309,4215],{"class":2169},[1050,8311,2173],{"class":1071},[1050,8313,4191],{"class":2169},[1050,8315,1100],{"class":1071},[1050,8317,8236],{"class":2169},[1050,8319,8320],{"class":2977},"+",[1050,8322,8323],{"class":3622}," 1",[1050,8325,1100],{"class":1071},[1050,8327,8328],{"class":3622}," 3600",[1050,8330,3097],{"class":1071},[1050,8332,8333],{"class":1056},"  # 1 hour\n",[1050,8335,8336],{"class":1052,"line":1635},[1050,8337,1319],{"class":1067},[1050,8339,8340],{"class":1052,"line":1649},[1050,8341,8342],{"class":1056},"        # Log password reset request\n",[1050,8344,8345,8347],{"class":1052,"line":1669},[1050,8346,3410],{"class":1063},[1050,8348,3413],{"class":1067},[1050,8350,8351,8353,8355,8357,8359,8361,8363,8365,8367,8369],{"class":1052,"line":1689},[1050,8352,3418],{"class":1067},[1050,8354,1328],{"class":1071},[1050,8356,3423],{"class":1067},[1050,8358,1072],{"class":1071},[1050,8360,3428],{"class":2169},[1050,8362,2173],{"class":1071},[1050,8364,1345],{"class":1337},[1050,8366,1080],{"class":1341},[1050,8368,1345],{"class":1337},[1050,8370,1146],{"class":1071},[1050,8372,8373,8375,8377,8379,8381,8383,8386,8388,8390,8392,8394],{"class":1052,"line":1705},[1050,8374,3443],{"class":1067},[1050,8376,1072],{"class":1071},[1050,8378,3448],{"class":2169},[1050,8380,2173],{"class":1071},[1050,8382,3453],{"class":1251},[1050,8384,8385],{"class":1341},"\"Password reset requested for email: ",[1050,8387,3460],{"class":3459},[1050,8389,8148],{"class":2169},[1050,8391,3471],{"class":3459},[1050,8393,3507],{"class":1341},[1050,8395,1146],{"class":1071},[1050,8397,8398],{"class":1052,"line":1718},[1050,8399,1319],{"class":1067},[1050,8401,8402,8404,8406,8408,8410,8412,8414],{"class":1052,"line":1723},[1050,8403,2106],{"class":1063},[1050,8405,2998],{"class":1288},[1050,8407,3001],{"class":1071},[1050,8409,3369],{"class":2169},[1050,8411,2173],{"class":1071},[1050,8413,3374],{"class":2169},[1050,8415,1146],{"class":1071},[1050,8417,8418],{"class":1052,"line":1737},[1050,8419,1279],{"class":1067},[1050,8421,8422,8424,8427,8429,8431,8433,8436,8438,8441],{"class":1052,"line":1757},[1050,8423,1295],{"class":1251},[1050,8425,8426],{"class":1298}," send_mail",[1050,8428,2173],{"class":1071},[1050,8430,2966],{"class":2965},[1050,8432,1100],{"class":1071},[1050,8434,8435],{"class":2971}," subject_template_name",[1050,8437,1100],{"class":1071},[1050,8439,8440],{"class":2971}," email_template_name",[1050,8442,1116],{"class":1071},[1050,8444,8445,8448,8450,8453,8455,8458,8460,8463,8465,8468],{"class":1052,"line":1777},[1050,8446,8447],{"class":2971},"                  context",[1050,8449,1100],{"class":1071},[1050,8451,8452],{"class":2971}," from_email",[1050,8454,1100],{"class":1071},[1050,8456,8457],{"class":2971}," to_email",[1050,8459,1100],{"class":1071},[1050,8461,8462],{"class":2971}," html_email_template_name",[1050,8464,1328],{"class":2977},[1050,8466,8467],{"class":1529},"None",[1050,8469,2862],{"class":1071},[1050,8471,8472,8474,8477],{"class":1052,"line":1797},[1050,8473,1308],{"class":1265},[1050,8475,8476],{"class":1269},"Send password reset email with enhanced template",[1050,8478,1273],{"class":1265},[1050,8480,8481],{"class":1052,"line":1815},[1050,8482,1319],{"class":1067},[1050,8484,8485],{"class":1052,"line":1820},[1050,8486,8487],{"class":1056},"        # Add additional context\n",[1050,8489,8490,8492,8494,8496],{"class":1052,"line":1834},[1050,8491,4384],{"class":1067},[1050,8493,1072],{"class":1071},[1050,8495,4389],{"class":2169},[1050,8497,4392],{"class":1071},[1050,8499,8500,8502,8504,8506,8508,8510,8512,8514],{"class":1052,"line":1854},[1050,8501,1338],{"class":1337},[1050,8503,4400],{"class":1341},[1050,8505,1345],{"class":1337},[1050,8507,1348],{"class":1071},[1050,8509,1366],{"class":1337},[1050,8511,4409],{"class":1341},[1050,8513,1345],{"class":1337},[1050,8515,1116],{"class":1071},[1050,8517,8518,8520,8523,8525,8527,8529,8532,8534],{"class":1052,"line":1874},[1050,8519,1338],{"class":1337},[1050,8521,8522],{"class":1341},"support_email",[1050,8524,1345],{"class":1337},[1050,8526,1348],{"class":1071},[1050,8528,1366],{"class":1337},[1050,8530,8531],{"class":1341},"support@yoursite.com",[1050,8533,1345],{"class":1337},[1050,8535,1116],{"class":1071},[1050,8537,8538,8540,8543,8545,8547],{"class":1052,"line":1889},[1050,8539,1338],{"class":1337},[1050,8541,8542],{"class":1341},"security_tips",[1050,8544,1345],{"class":1337},[1050,8546,1348],{"class":1071},[1050,8548,2163],{"class":1071},[1050,8550,8551,8553,8556,8558],{"class":1052,"line":1902},[1050,8552,1356],{"class":1337},[1050,8554,8555],{"class":1341},"Never share your password with anyone",[1050,8557,1345],{"class":1337},[1050,8559,1116],{"class":1071},[1050,8561,8562,8564,8567,8569],{"class":1052,"line":1907},[1050,8563,1356],{"class":1337},[1050,8565,8566],{"class":1341},"Use a unique password for this account",[1050,8568,1345],{"class":1337},[1050,8570,1116],{"class":1071},[1050,8572,8573,8575,8577],{"class":1052,"line":1921},[1050,8574,1356],{"class":1337},[1050,8576,7583],{"class":1341},[1050,8578,1435],{"class":1337},[1050,8580,8581],{"class":1052,"line":1941},[1050,8582,5879],{"class":1071},[1050,8584,8585],{"class":1052,"line":1961},[1050,8586,4468],{"class":1071},[1050,8588,8589],{"class":1052,"line":1981},[1050,8590,1319],{"class":1067},[1050,8592,8593,8595,8597,8599,8602],{"class":1052,"line":1999},[1050,8594,2106],{"class":1063},[1050,8596,2998],{"class":1288},[1050,8598,3001],{"class":1071},[1050,8600,8601],{"class":2169},"send_mail",[1050,8603,3762],{"class":1071},[1050,8605,8606,8609,8611,8613,8615,8617],{"class":1052,"line":2004},[1050,8607,8608],{"class":2169},"            subject_template_name",[1050,8610,1100],{"class":1071},[1050,8612,8440],{"class":2169},[1050,8614,1100],{"class":1071},[1050,8616,5513],{"class":2169},[1050,8618,1116],{"class":1071},[1050,8620,8621,8624,8626,8628,8630],{"class":1052,"line":2018},[1050,8622,8623],{"class":2169},"            from_email",[1050,8625,1100],{"class":1071},[1050,8627,8457],{"class":2169},[1050,8629,1100],{"class":1071},[1050,8631,8632],{"class":2169}," html_email_template_name\n",[1050,8634,8635],{"class":1052,"line":2038},[1050,8636,3813],{"class":1071},[1050,8638,8639],{"class":1052,"line":2058},[1050,8640,1245],{"emptyLinePlaceholder":1244},[1050,8642,8643,8645,8648,8650,8652],{"class":1052,"line":2073},[1050,8644,1252],{"class":1251},[1050,8646,8647],{"class":1255}," CustomPasswordResetConfirmView",[1050,8649,2173],{"class":1071},[1050,8651,1912],{"class":2859},[1050,8653,2862],{"class":1071},[1050,8655,8656,8658,8661],{"class":1052,"line":2086},[1050,8657,1266],{"class":1265},[1050,8659,8660],{"class":1269},"Enhanced password reset confirmation view",[1050,8662,1273],{"class":1265},[1050,8664,8665],{"class":1052,"line":2092},[1050,8666,1279],{"class":1067},[1050,8668,8669,8671,8673,8675,8678],{"class":1052,"line":2098},[1050,8670,2880],{"class":1067},[1050,8672,1328],{"class":1071},[1050,8674,1366],{"class":1337},[1050,8676,8677],{"class":1341},"auth/password_reset_confirm.html",[1050,8679,1435],{"class":1337},[1050,8681,8682,8684,8686,8688,8690,8692,8694,8696],{"class":1052,"line":2103},[1050,8683,6740],{"class":1067},[1050,8685,1328],{"class":1071},[1050,8687,3199],{"class":2169},[1050,8689,2173],{"class":1071},[1050,8691,1345],{"class":1337},[1050,8693,1974],{"class":1341},[1050,8695,1345],{"class":1337},[1050,8697,1146],{"class":1071},[1050,8699,8700],{"class":1052,"line":2112},[1050,8701,1279],{"class":1067},[1050,8703,8704,8706,8708,8710,8712,8714,8716],{"class":1052,"line":2117},[1050,8705,1295],{"class":1251},[1050,8707,3331],{"class":1298},[1050,8709,2173],{"class":1071},[1050,8711,2966],{"class":2965},[1050,8713,1100],{"class":1071},[1050,8715,3340],{"class":2971},[1050,8717,2862],{"class":1071},[1050,8719,8720,8722,8725],{"class":1052,"line":2124},[1050,8721,1308],{"class":1265},[1050,8723,8724],{"class":1269},"Handle successful password reset",[1050,8726,1273],{"class":1265},[1050,8728,8729],{"class":1052,"line":2134},[1050,8730,1319],{"class":1067},[1050,8732,8733,8735,8737,8739,8741,8743,8745,8747],{"class":1052,"line":2144},[1050,8734,3360],{"class":1067},[1050,8736,1328],{"class":1071},[1050,8738,2998],{"class":1288},[1050,8740,3001],{"class":1071},[1050,8742,3369],{"class":2169},[1050,8744,2173],{"class":1071},[1050,8746,3374],{"class":2169},[1050,8748,1146],{"class":1071},[1050,8750,8751],{"class":1052,"line":2149},[1050,8752,1319],{"class":1067},[1050,8754,8755,8757,8759,8761,8763],{"class":1052,"line":2155},[1050,8756,3161],{"class":1067},[1050,8758,1328],{"class":1071},[1050,8760,3340],{"class":1067},[1050,8762,1072],{"class":1071},[1050,8764,3174],{"class":3074},[1050,8766,8767],{"class":1052,"line":2166},[1050,8768,1319],{"class":1067},[1050,8770,8771],{"class":1052,"line":2200},[1050,8772,8773],{"class":1056},"        # Log successful password reset\n",[1050,8775,8776,8778],{"class":1052,"line":2206},[1050,8777,3410],{"class":1063},[1050,8779,3413],{"class":1067},[1050,8781,8782,8784,8786,8788,8790,8792,8794,8796,8798,8800],{"class":1052,"line":2211},[1050,8783,3418],{"class":1067},[1050,8785,1328],{"class":1071},[1050,8787,3423],{"class":1067},[1050,8789,1072],{"class":1071},[1050,8791,3428],{"class":2169},[1050,8793,2173],{"class":1071},[1050,8795,1345],{"class":1337},[1050,8797,1080],{"class":1341},[1050,8799,1345],{"class":1337},[1050,8801,1146],{"class":1071},[1050,8803,8804,8806,8808,8810,8812,8814,8817,8819,8821,8823,8825,8827,8829],{"class":1052,"line":2217},[1050,8805,3443],{"class":1067},[1050,8807,1072],{"class":1071},[1050,8809,3448],{"class":2169},[1050,8811,2173],{"class":1071},[1050,8813,3453],{"class":1251},[1050,8815,8816],{"class":1341},"\"Password reset completed for user: ",[1050,8818,3460],{"class":3459},[1050,8820,3463],{"class":2169},[1050,8822,1072],{"class":1071},[1050,8824,3468],{"class":3074},[1050,8826,3471],{"class":3459},[1050,8828,3507],{"class":1341},[1050,8830,1146],{"class":1071},[1050,8832,8833],{"class":1052,"line":2223},[1050,8834,1319],{"class":1067},[1050,8836,8837],{"class":1052,"line":2229},[1050,8838,8839],{"class":1056},"        # Invalidate all user sessions\n",[1050,8841,8842,8844,8846,8848,8850,8852,8854,8856,8858,8860],{"class":1052,"line":2235},[1050,8843,4093],{"class":1063},[1050,8845,1068],{"class":1067},[1050,8847,1072],{"class":1071},[1050,8849,1075],{"class":1067},[1050,8851,1072],{"class":1071},[1050,8853,6985],{"class":1067},[1050,8855,1072],{"class":1071},[1050,8857,6990],{"class":1067},[1050,8859,1088],{"class":1063},[1050,8861,6995],{"class":1067},[1050,8863,8864],{"class":1052,"line":2241},[1050,8865,1319],{"class":1067},[1050,8867,8868,8870,8872,8874,8876,8878,8880,8882,8884],{"class":1052,"line":2247},[1050,8869,7045],{"class":1063},[1050,8871,7048],{"class":1067},[1050,8873,5894],{"class":1063},[1050,8875,7053],{"class":1067},[1050,8877,1072],{"class":1071},[1050,8879,7058],{"class":3074},[1050,8881,1072],{"class":1071},[1050,8883,7063],{"class":2169},[1050,8885,1302],{"class":1071},[1050,8887,8888,8890],{"class":1052,"line":2253},[1050,8889,7070],{"class":1063},[1050,8891,1259],{"class":1071},[1050,8893,8894,8896,8898,8900,8902,8904],{"class":1052,"line":2259},[1050,8895,7077],{"class":1067},[1050,8897,1328],{"class":1071},[1050,8899,7082],{"class":1067},[1050,8901,1072],{"class":1071},[1050,8903,7087],{"class":2169},[1050,8905,3396],{"class":1071},[1050,8907,8908,8910,8912,8914,8916,8918,8920,8922,8924,8926,8928,8930,8932,8934,8936,8938],{"class":1052,"line":2265},[1050,8909,5192],{"class":1063},[1050,8911,7096],{"class":1067},[1050,8913,1072],{"class":1071},[1050,8915,3085],{"class":2169},[1050,8917,2173],{"class":1071},[1050,8919,1345],{"class":1337},[1050,8921,7107],{"class":1341},[1050,8923,1345],{"class":1337},[1050,8925,3097],{"class":1071},[1050,8927,4581],{"class":2977},[1050,8929,7116],{"class":1288},[1050,8931,2173],{"class":1071},[1050,8933,3463],{"class":2169},[1050,8935,1072],{"class":1071},[1050,8937,7125],{"class":3074},[1050,8939,2862],{"class":1071},[1050,8941,8942,8945,8947,8949],{"class":1052,"line":2270},[1050,8943,8944],{"class":1067},"                    session",[1050,8946,1072],{"class":1071},[1050,8948,7207],{"class":2169},[1050,8950,3396],{"class":1071},[1050,8952,8953,8955],{"class":1052,"line":2276},[1050,8954,7168],{"class":1063},[1050,8956,1259],{"class":1071},[1050,8958,8959],{"class":1052,"line":2286},[1050,8960,7175],{"class":1063},[1050,8962,8963],{"class":1052,"line":2329},[1050,8964,1319],{"class":1067},[1050,8966,8967],{"class":1052,"line":2366},[1050,8968,8969],{"class":1056},"        # Send confirmation email\n",[1050,8971,8972,8975],{"class":1052,"line":2403},[1050,8973,8974],{"class":2169},"        send_mail",[1050,8976,3762],{"class":1071},[1050,8978,8979,8981,8984,8986],{"class":1052,"line":2439},[1050,8980,1338],{"class":1337},[1050,8982,8983],{"class":1341},"Password Reset Successful",[1050,8985,1345],{"class":1337},[1050,8987,1116],{"class":1071},[1050,8989,8990,8992,8995,8997,8999,9001,9003,9005,9007],{"class":1052,"line":2477},[1050,8991,3780],{"class":1251},[1050,8993,8994],{"class":1341},"'Your password has been reset successfully for ",[1050,8996,3460],{"class":3459},[1050,8998,3463],{"class":2169},[1050,9000,1072],{"class":1071},[1050,9002,3468],{"class":3074},[1050,9004,3471],{"class":3459},[1050,9006,6583],{"class":1341},[1050,9008,1116],{"class":1071},[1050,9010,9011,9014,9016,9019],{"class":1052,"line":2513},[1050,9012,9013],{"class":2169},"            settings",[1050,9015,1072],{"class":1071},[1050,9017,9018],{"class":3079},"DEFAULT_FROM_EMAIL",[1050,9020,1116],{"class":1071},[1050,9022,9023,9026,9028,9030,9032],{"class":1052,"line":2550},[1050,9024,9025],{"class":1071},"            [",[1050,9027,3463],{"class":2169},[1050,9029,1072],{"class":1071},[1050,9031,8148],{"class":3074},[1050,9033,9034],{"class":1071},"],\n",[1050,9036,9037,9040,9042,9045],{"class":1052,"line":2587},[1050,9038,9039],{"class":2313},"            fail_silently",[1050,9041,1328],{"class":1071},[1050,9043,9044],{"class":1529},"True",[1050,9046,1116],{"class":1071},[1050,9048,9049],{"class":1052,"line":2592},[1050,9050,3813],{"class":1071},[1050,9052,9053],{"class":1052,"line":2597},[1050,9054,1319],{"class":1067},[1050,9056,9057,9059,9061,9063],{"class":1052,"line":4169},[1050,9058,3754],{"class":1067},[1050,9060,1072],{"class":1071},[1050,9062,3759],{"class":2169},[1050,9064,3762],{"class":1071},[1050,9066,9067,9069,9071,9073],{"class":1052,"line":4174},[1050,9068,3686],{"class":3068},[1050,9070,1072],{"class":1071},[1050,9072,3009],{"class":3074},[1050,9074,1116],{"class":1071},[1050,9076,9077,9079,9082],{"class":1052,"line":4207},[1050,9078,1338],{"class":1337},[1050,9080,9081],{"class":1341},"Your password has been reset successfully. ",[1050,9083,1435],{"class":1337},[1050,9085,9086,9088,9091],{"class":1052,"line":4237},[1050,9087,1338],{"class":1337},[1050,9089,9090],{"class":1341},"Please log in with your new password.",[1050,9092,1435],{"class":1337},[1050,9094,9095],{"class":1052,"line":4242},[1050,9096,3813],{"class":1071},[1050,9098,9099],{"class":1052,"line":4258},[1050,9100,1319],{"class":1067},[1050,9102,9103,9105],{"class":1052,"line":4271},[1050,9104,2106],{"class":1063},[1050,9106,3879],{"class":1067},[1050,9108,9109],{"class":1052,"line":4283},[1050,9110,1245],{"emptyLinePlaceholder":1244},[1050,9112,9113],{"class":1052,"line":4294},[1050,9114,9115],{"class":1056},"# Two-factor authentication integration\n",[1050,9117,9118,9120,9123,9125,9127],{"class":1052,"line":4300},[1050,9119,1252],{"class":1251},[1050,9121,9122],{"class":1255}," TwoFactorLoginView",[1050,9124,2173],{"class":1071},[1050,9126,1342],{"class":2859},[1050,9128,2862],{"class":1071},[1050,9130,9131,9133,9136],{"class":1052,"line":4305},[1050,9132,1266],{"class":1265},[1050,9134,9135],{"class":1269},"Login view with two-factor authentication",[1050,9137,1273],{"class":1265},[1050,9139,9140],{"class":1052,"line":4312},[1050,9141,1279],{"class":1067},[1050,9143,9144,9146,9148,9150,9153],{"class":1052,"line":4317},[1050,9145,2880],{"class":1067},[1050,9147,1328],{"class":1071},[1050,9149,1366],{"class":1337},[1050,9151,9152],{"class":1341},"auth/2fa_login.html",[1050,9154,1435],{"class":1337},[1050,9156,9157],{"class":1052,"line":4337},[1050,9158,1279],{"class":1067},[1050,9160,9161,9163,9165,9167,9169,9171,9173],{"class":1052,"line":4347},[1050,9162,1295],{"class":1251},[1050,9164,3331],{"class":1298},[1050,9166,2173],{"class":1071},[1050,9168,2966],{"class":2965},[1050,9170,1100],{"class":1071},[1050,9172,3340],{"class":2971},[1050,9174,2862],{"class":1071},[1050,9176,9177,9179,9182],{"class":1052,"line":4352},[1050,9178,1308],{"class":1265},[1050,9180,9181],{"class":1269},"Handle login with 2FA check",[1050,9183,1273],{"class":1265},[1050,9185,9186],{"class":1052,"line":4376},[1050,9187,1319],{"class":1067},[1050,9189,9190,9192,9194,9196,9198,9200],{"class":1052,"line":4381},[1050,9191,3161],{"class":1067},[1050,9193,1328],{"class":1071},[1050,9195,3340],{"class":1067},[1050,9197,1072],{"class":1071},[1050,9199,3393],{"class":2169},[1050,9201,3396],{"class":1071},[1050,9203,9204],{"class":1052,"line":4395},[1050,9205,1319],{"class":1067},[1050,9207,9208],{"class":1052,"line":4416},[1050,9209,9210],{"class":1056},"        # Check if user has 2FA enabled\n",[1050,9212,9213,9215,9217,9219,9221,9223,9225,9227,9229,9231,9234,9236,9238,9240,9242,9245],{"class":1052,"line":4433},[1050,9214,3134],{"class":1063},[1050,9216,6908],{"class":6907},[1050,9218,2173],{"class":1071},[1050,9220,3463],{"class":2169},[1050,9222,1100],{"class":1071},[1050,9224,1366],{"class":1337},[1050,9226,6919],{"class":1341},[1050,9228,1345],{"class":1337},[1050,9230,3097],{"class":1071},[1050,9232,9233],{"class":2977}," and",[1050,9235,3185],{"class":1067},[1050,9237,1072],{"class":1071},[1050,9239,6919],{"class":3074},[1050,9241,1072],{"class":1071},[1050,9243,9244],{"class":3074},"two_factor_enabled",[1050,9246,1259],{"class":1071},[1050,9248,9249],{"class":1052,"line":4449},[1050,9250,9251],{"class":1056},"            # Store user in session temporarily\n",[1050,9253,9254,9256,9258,9260,9262,9264,9266,9268,9271,9273,9275,9277,9279,9281],{"class":1052,"line":4465},[1050,9255,3686],{"class":3068},[1050,9257,1072],{"class":1071},[1050,9259,3009],{"class":3074},[1050,9261,1072],{"class":1071},[1050,9263,3532],{"class":3074},[1050,9265,3535],{"class":1071},[1050,9267,1345],{"class":1337},[1050,9269,9270],{"class":1341},"2fa_user_id",[1050,9272,1345],{"class":1337},[1050,9274,3545],{"class":1071},[1050,9276,3548],{"class":1071},[1050,9278,3185],{"class":1067},[1050,9280,1072],{"class":1071},[1050,9282,9283],{"class":3074},"id\n",[1050,9285,9286,9288,9290,9292,9294,9296,9298,9300,9303,9305,9307,9309,9311,9313,9315,9317,9319],{"class":1052,"line":4471},[1050,9287,3686],{"class":3068},[1050,9289,1072],{"class":1071},[1050,9291,3009],{"class":3074},[1050,9293,1072],{"class":1071},[1050,9295,3532],{"class":3074},[1050,9297,3535],{"class":1071},[1050,9299,1345],{"class":1337},[1050,9301,9302],{"class":1341},"2fa_timestamp",[1050,9304,1345],{"class":1337},[1050,9306,3545],{"class":1071},[1050,9308,3548],{"class":1071},[1050,9310,3551],{"class":1067},[1050,9312,1072],{"class":1071},[1050,9314,3556],{"class":2169},[1050,9316,3001],{"class":1071},[1050,9318,3561],{"class":2169},[1050,9320,3396],{"class":1071},[1050,9322,9323],{"class":1052,"line":4476},[1050,9324,4620],{"class":1067},[1050,9326,9327],{"class":1052,"line":4484},[1050,9328,9329],{"class":1056},"            # Redirect to 2FA verification\n",[1050,9331,9332,9334,9336,9338,9340,9343,9345],{"class":1052,"line":4489},[1050,9333,3144],{"class":1063},[1050,9335,4949],{"class":2169},[1050,9337,2173],{"class":1071},[1050,9339,1345],{"class":1337},[1050,9341,9342],{"class":1341},"2fa_verify",[1050,9344,1345],{"class":1337},[1050,9346,1146],{"class":1071},[1050,9348,9349],{"class":1052,"line":4503},[1050,9350,1319],{"class":1067},[1050,9352,9353],{"class":1052,"line":4513},[1050,9354,9355],{"class":1056},"        # Normal login process\n",[1050,9357,9358,9360,9362,9364,9366,9368,9370],{"class":1052,"line":4518},[1050,9359,2106],{"class":1063},[1050,9361,2998],{"class":1288},[1050,9363,3001],{"class":1071},[1050,9365,3369],{"class":2169},[1050,9367,2173],{"class":1071},[1050,9369,3374],{"class":2169},[1050,9371,1146],{"class":1071},[1050,9373,9374],{"class":1052,"line":4535},[1050,9375,1245],{"emptyLinePlaceholder":1244},[1050,9377,9378,9380,9383,9385,9387],{"class":1052,"line":4545},[1050,9379,4898],{"class":1251},[1050,9381,9382],{"class":1298}," two_factor_verify_view",[1050,9384,2173],{"class":1071},[1050,9386,3009],{"class":2971},[1050,9388,2862],{"class":1071},[1050,9390,9391,9393,9396],{"class":1052,"line":4550},[1050,9392,1266],{"class":1265},[1050,9394,9395],{"class":1269},"Verify two-factor authentication token",[1050,9397,1273],{"class":1265},[1050,9399,9400],{"class":1052,"line":4593},[1050,9401,1279],{"class":1067},[1050,9403,9404,9406,9408,9410,9412,9414,9416,9418,9420],{"class":1052,"line":4617},[1050,9405,4928],{"class":1063},[1050,9407,2972],{"class":1067},[1050,9409,1072],{"class":1071},[1050,9411,4977],{"class":3074},[1050,9413,4581],{"class":2977},[1050,9415,1366],{"class":1337},[1050,9417,3080],{"class":1341},[1050,9419,1345],{"class":1337},[1050,9421,1259],{"class":1071},[1050,9423,9424,9427,9429,9431,9433,9435,9437,9439,9441,9443,9446,9448],{"class":1052,"line":4623},[1050,9425,9426],{"class":1067},"        token ",[1050,9428,1328],{"class":1071},[1050,9430,2972],{"class":1067},[1050,9432,1072],{"class":1071},[1050,9434,3080],{"class":3079},[1050,9436,1072],{"class":1071},[1050,9438,3085],{"class":2169},[1050,9440,2173],{"class":1071},[1050,9442,1345],{"class":1337},[1050,9444,9445],{"class":1341},"token",[1050,9447,1345],{"class":1337},[1050,9449,1146],{"class":1071},[1050,9451,9452,9455,9457,9459,9461,9463,9465,9467,9469,9471,9473,9475],{"class":1052,"line":4633},[1050,9453,9454],{"class":1067},"        user_id ",[1050,9456,1328],{"class":1071},[1050,9458,2972],{"class":1067},[1050,9460,1072],{"class":1071},[1050,9462,3532],{"class":3074},[1050,9464,1072],{"class":1071},[1050,9466,3085],{"class":2169},[1050,9468,2173],{"class":1071},[1050,9470,1345],{"class":1337},[1050,9472,9270],{"class":1341},[1050,9474,1345],{"class":1337},[1050,9476,1146],{"class":1071},[1050,9478,9479],{"class":1052,"line":4648},[1050,9480,1319],{"class":1067},[1050,9482,9483,9485,9487,9490],{"class":1052,"line":4669},[1050,9484,3134],{"class":1063},[1050,9486,5133],{"class":2977},[1050,9488,9489],{"class":1067}," user_id",[1050,9491,1259],{"class":1071},[1050,9493,9494,9496,9498,9500,9502,9504,9506,9508,9511,9513],{"class":1052,"line":4690},[1050,9495,4261],{"class":1067},[1050,9497,1072],{"class":1071},[1050,9499,4266],{"class":2169},[1050,9501,2173],{"class":1071},[1050,9503,3009],{"class":2169},[1050,9505,1100],{"class":1071},[1050,9507,1366],{"class":1337},[1050,9509,9510],{"class":1341},"Invalid session. Please log in again.",[1050,9512,1345],{"class":1337},[1050,9514,1146],{"class":1071},[1050,9516,9517,9519,9521,9523,9525,9527,9529],{"class":1052,"line":4696},[1050,9518,3144],{"class":1063},[1050,9520,4949],{"class":2169},[1050,9522,2173],{"class":1071},[1050,9524,1345],{"class":1337},[1050,9526,2321],{"class":1341},[1050,9528,1345],{"class":1337},[1050,9530,1146],{"class":1071},[1050,9532,9533],{"class":1052,"line":4701},[1050,9534,1319],{"class":1067},[1050,9536,9537,9540],{"class":1052,"line":4718},[1050,9538,9539],{"class":1063},"        try",[1050,9541,1259],{"class":1071},[1050,9543,9544,9546,9548,9551,9553,9555,9557,9559,9561,9563,9565,9568],{"class":1052,"line":4723},[1050,9545,7716],{"class":1067},[1050,9547,1328],{"class":1071},[1050,9549,9550],{"class":1067}," User",[1050,9552,1072],{"class":1071},[1050,9554,7058],{"class":3074},[1050,9556,1072],{"class":1071},[1050,9558,3085],{"class":2169},[1050,9560,2173],{"class":1071},[1050,9562,7125],{"class":2313},[1050,9564,1328],{"class":1071},[1050,9566,9567],{"class":2169},"user_id",[1050,9569,1146],{"class":1071},[1050,9571,9572],{"class":1052,"line":4740},[1050,9573,4620],{"class":1067},[1050,9575,9576],{"class":1052,"line":4750},[1050,9577,9578],{"class":1056},"            # Verify TOTP token (example with pyotp)\n",[1050,9580,9581,9583],{"class":1052,"line":4755},[1050,9582,5702],{"class":1063},[1050,9584,9585],{"class":1067}," pyotp\n",[1050,9587,9588],{"class":1052,"line":4794},[1050,9589,4620],{"class":1067},[1050,9591,9592,9594,9596,9598,9600,9602,9604,9606,9608,9610,9612,9614,9616,9618,9620,9623],{"class":1052,"line":4803},[1050,9593,5143],{"class":1063},[1050,9595,6908],{"class":6907},[1050,9597,2173],{"class":1071},[1050,9599,3463],{"class":2169},[1050,9601,1100],{"class":1071},[1050,9603,1366],{"class":1337},[1050,9605,6919],{"class":1341},[1050,9607,1345],{"class":1337},[1050,9609,3097],{"class":1071},[1050,9611,9233],{"class":2977},[1050,9613,3185],{"class":1067},[1050,9615,1072],{"class":1071},[1050,9617,6919],{"class":3074},[1050,9619,1072],{"class":1071},[1050,9621,9622],{"class":3074},"totp_secret",[1050,9624,1259],{"class":1071},[1050,9626,9627,9630,9632,9635,9637,9640,9642,9644,9646,9648,9650,9652],{"class":1052,"line":4819},[1050,9628,9629],{"class":1067},"                totp ",[1050,9631,1328],{"class":1071},[1050,9633,9634],{"class":1067}," pyotp",[1050,9636,1072],{"class":1071},[1050,9638,9639],{"class":2169},"TOTP",[1050,9641,2173],{"class":1071},[1050,9643,3463],{"class":2169},[1050,9645,1072],{"class":1071},[1050,9647,6919],{"class":3074},[1050,9649,1072],{"class":1071},[1050,9651,9622],{"class":3074},[1050,9653,1146],{"class":1071},[1050,9655,9656],{"class":1052,"line":4839},[1050,9657,5180],{"class":1067},[1050,9659,9660,9662,9665,9667,9670,9672,9674,9676,9679,9681,9684],{"class":1052,"line":4857},[1050,9661,5192],{"class":1063},[1050,9663,9664],{"class":1067}," totp",[1050,9666,1072],{"class":1071},[1050,9668,9669],{"class":2169},"verify",[1050,9671,2173],{"class":1071},[1050,9673,9445],{"class":2169},[1050,9675,1100],{"class":1071},[1050,9677,9678],{"class":2313}," valid_window",[1050,9680,1328],{"class":1071},[1050,9682,9683],{"class":3622},"1",[1050,9685,2862],{"class":1071},[1050,9687,9688],{"class":1052,"line":4862},[1050,9689,9690],{"class":1056},"                    # Complete login\n",[1050,9692,9693,9696,9698,9700,9702,9704],{"class":1052,"line":4867},[1050,9694,9695],{"class":2169},"                    login",[1050,9697,2173],{"class":1071},[1050,9699,3009],{"class":2169},[1050,9701,1100],{"class":1071},[1050,9703,3185],{"class":2169},[1050,9705,1146],{"class":1071},[1050,9707,9708],{"class":1052,"line":4884},[1050,9709,9710],{"class":1067},"                    \n",[1050,9712,9713],{"class":1052,"line":4889},[1050,9714,9715],{"class":1056},"                    # Clean up session\n",[1050,9717,9718,9721,9723,9725,9727,9729,9731,9733,9735],{"class":1052,"line":4895},[1050,9719,9720],{"class":1063},"                    del",[1050,9722,2972],{"class":1067},[1050,9724,1072],{"class":1071},[1050,9726,3532],{"class":3074},[1050,9728,3535],{"class":1071},[1050,9730,1345],{"class":1337},[1050,9732,9270],{"class":1341},[1050,9734,1345],{"class":1337},[1050,9736,3626],{"class":1071},[1050,9738,9739,9741,9743,9745,9747,9749,9751,9753,9755],{"class":1052,"line":4910},[1050,9740,9720],{"class":1063},[1050,9742,2972],{"class":1067},[1050,9744,1072],{"class":1071},[1050,9746,3532],{"class":3074},[1050,9748,3535],{"class":1071},[1050,9750,1345],{"class":1337},[1050,9752,9302],{"class":1341},[1050,9754,1345],{"class":1337},[1050,9756,3626],{"class":1071},[1050,9758,9759],{"class":1052,"line":4920},[1050,9760,9710],{"class":1067},[1050,9762,9763,9766,9768,9770,9772,9774,9776,9778,9781,9783],{"class":1052,"line":4925},[1050,9764,9765],{"class":1067},"                    messages",[1050,9767,1072],{"class":1071},[1050,9769,3759],{"class":2169},[1050,9771,2173],{"class":1071},[1050,9773,3009],{"class":2169},[1050,9775,1100],{"class":1071},[1050,9777,1366],{"class":1337},[1050,9779,9780],{"class":1341},"Login successful!",[1050,9782,1345],{"class":1337},[1050,9784,1146],{"class":1071},[1050,9786,9787,9790,9792,9794,9796,9798,9800],{"class":1052,"line":4944},[1050,9788,9789],{"class":1063},"                    return",[1050,9791,4949],{"class":2169},[1050,9793,2173],{"class":1071},[1050,9795,1345],{"class":1337},[1050,9797,4956],{"class":1341},[1050,9799,1345],{"class":1337},[1050,9801,1146],{"class":1071},[1050,9803,9804,9807],{"class":1052,"line":4963},[1050,9805,9806],{"class":1063},"                else",[1050,9808,1259],{"class":1071},[1050,9810,9811,9813,9815,9817,9819,9821,9823,9825,9828,9830],{"class":1052,"line":4968},[1050,9812,9765],{"class":1067},[1050,9814,1072],{"class":1071},[1050,9816,4266],{"class":2169},[1050,9818,2173],{"class":1071},[1050,9820,3009],{"class":2169},[1050,9822,1100],{"class":1071},[1050,9824,1366],{"class":1337},[1050,9826,9827],{"class":1341},"Invalid verification code.",[1050,9829,1345],{"class":1337},[1050,9831,1146],{"class":1071},[1050,9833,9834,9836],{"class":1052,"line":4990},[1050,9835,5369],{"class":1063},[1050,9837,1259],{"class":1071},[1050,9839,9840,9842,9844,9846,9848,9850,9852,9854,9857,9859],{"class":1052,"line":5017},[1050,9841,5238],{"class":1067},[1050,9843,1072],{"class":1071},[1050,9845,4266],{"class":2169},[1050,9847,2173],{"class":1071},[1050,9849,3009],{"class":2169},[1050,9851,1100],{"class":1071},[1050,9853,1366],{"class":1337},[1050,9855,9856],{"class":1341},"Two-factor authentication not properly configured.",[1050,9858,1345],{"class":1337},[1050,9860,1146],{"class":1071},[1050,9862,9863],{"class":1052,"line":5046},[1050,9864,1319],{"class":1067},[1050,9866,9867,9870,9872,9874,9877],{"class":1052,"line":5073},[1050,9868,9869],{"class":1063},"        except",[1050,9871,9550],{"class":1067},[1050,9873,1072],{"class":1071},[1050,9875,9876],{"class":3074},"DoesNotExist",[1050,9878,1259],{"class":1071},[1050,9880,9881,9883,9885,9887,9889,9891,9893,9895,9897,9899],{"class":1052,"line":5078},[1050,9882,4261],{"class":1067},[1050,9884,1072],{"class":1071},[1050,9886,4266],{"class":2169},[1050,9888,2173],{"class":1071},[1050,9890,3009],{"class":2169},[1050,9892,1100],{"class":1071},[1050,9894,1366],{"class":1337},[1050,9896,9510],{"class":1341},[1050,9898,1345],{"class":1337},[1050,9900,1146],{"class":1071},[1050,9902,9903,9905,9907,9909,9911,9913,9915],{"class":1052,"line":5084},[1050,9904,3144],{"class":1063},[1050,9906,4949],{"class":2169},[1050,9908,2173],{"class":1071},[1050,9910,1345],{"class":1337},[1050,9912,2321],{"class":1341},[1050,9914,1345],{"class":1337},[1050,9916,1146],{"class":1071},[1050,9918,9919],{"class":1052,"line":5117},[1050,9920,1279],{"class":1067},[1050,9922,9923,9925,9927,9929,9931,9933,9935,9938,9940],{"class":1052,"line":5122},[1050,9924,5494],{"class":1063},[1050,9926,1185],{"class":2169},[1050,9928,2173],{"class":1071},[1050,9930,3009],{"class":2169},[1050,9932,1100],{"class":1071},[1050,9934,1366],{"class":1337},[1050,9936,9937],{"class":1341},"auth/2fa_verify.html",[1050,9939,1345],{"class":1337},[1050,9941,1146],{"class":1071},[1026,9943,9944],{},"Django's authentication views provide a solid foundation for implementing secure authentication workflows. By customizing these views, you can add enhanced security features, improved user experience, and integration with additional authentication methods while maintaining the robustness of Django's built-in security measures.",[1030,9946,9948],{"id":9947},"registration-views","Registration Views",[1035,9950,9952],{"id":9951},"user-registration-implementation","User Registration Implementation",[1040,9954,9956],{"className":1042,"code":9955,"language":1044,"meta":1045,"style":1045},"# Custom user registration views\nfrom django.contrib.auth.forms import UserCreationForm\nfrom django.contrib.auth import login\nfrom django.views.generic import CreateView\nfrom django.urls import reverse_lazy\n\nclass CustomUserCreationForm(UserCreationForm):\n    \"\"\"Enhanced user creation form\"\"\"\n    \n    email = forms.EmailField(required=True)\n    first_name = forms.CharField(max_length=30, required=True)\n    last_name = forms.CharField(max_length=30, required=True)\n    terms_accepted = forms.BooleanField(\n        required=True,\n        label=\"I accept the Terms of Service and Privacy Policy\"\n    )\n    \n    class Meta:\n        model = User\n        fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')\n    \n    def clean_email(self):\n        \"\"\"Validate email uniqueness\"\"\"\n        email = self.cleaned_data['email']\n        \n        if User.objects.filter(email=email).exists():\n            raise forms.ValidationError(\"A user with this email already exists.\")\n        \n        return email\n    \n    def clean_username(self):\n        \"\"\"Additional username validation\"\"\"\n        username = self.cleaned_data['username']\n        \n        # Check for reserved usernames\n        reserved_usernames = ['admin', 'root', 'administrator', 'moderator']\n        \n        if username.lower() in reserved_usernames:\n            raise forms.ValidationError(\"This username is reserved.\")\n        \n        return username\n    \n    def save(self, commit=True):\n        \"\"\"Save user with additional fields\"\"\"\n        user = super().save(commit=False)\n        user.email = self.cleaned_data['email']\n        user.first_name = self.cleaned_data['first_name']\n        user.last_name = self.cleaned_data['last_name']\n        \n        if commit:\n            user.save()\n        \n        return user\n\nclass RegistrationView(CreateView):\n    \"\"\"User registration view\"\"\"\n    \n    form_class = CustomUserCreationForm\n    template_name = 'auth/register.html'\n    success_url = reverse_lazy('registration_complete')\n    \n    def dispatch(self, request, *args, **kwargs):\n        \"\"\"Redirect authenticated users\"\"\"\n        if request.user.is_authenticated:\n            return redirect('dashboard')\n        \n        return super().dispatch(request, *args, **kwargs)\n    \n    def form_valid(self, form):\n        \"\"\"Handle successful registration\"\"\"\n        \n        response = super().form_valid(form)\n        \n        user = self.object\n        \n        # Log registration\n        import logging\n        logger = logging.getLogger('auth')\n        logger.info(f\"New user registered: {user.username} ({user.email})\")\n        \n        # Send welcome email\n        self.send_welcome_email(user)\n        \n        # Auto-login after registration\n        login(self.request, user)\n        \n        messages.success(\n            self.request,\n            f'Welcome to our site, {user.get_full_name() or user.username}! '\n            'Your account has been created successfully.'\n        )\n        \n        return response\n    \n    def send_welcome_email(self, user):\n        \"\"\"Send welcome email to new user\"\"\"\n        \n        subject = 'Welcome to Our Site!'\n        message = render_to_string('auth/welcome_email.html', {\n            'user': user,\n            'site_name': 'Your Site Name',\n        })\n        \n        send_mail(\n            subject,\n            message,\n            settings.DEFAULT_FROM_EMAIL,\n            [user.email],\n            fail_silently=True,\n        )\n\nclass EmailVerificationRequiredRegistrationView(CreateView):\n    \"\"\"Registration view that requires email verification\"\"\"\n    \n    form_class = CustomUserCreationForm\n    template_name = 'auth/register.html'\n    success_url = reverse_lazy('registration_email_sent')\n    \n    def form_valid(self, form):\n        \"\"\"Handle registration with email verification\"\"\"\n        \n        response = super().form_valid(form)\n        \n        user = self.object\n        \n        # Set user as inactive until email verification\n        user.is_active = False\n        user.save()\n        \n        # Send verification email\n        self.send_verification_email(user)\n        \n        messages.info(\n            self.request,\n            'Please check your email and click the verification link to activate your account.'\n        )\n        \n        return response\n    \n    def send_verification_email(self, user):\n        \"\"\"Send email verification link\"\"\"\n        \n        from django.contrib.auth.tokens import default_token_generator\n        from django.utils.http import urlsafe_base64_encode\n        from django.utils.encoding import force_bytes\n        \n        # Generate verification token\n        token = default_token_generator.make_token(user)\n        uid = urlsafe_base64_encode(force_bytes(user.pk))\n        \n        # Create verification URL\n        verification_url = self.request.build_absolute_uri(\n            reverse('email_verify', kwargs={'uidb64': uid, 'token': token})\n        )\n        \n        # Send email\n        subject = 'Verify Your Email Address'\n        message = render_to_string('auth/verification_email.html', {\n            'user': user,\n            'verification_url': verification_url,\n            'site_name': 'Your Site Name',\n        })\n        \n        send_mail(\n            subject,\n            message,\n            settings.DEFAULT_FROM_EMAIL,\n            [user.email],\n            fail_silently=False,\n        )\n\ndef email_verify_view(request, uidb64, token):\n    \"\"\"Verify email address\"\"\"\n    \n    try:\n        uid = force_str(urlsafe_base64_decode(uidb64))\n        user = User.objects.get(pk=uid)\n    except (TypeError, ValueError, OverflowError, User.DoesNotExist):\n        user = None\n    \n    if user is not None and default_token_generator.check_token(user, token):\n        # Activate user account\n        user.is_active = True\n        user.save()\n        \n        # Log in user\n        login(request, user)\n        \n        messages.success(\n            request,\n            'Your email has been verified successfully! Welcome to our site.'\n        )\n        \n        return redirect('dashboard')\n    else:\n        messages.error(\n            request,\n            'The verification link is invalid or has expired.'\n        )\n        \n        return redirect('register')\n\n# Function-based registration view\ndef register_view(request):\n    \"\"\"Function-based registration view\"\"\"\n    \n    if request.user.is_authenticated:\n        return redirect('dashboard')\n    \n    if request.method == 'POST':\n        form = CustomUserCreationForm(request.POST)\n        \n        if form.is_valid():\n            user = form.save()\n            \n            # Log registration\n            import logging\n            logger = logging.getLogger('auth')\n            logger.info(f\"New user registered: {user.username}\")\n            \n            # Auto-login\n            login(request, user)\n            \n            messages.success(\n                request,\n                f'Welcome, {user.get_full_name() or user.username}! '\n                'Your account has been created.'\n            )\n            \n            return redirect('dashboard')\n    else:\n        form = CustomUserCreationForm()\n    \n    return render(request, 'auth/register.html', {'form': form})\n",[1047,9957,9958,9963,9986,10004,10024,10038,10042,10056,10065,10069,10095,10130,10161,10177,10188,10202,10207,10211,10221,10231,10293,10297,10310,10319,10341,10345,10373,10396,10400,10407,10411,10424,10433,10455,10459,10464,10510,10514,10535,10556,10560,10567,10571,10593,10602,10626,10652,10678,10704,10708,10716,10726,10730,10737,10741,10755,10764,10768,10777,10790,10809,10813,10841,10850,10866,10882,10886,10914,10918,10934,10943,10947,10965,10969,10982,10986,10991,10997,11019,11061,11065,11070,11085,11089,11094,11113,11117,11127,11137,11167,11176,11180,11184,11190,11194,11211,11220,11224,11238,11261,11275,11293,11297,11301,11307,11314,11321,11331,11343,11353,11357,11361,11374,11383,11387,11395,11407,11426,11430,11446,11455,11459,11477,11481,11493,11497,11502,11515,11525,11529,11534,11549,11553,11563,11573,11582,11586,11590,11596,11600,11617,11626,11630,11654,11674,11694,11698,11703,11723,11750,11754,11759,11779,11828,11832,11836,11841,11854,11875,11889,11905,11923,11927,11931,11937,11943,11949,11959,11971,11981,11985,11989,12011,12020,12024,12031,12051,12078,12108,12116,12120,12151,12156,12168,12178,12182,12187,12201,12205,12215,12222,12231,12235,12239,12255,12261,12271,12277,12286,12291,12296,12314,12319,12325,12339,12349,12354,12371,12388,12393,12414,12433,12438,12451,12466,12471,12477,12484,12507,12536,12541,12547,12562,12567,12578,12585,12614,12624,12629,12634,12651,12658,12669,12674],{"__ignoreMap":1045},[1050,9959,9960],{"class":1052,"line":1053},[1050,9961,9962],{"class":1056},"# Custom user registration views\n",[1050,9964,9965,9967,9969,9971,9973,9975,9977,9979,9981,9983],{"class":1052,"line":1060},[1050,9966,1064],{"class":1063},[1050,9968,1068],{"class":1067},[1050,9970,1072],{"class":1071},[1050,9972,1075],{"class":1067},[1050,9974,1072],{"class":1071},[1050,9976,1080],{"class":1067},[1050,9978,1072],{"class":1071},[1050,9980,2678],{"class":1067},[1050,9982,1088],{"class":1063},[1050,9984,9985],{"class":1067}," UserCreationForm\n",[1050,9987,9988,9990,9992,9994,9996,9998,10000,10002],{"class":1052,"line":1094},[1050,9989,1064],{"class":1063},[1050,9991,1068],{"class":1067},[1050,9993,1072],{"class":1071},[1050,9995,1075],{"class":1067},[1050,9997,1072],{"class":1071},[1050,9999,1206],{"class":1067},[1050,10001,1088],{"class":1063},[1050,10003,2702],{"class":1067},[1050,10005,10006,10008,10010,10012,10014,10016,10019,10021],{"class":1052,"line":1119},[1050,10007,1064],{"class":1063},[1050,10009,1068],{"class":1067},[1050,10011,1072],{"class":1071},[1050,10013,2780],{"class":1067},[1050,10015,1072],{"class":1071},[1050,10017,10018],{"class":1067},"generic ",[1050,10020,1088],{"class":1063},[1050,10022,10023],{"class":1067}," CreateView\n",[1050,10025,10026,10028,10030,10032,10034,10036],{"class":1052,"line":1137},[1050,10027,1064],{"class":1063},[1050,10029,1068],{"class":1067},[1050,10031,1072],{"class":1071},[1050,10033,1158],{"class":1067},[1050,10035,1088],{"class":1063},[1050,10037,1168],{"class":1067},[1050,10039,10040],{"class":1052,"line":1143},[1050,10041,1245],{"emptyLinePlaceholder":1244},[1050,10043,10044,10046,10049,10051,10054],{"class":1052,"line":1149},[1050,10045,1252],{"class":1251},[1050,10047,10048],{"class":1255}," CustomUserCreationForm",[1050,10050,2173],{"class":1071},[1050,10052,10053],{"class":2859},"UserCreationForm",[1050,10055,2862],{"class":1071},[1050,10057,10058,10060,10063],{"class":1052,"line":1171},[1050,10059,1266],{"class":1265},[1050,10061,10062],{"class":1269},"Enhanced user creation form",[1050,10064,1273],{"class":1265},[1050,10066,10067],{"class":1052,"line":1193},[1050,10068,1279],{"class":1067},[1050,10070,10071,10074,10076,10079,10081,10084,10086,10089,10091,10093],{"class":1052,"line":1224},[1050,10072,10073],{"class":1067},"    email ",[1050,10075,1328],{"class":1071},[1050,10077,10078],{"class":1067}," forms",[1050,10080,1072],{"class":1071},[1050,10082,10083],{"class":2169},"EmailField",[1050,10085,2173],{"class":1071},[1050,10087,10088],{"class":2313},"required",[1050,10090,1328],{"class":1071},[1050,10092,9044],{"class":1529},[1050,10094,1146],{"class":1071},[1050,10096,10097,10100,10102,10104,10106,10109,10111,10114,10116,10119,10121,10124,10126,10128],{"class":1052,"line":1241},[1050,10098,10099],{"class":1067},"    first_name ",[1050,10101,1328],{"class":1071},[1050,10103,10078],{"class":1067},[1050,10105,1072],{"class":1071},[1050,10107,10108],{"class":2169},"CharField",[1050,10110,2173],{"class":1071},[1050,10112,10113],{"class":2313},"max_length",[1050,10115,1328],{"class":1071},[1050,10117,10118],{"class":3622},"30",[1050,10120,1100],{"class":1071},[1050,10122,10123],{"class":2313}," required",[1050,10125,1328],{"class":1071},[1050,10127,9044],{"class":1529},[1050,10129,1146],{"class":1071},[1050,10131,10132,10135,10137,10139,10141,10143,10145,10147,10149,10151,10153,10155,10157,10159],{"class":1052,"line":1248},[1050,10133,10134],{"class":1067},"    last_name ",[1050,10136,1328],{"class":1071},[1050,10138,10078],{"class":1067},[1050,10140,1072],{"class":1071},[1050,10142,10108],{"class":2169},[1050,10144,2173],{"class":1071},[1050,10146,10113],{"class":2313},[1050,10148,1328],{"class":1071},[1050,10150,10118],{"class":3622},[1050,10152,1100],{"class":1071},[1050,10154,10123],{"class":2313},[1050,10156,1328],{"class":1071},[1050,10158,9044],{"class":1529},[1050,10160,1146],{"class":1071},[1050,10162,10163,10166,10168,10170,10172,10175],{"class":1052,"line":1262},[1050,10164,10165],{"class":1067},"    terms_accepted ",[1050,10167,1328],{"class":1071},[1050,10169,10078],{"class":1067},[1050,10171,1072],{"class":1071},[1050,10173,10174],{"class":2169},"BooleanField",[1050,10176,3762],{"class":1071},[1050,10178,10179,10182,10184,10186],{"class":1052,"line":1276},[1050,10180,10181],{"class":2313},"        required",[1050,10183,1328],{"class":1071},[1050,10185,9044],{"class":1529},[1050,10187,1116],{"class":1071},[1050,10189,10190,10193,10195,10197,10200],{"class":1052,"line":1282},[1050,10191,10192],{"class":2313},"        label",[1050,10194,1328],{"class":1071},[1050,10196,3507],{"class":1337},[1050,10198,10199],{"class":1341},"I accept the Terms of Service and Privacy Policy",[1050,10201,4075],{"class":1337},[1050,10203,10204],{"class":1052,"line":1292},[1050,10205,10206],{"class":1071},"    )\n",[1050,10208,10209],{"class":1052,"line":1305},[1050,10210,1279],{"class":1067},[1050,10212,10213,10216,10219],{"class":1052,"line":1316},[1050,10214,10215],{"class":1251},"    class",[1050,10217,10218],{"class":1255}," Meta",[1050,10220,1259],{"class":1071},[1050,10222,10223,10226,10228],{"class":1052,"line":1322},[1050,10224,10225],{"class":1067},"        model ",[1050,10227,1328],{"class":1071},[1050,10229,10230],{"class":1067}," User\n",[1050,10232,10233,10236,10238,10241,10243,10245,10247,10249,10251,10254,10256,10258,10260,10263,10265,10267,10269,10271,10273,10275,10277,10280,10282,10284,10286,10289,10291],{"class":1052,"line":1334},[1050,10234,10235],{"class":1067},"        fields ",[1050,10237,1328],{"class":1071},[1050,10239,10240],{"class":1071}," (",[1050,10242,1345],{"class":1337},[1050,10244,3468],{"class":1341},[1050,10246,1345],{"class":1337},[1050,10248,1100],{"class":1071},[1050,10250,1366],{"class":1337},[1050,10252,10253],{"class":1341},"first_name",[1050,10255,1345],{"class":1337},[1050,10257,1100],{"class":1071},[1050,10259,1366],{"class":1337},[1050,10261,10262],{"class":1341},"last_name",[1050,10264,1345],{"class":1337},[1050,10266,1100],{"class":1071},[1050,10268,1366],{"class":1337},[1050,10270,8148],{"class":1341},[1050,10272,1345],{"class":1337},[1050,10274,1100],{"class":1071},[1050,10276,1366],{"class":1337},[1050,10278,10279],{"class":1341},"password1",[1050,10281,1345],{"class":1337},[1050,10283,1100],{"class":1071},[1050,10285,1366],{"class":1337},[1050,10287,10288],{"class":1341},"password2",[1050,10290,1345],{"class":1337},[1050,10292,1146],{"class":1071},[1050,10294,10295],{"class":1052,"line":1353},[1050,10296,1279],{"class":1067},[1050,10298,10299,10301,10304,10306,10308],{"class":1052,"line":1376},[1050,10300,1295],{"class":1251},[1050,10302,10303],{"class":1298}," clean_email",[1050,10305,2173],{"class":1071},[1050,10307,2966],{"class":2965},[1050,10309,2862],{"class":1071},[1050,10311,10312,10314,10317],{"class":1052,"line":1397},[1050,10313,1308],{"class":1265},[1050,10315,10316],{"class":1269},"Validate email uniqueness",[1050,10318,1273],{"class":1265},[1050,10320,10321,10323,10325,10327,10329,10331,10333,10335,10337,10339],{"class":1052,"line":1418},[1050,10322,8133],{"class":1067},[1050,10324,1328],{"class":1071},[1050,10326,3069],{"class":3068},[1050,10328,1072],{"class":1071},[1050,10330,3955],{"class":3074},[1050,10332,3535],{"class":1071},[1050,10334,1345],{"class":1337},[1050,10336,8148],{"class":1341},[1050,10338,1345],{"class":1337},[1050,10340,3626],{"class":1071},[1050,10342,10343],{"class":1052,"line":1438},[1050,10344,1319],{"class":1067},[1050,10346,10347,10349,10351,10353,10355,10357,10359,10361,10363,10365,10367,10369,10371],{"class":1052,"line":1444},[1050,10348,3134],{"class":1063},[1050,10350,9550],{"class":1067},[1050,10352,1072],{"class":1071},[1050,10354,7058],{"class":3074},[1050,10356,1072],{"class":1071},[1050,10358,3257],{"class":2169},[1050,10360,2173],{"class":1071},[1050,10362,8148],{"class":2313},[1050,10364,1328],{"class":1071},[1050,10366,8148],{"class":2169},[1050,10368,3274],{"class":1071},[1050,10370,3277],{"class":2169},[1050,10372,1302],{"class":1071},[1050,10374,10375,10378,10380,10382,10385,10387,10389,10392,10394],{"class":1052,"line":1458},[1050,10376,10377],{"class":1063},"            raise",[1050,10379,10078],{"class":1067},[1050,10381,1072],{"class":1071},[1050,10383,10384],{"class":2169},"ValidationError",[1050,10386,2173],{"class":1071},[1050,10388,3507],{"class":1337},[1050,10390,10391],{"class":1341},"A user with this email already exists.",[1050,10393,3507],{"class":1337},[1050,10395,1146],{"class":1071},[1050,10397,10398],{"class":1052,"line":1478},[1050,10399,1319],{"class":1067},[1050,10401,10402,10404],{"class":1052,"line":1498},[1050,10403,2106],{"class":1063},[1050,10405,10406],{"class":1067}," email\n",[1050,10408,10409],{"class":1052,"line":1518},[1050,10410,1279],{"class":1067},[1050,10412,10413,10415,10418,10420,10422],{"class":1052,"line":1533},[1050,10414,1295],{"class":1251},[1050,10416,10417],{"class":1298}," clean_username",[1050,10419,2173],{"class":1071},[1050,10421,2966],{"class":2965},[1050,10423,2862],{"class":1071},[1050,10425,10426,10428,10431],{"class":1052,"line":1538},[1050,10427,1308],{"class":1265},[1050,10429,10430],{"class":1269},"Additional username validation",[1050,10432,1273],{"class":1265},[1050,10434,10435,10437,10439,10441,10443,10445,10447,10449,10451,10453],{"class":1052,"line":1552},[1050,10436,3946],{"class":1067},[1050,10438,1328],{"class":1071},[1050,10440,3069],{"class":3068},[1050,10442,1072],{"class":1071},[1050,10444,3955],{"class":3074},[1050,10446,3535],{"class":1071},[1050,10448,1345],{"class":1337},[1050,10450,3468],{"class":1341},[1050,10452,1345],{"class":1337},[1050,10454,3626],{"class":1071},[1050,10456,10457],{"class":1052,"line":1572},[1050,10458,1319],{"class":1067},[1050,10460,10461],{"class":1052,"line":1592},[1050,10462,10463],{"class":1056},"        # Check for reserved usernames\n",[1050,10465,10466,10469,10471,10474,10476,10479,10481,10483,10485,10488,10490,10492,10494,10497,10499,10501,10503,10506,10508],{"class":1052,"line":1612},[1050,10467,10468],{"class":1067},"        reserved_usernames ",[1050,10470,1328],{"class":1071},[1050,10472,10473],{"class":1071}," [",[1050,10475,1345],{"class":1337},[1050,10477,10478],{"class":1341},"admin",[1050,10480,1345],{"class":1337},[1050,10482,1100],{"class":1071},[1050,10484,1366],{"class":1337},[1050,10486,10487],{"class":1341},"root",[1050,10489,1345],{"class":1337},[1050,10491,1100],{"class":1071},[1050,10493,1366],{"class":1337},[1050,10495,10496],{"class":1341},"administrator",[1050,10498,1345],{"class":1337},[1050,10500,1100],{"class":1071},[1050,10502,1366],{"class":1337},[1050,10504,10505],{"class":1341},"moderator",[1050,10507,1345],{"class":1337},[1050,10509,3626],{"class":1071},[1050,10511,10512],{"class":1052,"line":1630},[1050,10513,1319],{"class":1067},[1050,10515,10516,10518,10520,10522,10525,10527,10530,10533],{"class":1052,"line":1635},[1050,10517,3134],{"class":1063},[1050,10519,5099],{"class":1067},[1050,10521,1072],{"class":1071},[1050,10523,10524],{"class":2169},"lower",[1050,10526,3795],{"class":1071},[1050,10528,10529],{"class":2977}," in",[1050,10531,10532],{"class":1067}," reserved_usernames",[1050,10534,1259],{"class":1071},[1050,10536,10537,10539,10541,10543,10545,10547,10549,10552,10554],{"class":1052,"line":1649},[1050,10538,10377],{"class":1063},[1050,10540,10078],{"class":1067},[1050,10542,1072],{"class":1071},[1050,10544,10384],{"class":2169},[1050,10546,2173],{"class":1071},[1050,10548,3507],{"class":1337},[1050,10550,10551],{"class":1341},"This username is reserved.",[1050,10553,3507],{"class":1337},[1050,10555,1146],{"class":1071},[1050,10557,10558],{"class":1052,"line":1669},[1050,10559,1319],{"class":1067},[1050,10561,10562,10564],{"class":1052,"line":1689},[1050,10563,2106],{"class":1063},[1050,10565,10566],{"class":1067}," username\n",[1050,10568,10569],{"class":1052,"line":1705},[1050,10570,1279],{"class":1067},[1050,10572,10573,10575,10578,10580,10582,10584,10587,10589,10591],{"class":1052,"line":1718},[1050,10574,1295],{"class":1251},[1050,10576,10577],{"class":1298}," save",[1050,10579,2173],{"class":1071},[1050,10581,2966],{"class":2965},[1050,10583,1100],{"class":1071},[1050,10585,10586],{"class":2971}," commit",[1050,10588,1328],{"class":2977},[1050,10590,9044],{"class":1529},[1050,10592,2862],{"class":1071},[1050,10594,10595,10597,10600],{"class":1052,"line":1723},[1050,10596,1308],{"class":1265},[1050,10598,10599],{"class":1269},"Save user with additional fields",[1050,10601,1273],{"class":1265},[1050,10603,10604,10606,10608,10610,10612,10614,10616,10619,10621,10624],{"class":1052,"line":1737},[1050,10605,3161],{"class":1067},[1050,10607,1328],{"class":1071},[1050,10609,2998],{"class":1288},[1050,10611,3001],{"class":1071},[1050,10613,3851],{"class":2169},[1050,10615,2173],{"class":1071},[1050,10617,10618],{"class":2313},"commit",[1050,10620,1328],{"class":1071},[1050,10622,10623],{"class":1529},"False",[1050,10625,1146],{"class":1071},[1050,10627,10628,10630,10632,10634,10636,10638,10640,10642,10644,10646,10648,10650],{"class":1052,"line":1757},[1050,10629,3827],{"class":1067},[1050,10631,1072],{"class":1071},[1050,10633,8148],{"class":3074},[1050,10635,3548],{"class":1071},[1050,10637,3069],{"class":3068},[1050,10639,1072],{"class":1071},[1050,10641,3955],{"class":3074},[1050,10643,3535],{"class":1071},[1050,10645,1345],{"class":1337},[1050,10647,8148],{"class":1341},[1050,10649,1345],{"class":1337},[1050,10651,3626],{"class":1071},[1050,10653,10654,10656,10658,10660,10662,10664,10666,10668,10670,10672,10674,10676],{"class":1052,"line":1777},[1050,10655,3827],{"class":1067},[1050,10657,1072],{"class":1071},[1050,10659,10253],{"class":3074},[1050,10661,3548],{"class":1071},[1050,10663,3069],{"class":3068},[1050,10665,1072],{"class":1071},[1050,10667,3955],{"class":3074},[1050,10669,3535],{"class":1071},[1050,10671,1345],{"class":1337},[1050,10673,10253],{"class":1341},[1050,10675,1345],{"class":1337},[1050,10677,3626],{"class":1071},[1050,10679,10680,10682,10684,10686,10688,10690,10692,10694,10696,10698,10700,10702],{"class":1052,"line":1797},[1050,10681,3827],{"class":1067},[1050,10683,1072],{"class":1071},[1050,10685,10262],{"class":3074},[1050,10687,3548],{"class":1071},[1050,10689,3069],{"class":3068},[1050,10691,1072],{"class":1071},[1050,10693,3955],{"class":3074},[1050,10695,3535],{"class":1071},[1050,10697,1345],{"class":1337},[1050,10699,10262],{"class":1341},[1050,10701,1345],{"class":1337},[1050,10703,3626],{"class":1071},[1050,10705,10706],{"class":1052,"line":1815},[1050,10707,1319],{"class":1067},[1050,10709,10710,10712,10714],{"class":1052,"line":1820},[1050,10711,3134],{"class":1063},[1050,10713,10586],{"class":1067},[1050,10715,1259],{"class":1071},[1050,10717,10718,10720,10722,10724],{"class":1052,"line":1834},[1050,10719,6928],{"class":1067},[1050,10721,1072],{"class":1071},[1050,10723,3851],{"class":2169},[1050,10725,3396],{"class":1071},[1050,10727,10728],{"class":1052,"line":1854},[1050,10729,1319],{"class":1067},[1050,10731,10732,10734],{"class":1052,"line":1874},[1050,10733,2106],{"class":1063},[1050,10735,10736],{"class":1067}," user\n",[1050,10738,10739],{"class":1052,"line":1889},[1050,10740,1245],{"emptyLinePlaceholder":1244},[1050,10742,10743,10745,10748,10750,10753],{"class":1052,"line":1902},[1050,10744,1252],{"class":1251},[1050,10746,10747],{"class":1255}," RegistrationView",[1050,10749,2173],{"class":1071},[1050,10751,10752],{"class":2859},"CreateView",[1050,10754,2862],{"class":1071},[1050,10756,10757,10759,10762],{"class":1052,"line":1907},[1050,10758,1266],{"class":1265},[1050,10760,10761],{"class":1269},"User registration view",[1050,10763,1273],{"class":1265},[1050,10765,10766],{"class":1052,"line":1921},[1050,10767,1279],{"class":1067},[1050,10769,10770,10772,10774],{"class":1052,"line":1941},[1050,10771,2894],{"class":1067},[1050,10773,1328],{"class":1071},[1050,10775,10776],{"class":1067}," CustomUserCreationForm\n",[1050,10778,10779,10781,10783,10785,10788],{"class":1052,"line":1961},[1050,10780,2880],{"class":1067},[1050,10782,1328],{"class":1071},[1050,10784,1366],{"class":1337},[1050,10786,10787],{"class":1341},"auth/register.html",[1050,10789,1435],{"class":1337},[1050,10791,10792,10794,10796,10798,10800,10802,10805,10807],{"class":1052,"line":1981},[1050,10793,6740],{"class":1067},[1050,10795,1328],{"class":1071},[1050,10797,3199],{"class":2169},[1050,10799,2173],{"class":1071},[1050,10801,1345],{"class":1337},[1050,10803,10804],{"class":1341},"registration_complete",[1050,10806,1345],{"class":1337},[1050,10808,1146],{"class":1071},[1050,10810,10811],{"class":1052,"line":1999},[1050,10812,1279],{"class":1067},[1050,10814,10815,10817,10819,10821,10823,10825,10827,10829,10831,10833,10835,10837,10839],{"class":1052,"line":2004},[1050,10816,1295],{"class":1251},[1050,10818,2960],{"class":1298},[1050,10820,2173],{"class":1071},[1050,10822,2966],{"class":2965},[1050,10824,1100],{"class":1071},[1050,10826,2972],{"class":2971},[1050,10828,1100],{"class":1071},[1050,10830,2978],{"class":2977},[1050,10832,2981],{"class":2971},[1050,10834,1100],{"class":1071},[1050,10836,2986],{"class":2977},[1050,10838,2989],{"class":2971},[1050,10840,2862],{"class":1071},[1050,10842,10843,10845,10848],{"class":1052,"line":2018},[1050,10844,1308],{"class":1265},[1050,10846,10847],{"class":1269},"Redirect authenticated users",[1050,10849,1273],{"class":1265},[1050,10851,10852,10854,10856,10858,10860,10862,10864],{"class":1052,"line":2038},[1050,10853,3134],{"class":1063},[1050,10855,2972],{"class":1067},[1050,10857,1072],{"class":1071},[1050,10859,3463],{"class":3074},[1050,10861,1072],{"class":1071},[1050,10863,4939],{"class":3074},[1050,10865,1259],{"class":1071},[1050,10867,10868,10870,10872,10874,10876,10878,10880],{"class":1052,"line":2058},[1050,10869,3144],{"class":1063},[1050,10871,4949],{"class":2169},[1050,10873,2173],{"class":1071},[1050,10875,1345],{"class":1337},[1050,10877,4956],{"class":1341},[1050,10879,1345],{"class":1337},[1050,10881,1146],{"class":1071},[1050,10883,10884],{"class":1052,"line":2073},[1050,10885,1319],{"class":1067},[1050,10887,10888,10890,10892,10894,10896,10898,10900,10902,10904,10906,10908,10910,10912],{"class":1052,"line":2086},[1050,10889,2106],{"class":1063},[1050,10891,2998],{"class":1288},[1050,10893,3001],{"class":1071},[1050,10895,3004],{"class":2169},[1050,10897,2173],{"class":1071},[1050,10899,3009],{"class":2169},[1050,10901,1100],{"class":1071},[1050,10903,2978],{"class":2977},[1050,10905,2981],{"class":2169},[1050,10907,1100],{"class":1071},[1050,10909,2986],{"class":2977},[1050,10911,2989],{"class":2169},[1050,10913,1146],{"class":1071},[1050,10915,10916],{"class":1052,"line":2092},[1050,10917,1279],{"class":1067},[1050,10919,10920,10922,10924,10926,10928,10930,10932],{"class":1052,"line":2098},[1050,10921,1295],{"class":1251},[1050,10923,3331],{"class":1298},[1050,10925,2173],{"class":1071},[1050,10927,2966],{"class":2965},[1050,10929,1100],{"class":1071},[1050,10931,3340],{"class":2971},[1050,10933,2862],{"class":1071},[1050,10935,10936,10938,10941],{"class":1052,"line":2103},[1050,10937,1308],{"class":1265},[1050,10939,10940],{"class":1269},"Handle successful registration",[1050,10942,1273],{"class":1265},[1050,10944,10945],{"class":1052,"line":2112},[1050,10946,1319],{"class":1067},[1050,10948,10949,10951,10953,10955,10957,10959,10961,10963],{"class":1052,"line":2117},[1050,10950,3360],{"class":1067},[1050,10952,1328],{"class":1071},[1050,10954,2998],{"class":1288},[1050,10956,3001],{"class":1071},[1050,10958,3369],{"class":2169},[1050,10960,2173],{"class":1071},[1050,10962,3374],{"class":2169},[1050,10964,1146],{"class":1071},[1050,10966,10967],{"class":1052,"line":2124},[1050,10968,1319],{"class":1067},[1050,10970,10971,10973,10975,10977,10979],{"class":1052,"line":2134},[1050,10972,3161],{"class":1067},[1050,10974,1328],{"class":1071},[1050,10976,3069],{"class":3068},[1050,10978,1072],{"class":1071},[1050,10980,10981],{"class":3074},"object\n",[1050,10983,10984],{"class":1052,"line":2144},[1050,10985,1319],{"class":1067},[1050,10987,10988],{"class":1052,"line":2149},[1050,10989,10990],{"class":1056},"        # Log registration\n",[1050,10992,10993,10995],{"class":1052,"line":2155},[1050,10994,3410],{"class":1063},[1050,10996,3413],{"class":1067},[1050,10998,10999,11001,11003,11005,11007,11009,11011,11013,11015,11017],{"class":1052,"line":2166},[1050,11000,3418],{"class":1067},[1050,11002,1328],{"class":1071},[1050,11004,3423],{"class":1067},[1050,11006,1072],{"class":1071},[1050,11008,3428],{"class":2169},[1050,11010,2173],{"class":1071},[1050,11012,1345],{"class":1337},[1050,11014,1080],{"class":1341},[1050,11016,1345],{"class":1337},[1050,11018,1146],{"class":1071},[1050,11020,11021,11023,11025,11027,11029,11031,11034,11036,11038,11040,11042,11044,11046,11048,11050,11052,11054,11056,11059],{"class":1052,"line":2200},[1050,11022,3443],{"class":1067},[1050,11024,1072],{"class":1071},[1050,11026,3448],{"class":2169},[1050,11028,2173],{"class":1071},[1050,11030,3453],{"class":1251},[1050,11032,11033],{"class":1341},"\"New user registered: ",[1050,11035,3460],{"class":3459},[1050,11037,3463],{"class":2169},[1050,11039,1072],{"class":1071},[1050,11041,3468],{"class":3074},[1050,11043,3471],{"class":3459},[1050,11045,10240],{"class":1341},[1050,11047,3460],{"class":3459},[1050,11049,3463],{"class":2169},[1050,11051,1072],{"class":1071},[1050,11053,8148],{"class":3074},[1050,11055,3471],{"class":3459},[1050,11057,11058],{"class":1341},")\"",[1050,11060,1146],{"class":1071},[1050,11062,11063],{"class":1052,"line":2206},[1050,11064,1319],{"class":1067},[1050,11066,11067],{"class":1052,"line":2211},[1050,11068,11069],{"class":1056},"        # Send welcome email\n",[1050,11071,11072,11074,11076,11079,11081,11083],{"class":1052,"line":2217},[1050,11073,3523],{"class":3068},[1050,11075,1072],{"class":1071},[1050,11077,11078],{"class":2169},"send_welcome_email",[1050,11080,2173],{"class":1071},[1050,11082,3463],{"class":2169},[1050,11084,1146],{"class":1071},[1050,11086,11087],{"class":1052,"line":2223},[1050,11088,1319],{"class":1067},[1050,11090,11091],{"class":1052,"line":2229},[1050,11092,11093],{"class":1056},"        # Auto-login after registration\n",[1050,11095,11096,11099,11101,11103,11105,11107,11109,11111],{"class":1052,"line":2235},[1050,11097,11098],{"class":2169},"        login",[1050,11100,2173],{"class":1071},[1050,11102,2966],{"class":3068},[1050,11104,1072],{"class":1071},[1050,11106,3009],{"class":3074},[1050,11108,1100],{"class":1071},[1050,11110,3185],{"class":2169},[1050,11112,1146],{"class":1071},[1050,11114,11115],{"class":1052,"line":2241},[1050,11116,1319],{"class":1067},[1050,11118,11119,11121,11123,11125],{"class":1052,"line":2247},[1050,11120,3754],{"class":1067},[1050,11122,1072],{"class":1071},[1050,11124,3759],{"class":2169},[1050,11126,3762],{"class":1071},[1050,11128,11129,11131,11133,11135],{"class":1052,"line":2253},[1050,11130,3686],{"class":3068},[1050,11132,1072],{"class":1071},[1050,11134,3009],{"class":3074},[1050,11136,1116],{"class":1071},[1050,11138,11139,11141,11144,11146,11148,11150,11152,11154,11156,11158,11160,11162,11164],{"class":1052,"line":2259},[1050,11140,3780],{"class":1251},[1050,11142,11143],{"class":1341},"'Welcome to our site, ",[1050,11145,3460],{"class":3459},[1050,11147,3463],{"class":2169},[1050,11149,1072],{"class":1071},[1050,11151,3792],{"class":2169},[1050,11153,3795],{"class":1071},[1050,11155,3100],{"class":2977},[1050,11157,3185],{"class":2169},[1050,11159,1072],{"class":1071},[1050,11161,3468],{"class":3074},[1050,11163,3471],{"class":3459},[1050,11165,11166],{"class":1341},"! '\n",[1050,11168,11169,11171,11174],{"class":1052,"line":2265},[1050,11170,1338],{"class":1337},[1050,11172,11173],{"class":1341},"Your account has been created successfully.",[1050,11175,1435],{"class":1337},[1050,11177,11178],{"class":1052,"line":2270},[1050,11179,3813],{"class":1071},[1050,11181,11182],{"class":1052,"line":2276},[1050,11183,1319],{"class":1067},[1050,11185,11186,11188],{"class":1052,"line":2286},[1050,11187,2106],{"class":1063},[1050,11189,3879],{"class":1067},[1050,11191,11192],{"class":1052,"line":2329},[1050,11193,1279],{"class":1067},[1050,11195,11196,11198,11201,11203,11205,11207,11209],{"class":1052,"line":2366},[1050,11197,1295],{"class":1251},[1050,11199,11200],{"class":1298}," send_welcome_email",[1050,11202,2173],{"class":1071},[1050,11204,2966],{"class":2965},[1050,11206,1100],{"class":1071},[1050,11208,3185],{"class":2971},[1050,11210,2862],{"class":1071},[1050,11212,11213,11215,11218],{"class":1052,"line":2403},[1050,11214,1308],{"class":1265},[1050,11216,11217],{"class":1269},"Send welcome email to new user",[1050,11219,1273],{"class":1265},[1050,11221,11222],{"class":1052,"line":2439},[1050,11223,1319],{"class":1067},[1050,11225,11226,11229,11231,11233,11236],{"class":1052,"line":2477},[1050,11227,11228],{"class":1067},"        subject ",[1050,11230,1328],{"class":1071},[1050,11232,1366],{"class":1337},[1050,11234,11235],{"class":1341},"Welcome to Our Site!",[1050,11237,1435],{"class":1337},[1050,11239,11240,11243,11245,11248,11250,11252,11255,11257,11259],{"class":1052,"line":2513},[1050,11241,11242],{"class":1067},"        message ",[1050,11244,1328],{"class":1071},[1050,11246,11247],{"class":2169}," render_to_string",[1050,11249,2173],{"class":1071},[1050,11251,1345],{"class":1337},[1050,11253,11254],{"class":1341},"auth/welcome_email.html",[1050,11256,1345],{"class":1337},[1050,11258,1100],{"class":1071},[1050,11260,1331],{"class":1071},[1050,11262,11263,11265,11267,11269,11271,11273],{"class":1052,"line":2550},[1050,11264,1338],{"class":1337},[1050,11266,3463],{"class":1341},[1050,11268,1345],{"class":1337},[1050,11270,1348],{"class":1071},[1050,11272,3185],{"class":2169},[1050,11274,1116],{"class":1071},[1050,11276,11277,11279,11281,11283,11285,11287,11289,11291],{"class":1052,"line":2587},[1050,11278,1338],{"class":1337},[1050,11280,4400],{"class":1341},[1050,11282,1345],{"class":1337},[1050,11284,1348],{"class":1071},[1050,11286,1366],{"class":1337},[1050,11288,4409],{"class":1341},[1050,11290,1345],{"class":1337},[1050,11292,1116],{"class":1071},[1050,11294,11295],{"class":1052,"line":2592},[1050,11296,4468],{"class":1071},[1050,11298,11299],{"class":1052,"line":2597},[1050,11300,1319],{"class":1067},[1050,11302,11303,11305],{"class":1052,"line":4169},[1050,11304,8974],{"class":2169},[1050,11306,3762],{"class":1071},[1050,11308,11309,11312],{"class":1052,"line":4174},[1050,11310,11311],{"class":2169},"            subject",[1050,11313,1116],{"class":1071},[1050,11315,11316,11319],{"class":1052,"line":4207},[1050,11317,11318],{"class":2169},"            message",[1050,11320,1116],{"class":1071},[1050,11322,11323,11325,11327,11329],{"class":1052,"line":4237},[1050,11324,9013],{"class":2169},[1050,11326,1072],{"class":1071},[1050,11328,9018],{"class":3079},[1050,11330,1116],{"class":1071},[1050,11332,11333,11335,11337,11339,11341],{"class":1052,"line":4242},[1050,11334,9025],{"class":1071},[1050,11336,3463],{"class":2169},[1050,11338,1072],{"class":1071},[1050,11340,8148],{"class":3074},[1050,11342,9034],{"class":1071},[1050,11344,11345,11347,11349,11351],{"class":1052,"line":4258},[1050,11346,9039],{"class":2313},[1050,11348,1328],{"class":1071},[1050,11350,9044],{"class":1529},[1050,11352,1116],{"class":1071},[1050,11354,11355],{"class":1052,"line":4271},[1050,11356,3813],{"class":1071},[1050,11358,11359],{"class":1052,"line":4283},[1050,11360,1245],{"emptyLinePlaceholder":1244},[1050,11362,11363,11365,11368,11370,11372],{"class":1052,"line":4294},[1050,11364,1252],{"class":1251},[1050,11366,11367],{"class":1255}," EmailVerificationRequiredRegistrationView",[1050,11369,2173],{"class":1071},[1050,11371,10752],{"class":2859},[1050,11373,2862],{"class":1071},[1050,11375,11376,11378,11381],{"class":1052,"line":4300},[1050,11377,1266],{"class":1265},[1050,11379,11380],{"class":1269},"Registration view that requires email verification",[1050,11382,1273],{"class":1265},[1050,11384,11385],{"class":1052,"line":4305},[1050,11386,1279],{"class":1067},[1050,11388,11389,11391,11393],{"class":1052,"line":4312},[1050,11390,2894],{"class":1067},[1050,11392,1328],{"class":1071},[1050,11394,10776],{"class":1067},[1050,11396,11397,11399,11401,11403,11405],{"class":1052,"line":4317},[1050,11398,2880],{"class":1067},[1050,11400,1328],{"class":1071},[1050,11402,1366],{"class":1337},[1050,11404,10787],{"class":1341},[1050,11406,1435],{"class":1337},[1050,11408,11409,11411,11413,11415,11417,11419,11422,11424],{"class":1052,"line":4337},[1050,11410,6740],{"class":1067},[1050,11412,1328],{"class":1071},[1050,11414,3199],{"class":2169},[1050,11416,2173],{"class":1071},[1050,11418,1345],{"class":1337},[1050,11420,11421],{"class":1341},"registration_email_sent",[1050,11423,1345],{"class":1337},[1050,11425,1146],{"class":1071},[1050,11427,11428],{"class":1052,"line":4347},[1050,11429,1279],{"class":1067},[1050,11431,11432,11434,11436,11438,11440,11442,11444],{"class":1052,"line":4352},[1050,11433,1295],{"class":1251},[1050,11435,3331],{"class":1298},[1050,11437,2173],{"class":1071},[1050,11439,2966],{"class":2965},[1050,11441,1100],{"class":1071},[1050,11443,3340],{"class":2971},[1050,11445,2862],{"class":1071},[1050,11447,11448,11450,11453],{"class":1052,"line":4376},[1050,11449,1308],{"class":1265},[1050,11451,11452],{"class":1269},"Handle registration with email verification",[1050,11454,1273],{"class":1265},[1050,11456,11457],{"class":1052,"line":4381},[1050,11458,1319],{"class":1067},[1050,11460,11461,11463,11465,11467,11469,11471,11473,11475],{"class":1052,"line":4395},[1050,11462,3360],{"class":1067},[1050,11464,1328],{"class":1071},[1050,11466,2998],{"class":1288},[1050,11468,3001],{"class":1071},[1050,11470,3369],{"class":2169},[1050,11472,2173],{"class":1071},[1050,11474,3374],{"class":2169},[1050,11476,1146],{"class":1071},[1050,11478,11479],{"class":1052,"line":4416},[1050,11480,1319],{"class":1067},[1050,11482,11483,11485,11487,11489,11491],{"class":1052,"line":4433},[1050,11484,3161],{"class":1067},[1050,11486,1328],{"class":1071},[1050,11488,3069],{"class":3068},[1050,11490,1072],{"class":1071},[1050,11492,10981],{"class":3074},[1050,11494,11495],{"class":1052,"line":4449},[1050,11496,1319],{"class":1067},[1050,11498,11499],{"class":1052,"line":4465},[1050,11500,11501],{"class":1056},"        # Set user as inactive until email verification\n",[1050,11503,11504,11506,11508,11510,11512],{"class":1052,"line":4471},[1050,11505,3827],{"class":1067},[1050,11507,1072],{"class":1071},[1050,11509,5150],{"class":3074},[1050,11511,3548],{"class":1071},[1050,11513,11514],{"class":1529}," False\n",[1050,11516,11517,11519,11521,11523],{"class":1052,"line":4476},[1050,11518,3827],{"class":1067},[1050,11520,1072],{"class":1071},[1050,11522,3851],{"class":2169},[1050,11524,3396],{"class":1071},[1050,11526,11527],{"class":1052,"line":4484},[1050,11528,1319],{"class":1067},[1050,11530,11531],{"class":1052,"line":4489},[1050,11532,11533],{"class":1056},"        # Send verification email\n",[1050,11535,11536,11538,11540,11543,11545,11547],{"class":1052,"line":4503},[1050,11537,3523],{"class":3068},[1050,11539,1072],{"class":1071},[1050,11541,11542],{"class":2169},"send_verification_email",[1050,11544,2173],{"class":1071},[1050,11546,3463],{"class":2169},[1050,11548,1146],{"class":1071},[1050,11550,11551],{"class":1052,"line":4513},[1050,11552,1319],{"class":1067},[1050,11554,11555,11557,11559,11561],{"class":1052,"line":4518},[1050,11556,3754],{"class":1067},[1050,11558,1072],{"class":1071},[1050,11560,3448],{"class":2169},[1050,11562,3762],{"class":1071},[1050,11564,11565,11567,11569,11571],{"class":1052,"line":4535},[1050,11566,3686],{"class":3068},[1050,11568,1072],{"class":1071},[1050,11570,3009],{"class":3074},[1050,11572,1116],{"class":1071},[1050,11574,11575,11577,11580],{"class":1052,"line":4545},[1050,11576,1338],{"class":1337},[1050,11578,11579],{"class":1341},"Please check your email and click the verification link to activate your account.",[1050,11581,1435],{"class":1337},[1050,11583,11584],{"class":1052,"line":4550},[1050,11585,3813],{"class":1071},[1050,11587,11588],{"class":1052,"line":4593},[1050,11589,1319],{"class":1067},[1050,11591,11592,11594],{"class":1052,"line":4617},[1050,11593,2106],{"class":1063},[1050,11595,3879],{"class":1067},[1050,11597,11598],{"class":1052,"line":4623},[1050,11599,1279],{"class":1067},[1050,11601,11602,11604,11607,11609,11611,11613,11615],{"class":1052,"line":4633},[1050,11603,1295],{"class":1251},[1050,11605,11606],{"class":1298}," send_verification_email",[1050,11608,2173],{"class":1071},[1050,11610,2966],{"class":2965},[1050,11612,1100],{"class":1071},[1050,11614,3185],{"class":2971},[1050,11616,2862],{"class":1071},[1050,11618,11619,11621,11624],{"class":1052,"line":4648},[1050,11620,1308],{"class":1265},[1050,11622,11623],{"class":1269},"Send email verification link",[1050,11625,1273],{"class":1265},[1050,11627,11628],{"class":1052,"line":4669},[1050,11629,1319],{"class":1067},[1050,11631,11632,11634,11636,11638,11640,11642,11644,11646,11649,11651],{"class":1052,"line":4690},[1050,11633,4093],{"class":1063},[1050,11635,1068],{"class":1067},[1050,11637,1072],{"class":1071},[1050,11639,1075],{"class":1067},[1050,11641,1072],{"class":1071},[1050,11643,1080],{"class":1067},[1050,11645,1072],{"class":1071},[1050,11647,11648],{"class":1067},"tokens ",[1050,11650,1088],{"class":1063},[1050,11652,11653],{"class":1067}," default_token_generator\n",[1050,11655,11656,11658,11660,11662,11664,11666,11669,11671],{"class":1052,"line":4696},[1050,11657,4093],{"class":1063},[1050,11659,1068],{"class":1067},[1050,11661,1072],{"class":1071},[1050,11663,2759],{"class":1067},[1050,11665,1072],{"class":1071},[1050,11667,11668],{"class":1067},"http ",[1050,11670,1088],{"class":1063},[1050,11672,11673],{"class":1067}," urlsafe_base64_encode\n",[1050,11675,11676,11678,11680,11682,11684,11686,11689,11691],{"class":1052,"line":4701},[1050,11677,4093],{"class":1063},[1050,11679,1068],{"class":1067},[1050,11681,1072],{"class":1071},[1050,11683,2759],{"class":1067},[1050,11685,1072],{"class":1071},[1050,11687,11688],{"class":1067},"encoding ",[1050,11690,1088],{"class":1063},[1050,11692,11693],{"class":1067}," force_bytes\n",[1050,11695,11696],{"class":1052,"line":4718},[1050,11697,1319],{"class":1067},[1050,11699,11700],{"class":1052,"line":4723},[1050,11701,11702],{"class":1056},"        # Generate verification token\n",[1050,11704,11705,11707,11709,11712,11714,11717,11719,11721],{"class":1052,"line":4740},[1050,11706,9426],{"class":1067},[1050,11708,1328],{"class":1071},[1050,11710,11711],{"class":1067}," default_token_generator",[1050,11713,1072],{"class":1071},[1050,11715,11716],{"class":2169},"make_token",[1050,11718,2173],{"class":1071},[1050,11720,3463],{"class":2169},[1050,11722,1146],{"class":1071},[1050,11724,11725,11728,11730,11733,11735,11738,11740,11742,11744,11747],{"class":1052,"line":4750},[1050,11726,11727],{"class":1067},"        uid ",[1050,11729,1328],{"class":1071},[1050,11731,11732],{"class":2169}," urlsafe_base64_encode",[1050,11734,2173],{"class":1071},[1050,11736,11737],{"class":2169},"force_bytes",[1050,11739,2173],{"class":1071},[1050,11741,3463],{"class":2169},[1050,11743,1072],{"class":1071},[1050,11745,11746],{"class":3074},"pk",[1050,11748,11749],{"class":1071},"))\n",[1050,11751,11752],{"class":1052,"line":4755},[1050,11753,1319],{"class":1067},[1050,11755,11756],{"class":1052,"line":4794},[1050,11757,11758],{"class":1056},"        # Create verification URL\n",[1050,11760,11761,11764,11766,11768,11770,11772,11774,11777],{"class":1052,"line":4803},[1050,11762,11763],{"class":1067},"        verification_url ",[1050,11765,1328],{"class":1071},[1050,11767,3069],{"class":3068},[1050,11769,1072],{"class":1071},[1050,11771,3009],{"class":3074},[1050,11773,1072],{"class":1071},[1050,11775,11776],{"class":2169},"build_absolute_uri",[1050,11778,3762],{"class":1071},[1050,11780,11781,11784,11786,11788,11791,11793,11795,11798,11801,11803,11806,11808,11810,11813,11815,11817,11819,11821,11823,11826],{"class":1052,"line":4819},[1050,11782,11783],{"class":2169},"            reverse",[1050,11785,2173],{"class":1071},[1050,11787,1345],{"class":1337},[1050,11789,11790],{"class":1341},"email_verify",[1050,11792,1345],{"class":1337},[1050,11794,1100],{"class":1071},[1050,11796,11797],{"class":2313}," kwargs",[1050,11799,11800],{"class":1071},"={",[1050,11802,1345],{"class":1337},[1050,11804,11805],{"class":1341},"uidb64",[1050,11807,1345],{"class":1337},[1050,11809,1348],{"class":1071},[1050,11811,11812],{"class":2169}," uid",[1050,11814,1100],{"class":1071},[1050,11816,1366],{"class":1337},[1050,11818,9445],{"class":1341},[1050,11820,1345],{"class":1337},[1050,11822,1348],{"class":1071},[1050,11824,11825],{"class":2169}," token",[1050,11827,7878],{"class":1071},[1050,11829,11830],{"class":1052,"line":4839},[1050,11831,3813],{"class":1071},[1050,11833,11834],{"class":1052,"line":4857},[1050,11835,1319],{"class":1067},[1050,11837,11838],{"class":1052,"line":4862},[1050,11839,11840],{"class":1056},"        # Send email\n",[1050,11842,11843,11845,11847,11849,11852],{"class":1052,"line":4867},[1050,11844,11228],{"class":1067},[1050,11846,1328],{"class":1071},[1050,11848,1366],{"class":1337},[1050,11850,11851],{"class":1341},"Verify Your Email Address",[1050,11853,1435],{"class":1337},[1050,11855,11856,11858,11860,11862,11864,11866,11869,11871,11873],{"class":1052,"line":4884},[1050,11857,11242],{"class":1067},[1050,11859,1328],{"class":1071},[1050,11861,11247],{"class":2169},[1050,11863,2173],{"class":1071},[1050,11865,1345],{"class":1337},[1050,11867,11868],{"class":1341},"auth/verification_email.html",[1050,11870,1345],{"class":1337},[1050,11872,1100],{"class":1071},[1050,11874,1331],{"class":1071},[1050,11876,11877,11879,11881,11883,11885,11887],{"class":1052,"line":4889},[1050,11878,1338],{"class":1337},[1050,11880,3463],{"class":1341},[1050,11882,1345],{"class":1337},[1050,11884,1348],{"class":1071},[1050,11886,3185],{"class":2169},[1050,11888,1116],{"class":1071},[1050,11890,11891,11893,11896,11898,11900,11903],{"class":1052,"line":4895},[1050,11892,1338],{"class":1337},[1050,11894,11895],{"class":1341},"verification_url",[1050,11897,1345],{"class":1337},[1050,11899,1348],{"class":1071},[1050,11901,11902],{"class":2169}," verification_url",[1050,11904,1116],{"class":1071},[1050,11906,11907,11909,11911,11913,11915,11917,11919,11921],{"class":1052,"line":4910},[1050,11908,1338],{"class":1337},[1050,11910,4400],{"class":1341},[1050,11912,1345],{"class":1337},[1050,11914,1348],{"class":1071},[1050,11916,1366],{"class":1337},[1050,11918,4409],{"class":1341},[1050,11920,1345],{"class":1337},[1050,11922,1116],{"class":1071},[1050,11924,11925],{"class":1052,"line":4920},[1050,11926,4468],{"class":1071},[1050,11928,11929],{"class":1052,"line":4925},[1050,11930,1319],{"class":1067},[1050,11932,11933,11935],{"class":1052,"line":4944},[1050,11934,8974],{"class":2169},[1050,11936,3762],{"class":1071},[1050,11938,11939,11941],{"class":1052,"line":4963},[1050,11940,11311],{"class":2169},[1050,11942,1116],{"class":1071},[1050,11944,11945,11947],{"class":1052,"line":4968},[1050,11946,11318],{"class":2169},[1050,11948,1116],{"class":1071},[1050,11950,11951,11953,11955,11957],{"class":1052,"line":4990},[1050,11952,9013],{"class":2169},[1050,11954,1072],{"class":1071},[1050,11956,9018],{"class":3079},[1050,11958,1116],{"class":1071},[1050,11960,11961,11963,11965,11967,11969],{"class":1052,"line":5017},[1050,11962,9025],{"class":1071},[1050,11964,3463],{"class":2169},[1050,11966,1072],{"class":1071},[1050,11968,8148],{"class":3074},[1050,11970,9034],{"class":1071},[1050,11972,11973,11975,11977,11979],{"class":1052,"line":5046},[1050,11974,9039],{"class":2313},[1050,11976,1328],{"class":1071},[1050,11978,10623],{"class":1529},[1050,11980,1116],{"class":1071},[1050,11982,11983],{"class":1052,"line":5073},[1050,11984,3813],{"class":1071},[1050,11986,11987],{"class":1052,"line":5078},[1050,11988,1245],{"emptyLinePlaceholder":1244},[1050,11990,11991,11993,11996,11998,12000,12002,12005,12007,12009],{"class":1052,"line":5084},[1050,11992,4898],{"class":1251},[1050,11994,11995],{"class":1298}," email_verify_view",[1050,11997,2173],{"class":1071},[1050,11999,3009],{"class":2971},[1050,12001,1100],{"class":1071},[1050,12003,12004],{"class":2971}," uidb64",[1050,12006,1100],{"class":1071},[1050,12008,11825],{"class":2971},[1050,12010,2862],{"class":1071},[1050,12012,12013,12015,12018],{"class":1052,"line":5117},[1050,12014,1266],{"class":1265},[1050,12016,12017],{"class":1269},"Verify email address",[1050,12019,1273],{"class":1265},[1050,12021,12022],{"class":1052,"line":5122},[1050,12023,1279],{"class":1067},[1050,12025,12026,12029],{"class":1052,"line":5140},[1050,12027,12028],{"class":1063},"    try",[1050,12030,1259],{"class":1071},[1050,12032,12033,12035,12037,12040,12042,12045,12047,12049],{"class":1052,"line":5155},[1050,12034,11727],{"class":1067},[1050,12036,1328],{"class":1071},[1050,12038,12039],{"class":2169}," force_str",[1050,12041,2173],{"class":1071},[1050,12043,12044],{"class":2169},"urlsafe_base64_decode",[1050,12046,2173],{"class":1071},[1050,12048,11805],{"class":2169},[1050,12050,11749],{"class":1071},[1050,12052,12053,12055,12057,12059,12061,12063,12065,12067,12069,12071,12073,12076],{"class":1052,"line":5161},[1050,12054,3161],{"class":1067},[1050,12056,1328],{"class":1071},[1050,12058,9550],{"class":1067},[1050,12060,1072],{"class":1071},[1050,12062,7058],{"class":3074},[1050,12064,1072],{"class":1071},[1050,12066,3085],{"class":2169},[1050,12068,2173],{"class":1071},[1050,12070,11746],{"class":2313},[1050,12072,1328],{"class":1071},[1050,12074,12075],{"class":2169},"uid",[1050,12077,1146],{"class":1071},[1050,12079,12080,12083,12085,12088,12090,12093,12095,12098,12100,12102,12104,12106],{"class":1052,"line":5177},[1050,12081,12082],{"class":1063},"    except",[1050,12084,10240],{"class":1071},[1050,12086,12087],{"class":1288},"TypeError",[1050,12089,1100],{"class":1071},[1050,12091,12092],{"class":1288}," ValueError",[1050,12094,1100],{"class":1071},[1050,12096,12097],{"class":1288}," OverflowError",[1050,12099,1100],{"class":1071},[1050,12101,9550],{"class":1067},[1050,12103,1072],{"class":1071},[1050,12105,9876],{"class":3074},[1050,12107,2862],{"class":1071},[1050,12109,12110,12112,12114],{"class":1052,"line":5183},[1050,12111,3161],{"class":1067},[1050,12113,1328],{"class":1071},[1050,12115,1530],{"class":1529},[1050,12117,12118],{"class":1052,"line":5189},[1050,12119,1279],{"class":1067},[1050,12121,12122,12124,12126,12128,12130,12132,12134,12136,12138,12141,12143,12145,12147,12149],{"class":1052,"line":5201},[1050,12123,4928],{"class":1063},[1050,12125,5127],{"class":1067},[1050,12127,5130],{"class":2977},[1050,12129,5133],{"class":2977},[1050,12131,1700],{"class":1529},[1050,12133,9233],{"class":2977},[1050,12135,11711],{"class":1067},[1050,12137,1072],{"class":1071},[1050,12139,12140],{"class":2169},"check_token",[1050,12142,2173],{"class":1071},[1050,12144,3463],{"class":2169},[1050,12146,1100],{"class":1071},[1050,12148,11825],{"class":2169},[1050,12150,2862],{"class":1071},[1050,12152,12153],{"class":1052,"line":5224},[1050,12154,12155],{"class":1056},"        # Activate user account\n",[1050,12157,12158,12160,12162,12164,12166],{"class":1052,"line":5229},[1050,12159,3827],{"class":1067},[1050,12161,1072],{"class":1071},[1050,12163,5150],{"class":3074},[1050,12165,3548],{"class":1071},[1050,12167,2908],{"class":1529},[1050,12169,12170,12172,12174,12176],{"class":1052,"line":5235},[1050,12171,3827],{"class":1067},[1050,12173,1072],{"class":1071},[1050,12175,3851],{"class":2169},[1050,12177,3396],{"class":1071},[1050,12179,12180],{"class":1052,"line":5281},[1050,12181,1319],{"class":1067},[1050,12183,12184],{"class":1052,"line":5286},[1050,12185,12186],{"class":1056},"        # Log in user\n",[1050,12188,12189,12191,12193,12195,12197,12199],{"class":1052,"line":5292},[1050,12190,11098],{"class":2169},[1050,12192,2173],{"class":1071},[1050,12194,3009],{"class":2169},[1050,12196,1100],{"class":1071},[1050,12198,3185],{"class":2169},[1050,12200,1146],{"class":1071},[1050,12202,12203],{"class":1052,"line":5342},[1050,12204,1319],{"class":1067},[1050,12206,12207,12209,12211,12213],{"class":1052,"line":5366},[1050,12208,3754],{"class":1067},[1050,12210,1072],{"class":1071},[1050,12212,3759],{"class":2169},[1050,12214,3762],{"class":1071},[1050,12216,12217,12220],{"class":1052,"line":5374},[1050,12218,12219],{"class":2169},"            request",[1050,12221,1116],{"class":1071},[1050,12223,12224,12226,12229],{"class":1052,"line":5398},[1050,12225,1338],{"class":1337},[1050,12227,12228],{"class":1341},"Your email has been verified successfully! Welcome to our site.",[1050,12230,1435],{"class":1337},[1050,12232,12233],{"class":1052,"line":5405},[1050,12234,3813],{"class":1071},[1050,12236,12237],{"class":1052,"line":5429},[1050,12238,1319],{"class":1067},[1050,12240,12241,12243,12245,12247,12249,12251,12253],{"class":1052,"line":5434},[1050,12242,2106],{"class":1063},[1050,12244,4949],{"class":2169},[1050,12246,2173],{"class":1071},[1050,12248,1345],{"class":1337},[1050,12250,4956],{"class":1341},[1050,12252,1345],{"class":1337},[1050,12254,1146],{"class":1071},[1050,12256,12257,12259],{"class":1052,"line":5444},[1050,12258,7818],{"class":1063},[1050,12260,1259],{"class":1071},[1050,12262,12263,12265,12267,12269],{"class":1052,"line":5480},[1050,12264,3754],{"class":1067},[1050,12266,1072],{"class":1071},[1050,12268,4266],{"class":2169},[1050,12270,3762],{"class":1071},[1050,12272,12273,12275],{"class":1052,"line":5486},[1050,12274,12219],{"class":2169},[1050,12276,1116],{"class":1071},[1050,12278,12279,12281,12284],{"class":1052,"line":5491},[1050,12280,1338],{"class":1337},[1050,12282,12283],{"class":1341},"The verification link is invalid or has expired.",[1050,12285,1435],{"class":1337},[1050,12287,12289],{"class":1052,"line":12288},199,[1050,12290,3813],{"class":1071},[1050,12292,12294],{"class":1052,"line":12293},200,[1050,12295,1319],{"class":1067},[1050,12297,12299,12301,12303,12305,12307,12310,12312],{"class":1052,"line":12298},201,[1050,12300,2106],{"class":1063},[1050,12302,4949],{"class":2169},[1050,12304,2173],{"class":1071},[1050,12306,1345],{"class":1337},[1050,12308,12309],{"class":1341},"register",[1050,12311,1345],{"class":1337},[1050,12313,1146],{"class":1071},[1050,12315,12317],{"class":1052,"line":12316},202,[1050,12318,1245],{"emptyLinePlaceholder":1244},[1050,12320,12322],{"class":1052,"line":12321},203,[1050,12323,12324],{"class":1056},"# Function-based registration view\n",[1050,12326,12328,12330,12333,12335,12337],{"class":1052,"line":12327},204,[1050,12329,4898],{"class":1251},[1050,12331,12332],{"class":1298}," register_view",[1050,12334,2173],{"class":1071},[1050,12336,3009],{"class":2971},[1050,12338,2862],{"class":1071},[1050,12340,12342,12344,12347],{"class":1052,"line":12341},205,[1050,12343,1266],{"class":1265},[1050,12345,12346],{"class":1269},"Function-based registration view",[1050,12348,1273],{"class":1265},[1050,12350,12352],{"class":1052,"line":12351},206,[1050,12353,1279],{"class":1067},[1050,12355,12357,12359,12361,12363,12365,12367,12369],{"class":1052,"line":12356},207,[1050,12358,4928],{"class":1063},[1050,12360,2972],{"class":1067},[1050,12362,1072],{"class":1071},[1050,12364,3463],{"class":3074},[1050,12366,1072],{"class":1071},[1050,12368,4939],{"class":3074},[1050,12370,1259],{"class":1071},[1050,12372,12374,12376,12378,12380,12382,12384,12386],{"class":1052,"line":12373},208,[1050,12375,2106],{"class":1063},[1050,12377,4949],{"class":2169},[1050,12379,2173],{"class":1071},[1050,12381,1345],{"class":1337},[1050,12383,4956],{"class":1341},[1050,12385,1345],{"class":1337},[1050,12387,1146],{"class":1071},[1050,12389,12391],{"class":1052,"line":12390},209,[1050,12392,1279],{"class":1067},[1050,12394,12396,12398,12400,12402,12404,12406,12408,12410,12412],{"class":1052,"line":12395},210,[1050,12397,4928],{"class":1063},[1050,12399,2972],{"class":1067},[1050,12401,1072],{"class":1071},[1050,12403,4977],{"class":3074},[1050,12405,4581],{"class":2977},[1050,12407,1366],{"class":1337},[1050,12409,3080],{"class":1341},[1050,12411,1345],{"class":1337},[1050,12413,1259],{"class":1071},[1050,12415,12417,12419,12421,12423,12425,12427,12429,12431],{"class":1052,"line":12416},211,[1050,12418,7671],{"class":1067},[1050,12420,1328],{"class":1071},[1050,12422,10048],{"class":2169},[1050,12424,2173],{"class":1071},[1050,12426,3009],{"class":2169},[1050,12428,1072],{"class":1071},[1050,12430,3080],{"class":3079},[1050,12432,1146],{"class":1071},[1050,12434,12436],{"class":1052,"line":12435},212,[1050,12437,1319],{"class":1067},[1050,12439,12441,12443,12445,12447,12449],{"class":1052,"line":12440},213,[1050,12442,3134],{"class":1063},[1050,12444,3340],{"class":1067},[1050,12446,1072],{"class":1071},[1050,12448,7709],{"class":2169},[1050,12450,1302],{"class":1071},[1050,12452,12454,12456,12458,12460,12462,12464],{"class":1052,"line":12453},214,[1050,12455,7716],{"class":1067},[1050,12457,1328],{"class":1071},[1050,12459,3340],{"class":1067},[1050,12461,1072],{"class":1071},[1050,12463,3851],{"class":2169},[1050,12465,3396],{"class":1071},[1050,12467,12469],{"class":1052,"line":12468},215,[1050,12470,4620],{"class":1067},[1050,12472,12474],{"class":1052,"line":12473},216,[1050,12475,12476],{"class":1056},"            # Log registration\n",[1050,12478,12480,12482],{"class":1052,"line":12479},217,[1050,12481,5702],{"class":1063},[1050,12483,3413],{"class":1067},[1050,12485,12487,12489,12491,12493,12495,12497,12499,12501,12503,12505],{"class":1052,"line":12486},218,[1050,12488,5709],{"class":1067},[1050,12490,1328],{"class":1071},[1050,12492,3423],{"class":1067},[1050,12494,1072],{"class":1071},[1050,12496,3428],{"class":2169},[1050,12498,2173],{"class":1071},[1050,12500,1345],{"class":1337},[1050,12502,1080],{"class":1341},[1050,12504,1345],{"class":1337},[1050,12506,1146],{"class":1071},[1050,12508,12510,12512,12514,12516,12518,12520,12522,12524,12526,12528,12530,12532,12534],{"class":1052,"line":12509},219,[1050,12511,5732],{"class":1067},[1050,12513,1072],{"class":1071},[1050,12515,3448],{"class":2169},[1050,12517,2173],{"class":1071},[1050,12519,3453],{"class":1251},[1050,12521,11033],{"class":1341},[1050,12523,3460],{"class":3459},[1050,12525,3463],{"class":2169},[1050,12527,1072],{"class":1071},[1050,12529,3468],{"class":3074},[1050,12531,3471],{"class":3459},[1050,12533,3507],{"class":1341},[1050,12535,1146],{"class":1071},[1050,12537,12539],{"class":1052,"line":12538},220,[1050,12540,4620],{"class":1067},[1050,12542,12544],{"class":1052,"line":12543},221,[1050,12545,12546],{"class":1056},"            # Auto-login\n",[1050,12548,12550,12552,12554,12556,12558,12560],{"class":1052,"line":12549},222,[1050,12551,4596],{"class":2169},[1050,12553,2173],{"class":1071},[1050,12555,3009],{"class":2169},[1050,12557,1100],{"class":1071},[1050,12559,3185],{"class":2169},[1050,12561,1146],{"class":1071},[1050,12563,12565],{"class":1052,"line":12564},223,[1050,12566,4620],{"class":1067},[1050,12568,12570,12572,12574,12576],{"class":1052,"line":12569},224,[1050,12571,4261],{"class":1067},[1050,12573,1072],{"class":1071},[1050,12575,3759],{"class":2169},[1050,12577,3762],{"class":1071},[1050,12579,12581,12583],{"class":1052,"line":12580},225,[1050,12582,5904],{"class":2169},[1050,12584,1116],{"class":1071},[1050,12586,12588,12590,12592,12594,12596,12598,12600,12602,12604,12606,12608,12610,12612],{"class":1052,"line":12587},226,[1050,12589,5956],{"class":1251},[1050,12591,5253],{"class":1341},[1050,12593,3460],{"class":3459},[1050,12595,3463],{"class":2169},[1050,12597,1072],{"class":1071},[1050,12599,3792],{"class":2169},[1050,12601,3795],{"class":1071},[1050,12603,3100],{"class":2977},[1050,12605,3185],{"class":2169},[1050,12607,1072],{"class":1071},[1050,12609,3468],{"class":3074},[1050,12611,3471],{"class":3459},[1050,12613,11166],{"class":1341},[1050,12615,12617,12619,12622],{"class":1052,"line":12616},227,[1050,12618,1356],{"class":1337},[1050,12620,12621],{"class":1341},"Your account has been created.",[1050,12623,1435],{"class":1337},[1050,12625,12627],{"class":1052,"line":12626},228,[1050,12628,4297],{"class":1071},[1050,12630,12632],{"class":1052,"line":12631},229,[1050,12633,4620],{"class":1067},[1050,12635,12637,12639,12641,12643,12645,12647,12649],{"class":1052,"line":12636},230,[1050,12638,3144],{"class":1063},[1050,12640,4949],{"class":2169},[1050,12642,2173],{"class":1071},[1050,12644,1345],{"class":1337},[1050,12646,4956],{"class":1341},[1050,12648,1345],{"class":1337},[1050,12650,1146],{"class":1071},[1050,12652,12654,12656],{"class":1052,"line":12653},231,[1050,12655,7818],{"class":1063},[1050,12657,1259],{"class":1071},[1050,12659,12661,12663,12665,12667],{"class":1052,"line":12660},232,[1050,12662,7671],{"class":1067},[1050,12664,1328],{"class":1071},[1050,12666,10048],{"class":2169},[1050,12668,3396],{"class":1071},[1050,12670,12672],{"class":1052,"line":12671},233,[1050,12673,1279],{"class":1067},[1050,12675,12677,12679,12681,12683,12685,12687,12689,12691,12693,12695,12697,12699,12701,12703,12705,12707],{"class":1052,"line":12676},234,[1050,12678,5494],{"class":1063},[1050,12680,1185],{"class":2169},[1050,12682,2173],{"class":1071},[1050,12684,3009],{"class":2169},[1050,12686,1100],{"class":1071},[1050,12688,1366],{"class":1337},[1050,12690,10787],{"class":1341},[1050,12692,1345],{"class":1337},[1050,12694,1100],{"class":1071},[1050,12696,7865],{"class":1071},[1050,12698,1345],{"class":1337},[1050,12700,3374],{"class":1341},[1050,12702,1345],{"class":1337},[1050,12704,1348],{"class":1071},[1050,12706,3340],{"class":2169},[1050,12708,7878],{"class":1071},[1030,12710,12712],{"id":12711},"profile-management-views","Profile Management Views",[1035,12714,12716],{"id":12715},"user-profile-views","User Profile Views",[1040,12718,12720],{"className":1042,"code":12719,"language":1044,"meta":1045,"style":1045},"# User profile management views\nfrom django.contrib.auth.decorators import login_required\nfrom django.contrib.auth.mixins import LoginRequiredMixin\n\nclass UserProfileForm(forms.ModelForm):\n    \"\"\"Form for editing user profile\"\"\"\n    \n    class Meta:\n        model = User\n        fields = ['first_name', 'last_name', 'email']\n    \n    def clean_email(self):\n        \"\"\"Validate email uniqueness\"\"\"\n        email = self.cleaned_data['email']\n        \n        # Exclude current user from uniqueness check\n        if User.objects.filter(email=email).exclude(pk=self.instance.pk).exists():\n            raise forms.ValidationError(\"A user with this email already exists.\")\n        \n        return email\n\nclass UserProfileView(LoginRequiredMixin, UpdateView):\n    \"\"\"User profile editing view\"\"\"\n    \n    model = User\n    form_class = UserProfileForm\n    template_name = 'auth/profile.html'\n    success_url = reverse_lazy('profile')\n    \n    def get_object(self):\n        \"\"\"Return current user as object\"\"\"\n        return self.request.user\n    \n    def form_valid(self, form):\n        \"\"\"Handle successful profile update\"\"\"\n        \n        response = super().form_valid(form)\n        \n        messages.success(\n            self.request,\n            'Your profile has been updated successfully.'\n        )\n        \n        return response\n\nclass UserProfileDetailView(LoginRequiredMixin, DetailView):\n    \"\"\"View user profile details\"\"\"\n    \n    model = User\n    template_name = 'auth/profile_detail.html'\n    context_object_name = 'profile_user'\n    \n    def get_object(self):\n        \"\"\"Return current user as object\"\"\"\n        return self.request.user\n    \n    def get_context_data(self, **kwargs):\n        \"\"\"Add additional context\"\"\"\n        \n        context = super().get_context_data(**kwargs)\n        \n        user = self.object\n        \n        context.update({\n            'user_stats': {\n                'date_joined': user.date_joined,\n                'last_login': user.last_login,\n                'is_staff': user.is_staff,\n                'groups': user.groups.all(),\n            },\n            'recent_activity': self.get_recent_activity(user),\n        })\n        \n        return context\n    \n    def get_recent_activity(self, user):\n        \"\"\"Get user's recent activity\"\"\"\n        \n        # This would depend on your activity tracking system\n        # Example implementation:\n        \n        activity = []\n        \n        # Recent posts\n        if hasattr(user, 'posts'):\n            recent_posts = user.posts.order_by('-created_at')[:5]\n            for post in recent_posts:\n                activity.append({\n                    'type': 'post_created',\n                    'description': f'Created post: {post.title}',\n                    'timestamp': post.created_at,\n                })\n        \n        # Recent comments\n        if hasattr(user, 'comments'):\n            recent_comments = user.comments.order_by('-created_at')[:5]\n            for comment in recent_comments:\n                activity.append({\n                    'type': 'comment_created',\n                    'description': f'Commented on: {comment.post.title}',\n                    'timestamp': comment.created_at,\n                })\n        \n        # Sort by timestamp\n        activity.sort(key=lambda x: x['timestamp'], reverse=True)\n        \n        return activity[:10]  # Return latest 10 activities\n\n@login_required\ndef profile_view(request):\n    \"\"\"Function-based profile view\"\"\"\n    \n    if request.method == 'POST':\n        form = UserProfileForm(request.POST, instance=request.user)\n        \n        if form.is_valid():\n            form.save()\n            messages.success(request, 'Profile updated successfully.')\n            return redirect('profile')\n    else:\n        form = UserProfileForm(instance=request.user)\n    \n    context = {\n        'form': form,\n        'user': request.user,\n    }\n    \n    return render(request, 'auth/profile.html', context)\n",[1047,12721,12722,12727,12749,12773,12777,12796,12805,12809,12817,12825,12857,12861,12873,12881,12903,12907,12912,12962,12982,12986,12992,12996,13015,13024,13028,13037,13046,13059,13077,13081,13094,13103,13117,13121,13137,13146,13150,13168,13172,13182,13192,13201,13205,13209,13215,13219,13237,13246,13250,13258,13271,13285,13289,13301,13309,13323,13327,13345,13353,13357,13377,13381,13393,13397,13407,13420,13439,13457,13475,13497,13501,13525,13529,13533,13539,13543,13560,13569,13573,13578,13583,13587,13596,13600,13605,13626,13660,13674,13685,13705,13737,13758,13762,13766,13771,13792,13823,13837,13847,13866,13900,13919,13923,13927,13932,13978,13982,14000,14004,14010,14023,14032,14036,14056,14087,14091,14103,14114,14137,14153,14159,14181,14185,14193,14207,14225,14229,14233],{"__ignoreMap":1045},[1050,12723,12724],{"class":1052,"line":1053},[1050,12725,12726],{"class":1056},"# User profile management views\n",[1050,12728,12729,12731,12733,12735,12737,12739,12741,12743,12745,12747],{"class":1052,"line":1060},[1050,12730,1064],{"class":1063},[1050,12732,1068],{"class":1067},[1050,12734,1072],{"class":1071},[1050,12736,1075],{"class":1067},[1050,12738,1072],{"class":1071},[1050,12740,1080],{"class":1067},[1050,12742,1072],{"class":1071},[1050,12744,2764],{"class":1067},[1050,12746,1088],{"class":1063},[1050,12748,6692],{"class":1067},[1050,12750,12751,12753,12755,12757,12759,12761,12763,12765,12768,12770],{"class":1052,"line":1094},[1050,12752,1064],{"class":1063},[1050,12754,1068],{"class":1067},[1050,12756,1072],{"class":1071},[1050,12758,1075],{"class":1067},[1050,12760,1072],{"class":1071},[1050,12762,1080],{"class":1067},[1050,12764,1072],{"class":1071},[1050,12766,12767],{"class":1067},"mixins ",[1050,12769,1088],{"class":1063},[1050,12771,12772],{"class":1067}," LoginRequiredMixin\n",[1050,12774,12775],{"class":1052,"line":1119},[1050,12776,1245],{"emptyLinePlaceholder":1244},[1050,12778,12779,12781,12784,12786,12789,12791,12794],{"class":1052,"line":1137},[1050,12780,1252],{"class":1251},[1050,12782,12783],{"class":1255}," UserProfileForm",[1050,12785,2173],{"class":1071},[1050,12787,12788],{"class":2859},"forms",[1050,12790,1072],{"class":1071},[1050,12792,12793],{"class":2859},"ModelForm",[1050,12795,2862],{"class":1071},[1050,12797,12798,12800,12803],{"class":1052,"line":1143},[1050,12799,1266],{"class":1265},[1050,12801,12802],{"class":1269},"Form for editing user profile",[1050,12804,1273],{"class":1265},[1050,12806,12807],{"class":1052,"line":1149},[1050,12808,1279],{"class":1067},[1050,12810,12811,12813,12815],{"class":1052,"line":1171},[1050,12812,10215],{"class":1251},[1050,12814,10218],{"class":1255},[1050,12816,1259],{"class":1071},[1050,12818,12819,12821,12823],{"class":1052,"line":1193},[1050,12820,10225],{"class":1067},[1050,12822,1328],{"class":1071},[1050,12824,10230],{"class":1067},[1050,12826,12827,12829,12831,12833,12835,12837,12839,12841,12843,12845,12847,12849,12851,12853,12855],{"class":1052,"line":1224},[1050,12828,10235],{"class":1067},[1050,12830,1328],{"class":1071},[1050,12832,10473],{"class":1071},[1050,12834,1345],{"class":1337},[1050,12836,10253],{"class":1341},[1050,12838,1345],{"class":1337},[1050,12840,1100],{"class":1071},[1050,12842,1366],{"class":1337},[1050,12844,10262],{"class":1341},[1050,12846,1345],{"class":1337},[1050,12848,1100],{"class":1071},[1050,12850,1366],{"class":1337},[1050,12852,8148],{"class":1341},[1050,12854,1345],{"class":1337},[1050,12856,3626],{"class":1071},[1050,12858,12859],{"class":1052,"line":1241},[1050,12860,1279],{"class":1067},[1050,12862,12863,12865,12867,12869,12871],{"class":1052,"line":1248},[1050,12864,1295],{"class":1251},[1050,12866,10303],{"class":1298},[1050,12868,2173],{"class":1071},[1050,12870,2966],{"class":2965},[1050,12872,2862],{"class":1071},[1050,12874,12875,12877,12879],{"class":1052,"line":1262},[1050,12876,1308],{"class":1265},[1050,12878,10316],{"class":1269},[1050,12880,1273],{"class":1265},[1050,12882,12883,12885,12887,12889,12891,12893,12895,12897,12899,12901],{"class":1052,"line":1276},[1050,12884,8133],{"class":1067},[1050,12886,1328],{"class":1071},[1050,12888,3069],{"class":3068},[1050,12890,1072],{"class":1071},[1050,12892,3955],{"class":3074},[1050,12894,3535],{"class":1071},[1050,12896,1345],{"class":1337},[1050,12898,8148],{"class":1341},[1050,12900,1345],{"class":1337},[1050,12902,3626],{"class":1071},[1050,12904,12905],{"class":1052,"line":1282},[1050,12906,1319],{"class":1067},[1050,12908,12909],{"class":1052,"line":1292},[1050,12910,12911],{"class":1056},"        # Exclude current user from uniqueness check\n",[1050,12913,12914,12916,12918,12920,12922,12924,12926,12928,12930,12932,12934,12936,12939,12941,12943,12945,12947,12949,12952,12954,12956,12958,12960],{"class":1052,"line":1305},[1050,12915,3134],{"class":1063},[1050,12917,9550],{"class":1067},[1050,12919,1072],{"class":1071},[1050,12921,7058],{"class":3074},[1050,12923,1072],{"class":1071},[1050,12925,3257],{"class":2169},[1050,12927,2173],{"class":1071},[1050,12929,8148],{"class":2313},[1050,12931,1328],{"class":1071},[1050,12933,8148],{"class":2169},[1050,12935,3274],{"class":1071},[1050,12937,12938],{"class":2169},"exclude",[1050,12940,2173],{"class":1071},[1050,12942,11746],{"class":2313},[1050,12944,1328],{"class":1071},[1050,12946,2966],{"class":3068},[1050,12948,1072],{"class":1071},[1050,12950,12951],{"class":3074},"instance",[1050,12953,1072],{"class":1071},[1050,12955,11746],{"class":3074},[1050,12957,3274],{"class":1071},[1050,12959,3277],{"class":2169},[1050,12961,1302],{"class":1071},[1050,12963,12964,12966,12968,12970,12972,12974,12976,12978,12980],{"class":1052,"line":1316},[1050,12965,10377],{"class":1063},[1050,12967,10078],{"class":1067},[1050,12969,1072],{"class":1071},[1050,12971,10384],{"class":2169},[1050,12973,2173],{"class":1071},[1050,12975,3507],{"class":1337},[1050,12977,10391],{"class":1341},[1050,12979,3507],{"class":1337},[1050,12981,1146],{"class":1071},[1050,12983,12984],{"class":1052,"line":1322},[1050,12985,1319],{"class":1067},[1050,12987,12988,12990],{"class":1052,"line":1334},[1050,12989,2106],{"class":1063},[1050,12991,10406],{"class":1067},[1050,12993,12994],{"class":1052,"line":1353},[1050,12995,1245],{"emptyLinePlaceholder":1244},[1050,12997,12998,13000,13003,13005,13008,13010,13013],{"class":1052,"line":1376},[1050,12999,1252],{"class":1251},[1050,13001,13002],{"class":1255}," UserProfileView",[1050,13004,2173],{"class":1071},[1050,13006,13007],{"class":2859},"LoginRequiredMixin",[1050,13009,1100],{"class":1071},[1050,13011,13012],{"class":2859}," UpdateView",[1050,13014,2862],{"class":1071},[1050,13016,13017,13019,13022],{"class":1052,"line":1397},[1050,13018,1266],{"class":1265},[1050,13020,13021],{"class":1269},"User profile editing view",[1050,13023,1273],{"class":1265},[1050,13025,13026],{"class":1052,"line":1418},[1050,13027,1279],{"class":1067},[1050,13029,13030,13033,13035],{"class":1052,"line":1438},[1050,13031,13032],{"class":1067},"    model ",[1050,13034,1328],{"class":1071},[1050,13036,10230],{"class":1067},[1050,13038,13039,13041,13043],{"class":1052,"line":1444},[1050,13040,2894],{"class":1067},[1050,13042,1328],{"class":1071},[1050,13044,13045],{"class":1067}," UserProfileForm\n",[1050,13047,13048,13050,13052,13054,13057],{"class":1052,"line":1458},[1050,13049,2880],{"class":1067},[1050,13051,1328],{"class":1071},[1050,13053,1366],{"class":1337},[1050,13055,13056],{"class":1341},"auth/profile.html",[1050,13058,1435],{"class":1337},[1050,13060,13061,13063,13065,13067,13069,13071,13073,13075],{"class":1052,"line":1478},[1050,13062,6740],{"class":1067},[1050,13064,1328],{"class":1071},[1050,13066,3199],{"class":2169},[1050,13068,2173],{"class":1071},[1050,13070,1345],{"class":1337},[1050,13072,6919],{"class":1341},[1050,13074,1345],{"class":1337},[1050,13076,1146],{"class":1071},[1050,13078,13079],{"class":1052,"line":1498},[1050,13080,1279],{"class":1067},[1050,13082,13083,13085,13088,13090,13092],{"class":1052,"line":1518},[1050,13084,1295],{"class":1251},[1050,13086,13087],{"class":1298}," get_object",[1050,13089,2173],{"class":1071},[1050,13091,2966],{"class":2965},[1050,13093,2862],{"class":1071},[1050,13095,13096,13098,13101],{"class":1052,"line":1533},[1050,13097,1308],{"class":1265},[1050,13099,13100],{"class":1269},"Return current user as object",[1050,13102,1273],{"class":1265},[1050,13104,13105,13107,13109,13111,13113,13115],{"class":1052,"line":1538},[1050,13106,2106],{"class":1063},[1050,13108,3069],{"class":3068},[1050,13110,1072],{"class":1071},[1050,13112,3009],{"class":3074},[1050,13114,1072],{"class":1071},[1050,13116,3174],{"class":3074},[1050,13118,13119],{"class":1052,"line":1552},[1050,13120,1279],{"class":1067},[1050,13122,13123,13125,13127,13129,13131,13133,13135],{"class":1052,"line":1572},[1050,13124,1295],{"class":1251},[1050,13126,3331],{"class":1298},[1050,13128,2173],{"class":1071},[1050,13130,2966],{"class":2965},[1050,13132,1100],{"class":1071},[1050,13134,3340],{"class":2971},[1050,13136,2862],{"class":1071},[1050,13138,13139,13141,13144],{"class":1052,"line":1592},[1050,13140,1308],{"class":1265},[1050,13142,13143],{"class":1269},"Handle successful profile update",[1050,13145,1273],{"class":1265},[1050,13147,13148],{"class":1052,"line":1612},[1050,13149,1319],{"class":1067},[1050,13151,13152,13154,13156,13158,13160,13162,13164,13166],{"class":1052,"line":1630},[1050,13153,3360],{"class":1067},[1050,13155,1328],{"class":1071},[1050,13157,2998],{"class":1288},[1050,13159,3001],{"class":1071},[1050,13161,3369],{"class":2169},[1050,13163,2173],{"class":1071},[1050,13165,3374],{"class":2169},[1050,13167,1146],{"class":1071},[1050,13169,13170],{"class":1052,"line":1635},[1050,13171,1319],{"class":1067},[1050,13173,13174,13176,13178,13180],{"class":1052,"line":1649},[1050,13175,3754],{"class":1067},[1050,13177,1072],{"class":1071},[1050,13179,3759],{"class":2169},[1050,13181,3762],{"class":1071},[1050,13183,13184,13186,13188,13190],{"class":1052,"line":1669},[1050,13185,3686],{"class":3068},[1050,13187,1072],{"class":1071},[1050,13189,3009],{"class":3074},[1050,13191,1116],{"class":1071},[1050,13193,13194,13196,13199],{"class":1052,"line":1689},[1050,13195,1338],{"class":1337},[1050,13197,13198],{"class":1341},"Your profile has been updated successfully.",[1050,13200,1435],{"class":1337},[1050,13202,13203],{"class":1052,"line":1705},[1050,13204,3813],{"class":1071},[1050,13206,13207],{"class":1052,"line":1718},[1050,13208,1319],{"class":1067},[1050,13210,13211,13213],{"class":1052,"line":1723},[1050,13212,2106],{"class":1063},[1050,13214,3879],{"class":1067},[1050,13216,13217],{"class":1052,"line":1737},[1050,13218,1245],{"emptyLinePlaceholder":1244},[1050,13220,13221,13223,13226,13228,13230,13232,13235],{"class":1052,"line":1757},[1050,13222,1252],{"class":1251},[1050,13224,13225],{"class":1255}," UserProfileDetailView",[1050,13227,2173],{"class":1071},[1050,13229,13007],{"class":2859},[1050,13231,1100],{"class":1071},[1050,13233,13234],{"class":2859}," DetailView",[1050,13236,2862],{"class":1071},[1050,13238,13239,13241,13244],{"class":1052,"line":1777},[1050,13240,1266],{"class":1265},[1050,13242,13243],{"class":1269},"View user profile details",[1050,13245,1273],{"class":1265},[1050,13247,13248],{"class":1052,"line":1797},[1050,13249,1279],{"class":1067},[1050,13251,13252,13254,13256],{"class":1052,"line":1815},[1050,13253,13032],{"class":1067},[1050,13255,1328],{"class":1071},[1050,13257,10230],{"class":1067},[1050,13259,13260,13262,13264,13266,13269],{"class":1052,"line":1820},[1050,13261,2880],{"class":1067},[1050,13263,1328],{"class":1071},[1050,13265,1366],{"class":1337},[1050,13267,13268],{"class":1341},"auth/profile_detail.html",[1050,13270,1435],{"class":1337},[1050,13272,13273,13276,13278,13280,13283],{"class":1052,"line":1834},[1050,13274,13275],{"class":1067},"    context_object_name ",[1050,13277,1328],{"class":1071},[1050,13279,1366],{"class":1337},[1050,13281,13282],{"class":1341},"profile_user",[1050,13284,1435],{"class":1337},[1050,13286,13287],{"class":1052,"line":1854},[1050,13288,1279],{"class":1067},[1050,13290,13291,13293,13295,13297,13299],{"class":1052,"line":1874},[1050,13292,1295],{"class":1251},[1050,13294,13087],{"class":1298},[1050,13296,2173],{"class":1071},[1050,13298,2966],{"class":2965},[1050,13300,2862],{"class":1071},[1050,13302,13303,13305,13307],{"class":1052,"line":1889},[1050,13304,1308],{"class":1265},[1050,13306,13100],{"class":1269},[1050,13308,1273],{"class":1265},[1050,13310,13311,13313,13315,13317,13319,13321],{"class":1052,"line":1902},[1050,13312,2106],{"class":1063},[1050,13314,3069],{"class":3068},[1050,13316,1072],{"class":1071},[1050,13318,3009],{"class":3074},[1050,13320,1072],{"class":1071},[1050,13322,3174],{"class":3074},[1050,13324,13325],{"class":1052,"line":1907},[1050,13326,1279],{"class":1067},[1050,13328,13329,13331,13333,13335,13337,13339,13341,13343],{"class":1052,"line":1921},[1050,13330,1295],{"class":1251},[1050,13332,4322],{"class":1298},[1050,13334,2173],{"class":1071},[1050,13336,2966],{"class":2965},[1050,13338,1100],{"class":1071},[1050,13340,2986],{"class":2977},[1050,13342,2989],{"class":2971},[1050,13344,2862],{"class":1071},[1050,13346,13347,13349,13351],{"class":1052,"line":1941},[1050,13348,1308],{"class":1265},[1050,13350,7501],{"class":1269},[1050,13352,1273],{"class":1265},[1050,13354,13355],{"class":1052,"line":1961},[1050,13356,1319],{"class":1067},[1050,13358,13359,13361,13363,13365,13367,13369,13371,13373,13375],{"class":1052,"line":1981},[1050,13360,4355],{"class":1067},[1050,13362,1328],{"class":1071},[1050,13364,2998],{"class":1288},[1050,13366,3001],{"class":1071},[1050,13368,4364],{"class":2169},[1050,13370,2173],{"class":1071},[1050,13372,4369],{"class":2977},[1050,13374,2989],{"class":2169},[1050,13376,1146],{"class":1071},[1050,13378,13379],{"class":1052,"line":1999},[1050,13380,1319],{"class":1067},[1050,13382,13383,13385,13387,13389,13391],{"class":1052,"line":2004},[1050,13384,3161],{"class":1067},[1050,13386,1328],{"class":1071},[1050,13388,3069],{"class":3068},[1050,13390,1072],{"class":1071},[1050,13392,10981],{"class":3074},[1050,13394,13395],{"class":1052,"line":2018},[1050,13396,1319],{"class":1067},[1050,13398,13399,13401,13403,13405],{"class":1052,"line":2038},[1050,13400,4384],{"class":1067},[1050,13402,1072],{"class":1071},[1050,13404,4389],{"class":2169},[1050,13406,4392],{"class":1071},[1050,13408,13409,13411,13414,13416,13418],{"class":1052,"line":2058},[1050,13410,1338],{"class":1337},[1050,13412,13413],{"class":1341},"user_stats",[1050,13415,1345],{"class":1337},[1050,13417,1348],{"class":1071},[1050,13419,1331],{"class":1071},[1050,13421,13422,13424,13427,13429,13431,13433,13435,13437],{"class":1052,"line":2073},[1050,13423,1356],{"class":1337},[1050,13425,13426],{"class":1341},"date_joined",[1050,13428,1345],{"class":1337},[1050,13430,1348],{"class":1071},[1050,13432,3185],{"class":2169},[1050,13434,1072],{"class":1071},[1050,13436,13426],{"class":3074},[1050,13438,1116],{"class":1071},[1050,13440,13441,13443,13445,13447,13449,13451,13453,13455],{"class":1052,"line":2086},[1050,13442,1356],{"class":1337},[1050,13444,3832],{"class":1341},[1050,13446,1345],{"class":1337},[1050,13448,1348],{"class":1071},[1050,13450,3185],{"class":2169},[1050,13452,1072],{"class":1071},[1050,13454,3832],{"class":3074},[1050,13456,1116],{"class":1071},[1050,13458,13459,13461,13463,13465,13467,13469,13471,13473],{"class":1052,"line":2092},[1050,13460,1356],{"class":1337},[1050,13462,3222],{"class":1341},[1050,13464,1345],{"class":1337},[1050,13466,1348],{"class":1071},[1050,13468,3185],{"class":2169},[1050,13470,1072],{"class":1071},[1050,13472,3222],{"class":3074},[1050,13474,1116],{"class":1071},[1050,13476,13477,13479,13481,13483,13485,13487,13489,13491,13493,13495],{"class":1052,"line":2098},[1050,13478,1356],{"class":1337},[1050,13480,3252],{"class":1341},[1050,13482,1345],{"class":1337},[1050,13484,1348],{"class":1071},[1050,13486,3185],{"class":2169},[1050,13488,1072],{"class":1071},[1050,13490,3252],{"class":3074},[1050,13492,1072],{"class":1071},[1050,13494,7063],{"class":2169},[1050,13496,5825],{"class":1071},[1050,13498,13499],{"class":1052,"line":2103},[1050,13500,1441],{"class":1071},[1050,13502,13503,13505,13508,13510,13512,13514,13516,13519,13521,13523],{"class":1052,"line":2112},[1050,13504,1338],{"class":1337},[1050,13506,13507],{"class":1341},"recent_activity",[1050,13509,1345],{"class":1337},[1050,13511,1348],{"class":1071},[1050,13513,3069],{"class":3068},[1050,13515,1072],{"class":1071},[1050,13517,13518],{"class":2169},"get_recent_activity",[1050,13520,2173],{"class":1071},[1050,13522,3463],{"class":2169},[1050,13524,2326],{"class":1071},[1050,13526,13527],{"class":1052,"line":2117},[1050,13528,4468],{"class":1071},[1050,13530,13531],{"class":1052,"line":2124},[1050,13532,1319],{"class":1067},[1050,13534,13535,13537],{"class":1052,"line":2134},[1050,13536,2106],{"class":1063},[1050,13538,4481],{"class":1067},[1050,13540,13541],{"class":1052,"line":2144},[1050,13542,1279],{"class":1067},[1050,13544,13545,13547,13550,13552,13554,13556,13558],{"class":1052,"line":2149},[1050,13546,1295],{"class":1251},[1050,13548,13549],{"class":1298}," get_recent_activity",[1050,13551,2173],{"class":1071},[1050,13553,2966],{"class":2965},[1050,13555,1100],{"class":1071},[1050,13557,3185],{"class":2971},[1050,13559,2862],{"class":1071},[1050,13561,13562,13564,13567],{"class":1052,"line":2155},[1050,13563,1308],{"class":1265},[1050,13565,13566],{"class":1269},"Get user's recent activity",[1050,13568,1273],{"class":1265},[1050,13570,13571],{"class":1052,"line":2166},[1050,13572,1319],{"class":1067},[1050,13574,13575],{"class":1052,"line":2200},[1050,13576,13577],{"class":1056},"        # This would depend on your activity tracking system\n",[1050,13579,13580],{"class":1052,"line":2206},[1050,13581,13582],{"class":1056},"        # Example implementation:\n",[1050,13584,13585],{"class":1052,"line":2211},[1050,13586,1319],{"class":1067},[1050,13588,13589,13592,13594],{"class":1052,"line":2217},[1050,13590,13591],{"class":1067},"        activity ",[1050,13593,1328],{"class":1071},[1050,13595,7040],{"class":1071},[1050,13597,13598],{"class":1052,"line":2223},[1050,13599,1319],{"class":1067},[1050,13601,13602],{"class":1052,"line":2229},[1050,13603,13604],{"class":1056},"        # Recent posts\n",[1050,13606,13607,13609,13611,13613,13615,13617,13619,13622,13624],{"class":1052,"line":2235},[1050,13608,3134],{"class":1063},[1050,13610,6908],{"class":6907},[1050,13612,2173],{"class":1071},[1050,13614,3463],{"class":2169},[1050,13616,1100],{"class":1071},[1050,13618,1366],{"class":1337},[1050,13620,13621],{"class":1341},"posts",[1050,13623,1345],{"class":1337},[1050,13625,2862],{"class":1071},[1050,13627,13628,13631,13633,13635,13637,13639,13641,13644,13646,13648,13651,13653,13655,13658],{"class":1052,"line":2241},[1050,13629,13630],{"class":1067},"            recent_posts ",[1050,13632,1328],{"class":1071},[1050,13634,3185],{"class":1067},[1050,13636,1072],{"class":1071},[1050,13638,13621],{"class":3074},[1050,13640,1072],{"class":1071},[1050,13642,13643],{"class":2169},"order_by",[1050,13645,2173],{"class":1071},[1050,13647,1345],{"class":1337},[1050,13649,13650],{"class":1341},"-created_at",[1050,13652,1345],{"class":1337},[1050,13654,3619],{"class":1071},[1050,13656,13657],{"class":3622},"5",[1050,13659,3626],{"class":1071},[1050,13661,13662,13664,13667,13669,13672],{"class":1052,"line":2247},[1050,13663,5888],{"class":1063},[1050,13665,13666],{"class":1067}," post ",[1050,13668,5894],{"class":1063},[1050,13670,13671],{"class":1067}," recent_posts",[1050,13673,1259],{"class":1071},[1050,13675,13676,13679,13681,13683],{"class":1052,"line":2253},[1050,13677,13678],{"class":1067},"                activity",[1050,13680,1072],{"class":1071},[1050,13682,7157],{"class":2169},[1050,13684,4392],{"class":1071},[1050,13686,13687,13689,13692,13694,13696,13698,13701,13703],{"class":1052,"line":2259},[1050,13688,6289],{"class":1337},[1050,13690,13691],{"class":1341},"type",[1050,13693,1345],{"class":1337},[1050,13695,1348],{"class":1071},[1050,13697,1366],{"class":1337},[1050,13699,13700],{"class":1341},"post_created",[1050,13702,1345],{"class":1337},[1050,13704,1116],{"class":1071},[1050,13706,13707,13709,13712,13714,13716,13718,13721,13723,13726,13728,13731,13733,13735],{"class":1052,"line":2265},[1050,13708,6289],{"class":1337},[1050,13710,13711],{"class":1341},"description",[1050,13713,1345],{"class":1337},[1050,13715,1348],{"class":1071},[1050,13717,4154],{"class":1251},[1050,13719,13720],{"class":1341},"'Created post: ",[1050,13722,3460],{"class":3459},[1050,13724,13725],{"class":2169},"post",[1050,13727,1072],{"class":1071},[1050,13729,13730],{"class":3074},"title",[1050,13732,3471],{"class":3459},[1050,13734,1345],{"class":1341},[1050,13736,1116],{"class":1071},[1050,13738,13739,13741,13744,13746,13748,13751,13753,13756],{"class":1052,"line":2270},[1050,13740,6289],{"class":1337},[1050,13742,13743],{"class":1341},"timestamp",[1050,13745,1345],{"class":1337},[1050,13747,1348],{"class":1071},[1050,13749,13750],{"class":2169}," post",[1050,13752,1072],{"class":1071},[1050,13754,13755],{"class":3074},"created_at",[1050,13757,1116],{"class":1071},[1050,13759,13760],{"class":1052,"line":2276},[1050,13761,6347],{"class":1071},[1050,13763,13764],{"class":1052,"line":2286},[1050,13765,1319],{"class":1067},[1050,13767,13768],{"class":1052,"line":2329},[1050,13769,13770],{"class":1056},"        # Recent comments\n",[1050,13772,13773,13775,13777,13779,13781,13783,13785,13788,13790],{"class":1052,"line":2366},[1050,13774,3134],{"class":1063},[1050,13776,6908],{"class":6907},[1050,13778,2173],{"class":1071},[1050,13780,3463],{"class":2169},[1050,13782,1100],{"class":1071},[1050,13784,1366],{"class":1337},[1050,13786,13787],{"class":1341},"comments",[1050,13789,1345],{"class":1337},[1050,13791,2862],{"class":1071},[1050,13793,13794,13797,13799,13801,13803,13805,13807,13809,13811,13813,13815,13817,13819,13821],{"class":1052,"line":2403},[1050,13795,13796],{"class":1067},"            recent_comments ",[1050,13798,1328],{"class":1071},[1050,13800,3185],{"class":1067},[1050,13802,1072],{"class":1071},[1050,13804,13787],{"class":3074},[1050,13806,1072],{"class":1071},[1050,13808,13643],{"class":2169},[1050,13810,2173],{"class":1071},[1050,13812,1345],{"class":1337},[1050,13814,13650],{"class":1341},[1050,13816,1345],{"class":1337},[1050,13818,3619],{"class":1071},[1050,13820,13657],{"class":3622},[1050,13822,3626],{"class":1071},[1050,13824,13825,13827,13830,13832,13835],{"class":1052,"line":2439},[1050,13826,5888],{"class":1063},[1050,13828,13829],{"class":1067}," comment ",[1050,13831,5894],{"class":1063},[1050,13833,13834],{"class":1067}," recent_comments",[1050,13836,1259],{"class":1071},[1050,13838,13839,13841,13843,13845],{"class":1052,"line":2477},[1050,13840,13678],{"class":1067},[1050,13842,1072],{"class":1071},[1050,13844,7157],{"class":2169},[1050,13846,4392],{"class":1071},[1050,13848,13849,13851,13853,13855,13857,13859,13862,13864],{"class":1052,"line":2513},[1050,13850,6289],{"class":1337},[1050,13852,13691],{"class":1341},[1050,13854,1345],{"class":1337},[1050,13856,1348],{"class":1071},[1050,13858,1366],{"class":1337},[1050,13860,13861],{"class":1341},"comment_created",[1050,13863,1345],{"class":1337},[1050,13865,1116],{"class":1071},[1050,13867,13868,13870,13872,13874,13876,13878,13881,13883,13886,13888,13890,13892,13894,13896,13898],{"class":1052,"line":2550},[1050,13869,6289],{"class":1337},[1050,13871,13711],{"class":1341},[1050,13873,1345],{"class":1337},[1050,13875,1348],{"class":1071},[1050,13877,4154],{"class":1251},[1050,13879,13880],{"class":1341},"'Commented on: ",[1050,13882,3460],{"class":3459},[1050,13884,13885],{"class":2169},"comment",[1050,13887,1072],{"class":1071},[1050,13889,13725],{"class":3074},[1050,13891,1072],{"class":1071},[1050,13893,13730],{"class":3074},[1050,13895,3471],{"class":3459},[1050,13897,1345],{"class":1341},[1050,13899,1116],{"class":1071},[1050,13901,13902,13904,13906,13908,13910,13913,13915,13917],{"class":1052,"line":2587},[1050,13903,6289],{"class":1337},[1050,13905,13743],{"class":1341},[1050,13907,1345],{"class":1337},[1050,13909,1348],{"class":1071},[1050,13911,13912],{"class":2169}," comment",[1050,13914,1072],{"class":1071},[1050,13916,13755],{"class":3074},[1050,13918,1116],{"class":1071},[1050,13920,13921],{"class":1052,"line":2592},[1050,13922,6347],{"class":1071},[1050,13924,13925],{"class":1052,"line":2597},[1050,13926,1319],{"class":1067},[1050,13928,13929],{"class":1052,"line":4169},[1050,13930,13931],{"class":1056},"        # Sort by timestamp\n",[1050,13933,13934,13937,13939,13942,13944,13946,13948,13951,13954,13956,13958,13960,13962,13964,13966,13969,13972,13974,13976],{"class":1052,"line":4174},[1050,13935,13936],{"class":1067},"        activity",[1050,13938,1072],{"class":1071},[1050,13940,13941],{"class":2169},"sort",[1050,13943,2173],{"class":1071},[1050,13945,5918],{"class":2313},[1050,13947,1328],{"class":1071},[1050,13949,13950],{"class":1251},"lambda",[1050,13952,13953],{"class":2971}," x",[1050,13955,1348],{"class":1071},[1050,13957,13953],{"class":2169},[1050,13959,3535],{"class":1071},[1050,13961,1345],{"class":1337},[1050,13963,13743],{"class":1341},[1050,13965,1345],{"class":1337},[1050,13967,13968],{"class":1071},"],",[1050,13970,13971],{"class":2313}," reverse",[1050,13973,1328],{"class":1071},[1050,13975,9044],{"class":1529},[1050,13977,1146],{"class":1071},[1050,13979,13980],{"class":1052,"line":4207},[1050,13981,1319],{"class":1067},[1050,13983,13984,13986,13989,13992,13995,13997],{"class":1052,"line":4237},[1050,13985,2106],{"class":1063},[1050,13987,13988],{"class":1067}," activity",[1050,13990,13991],{"class":1071},"[:",[1050,13993,13994],{"class":3622},"10",[1050,13996,3545],{"class":1071},[1050,13998,13999],{"class":1056},"  # Return latest 10 activities\n",[1050,14001,14002],{"class":1052,"line":4242},[1050,14003,1245],{"emptyLinePlaceholder":1244},[1050,14005,14006,14008],{"class":1052,"line":4258},[1050,14007,7617],{"class":1071},[1050,14009,7620],{"class":1298},[1050,14011,14012,14014,14017,14019,14021],{"class":1052,"line":4271},[1050,14013,4898],{"class":1251},[1050,14015,14016],{"class":1298}," profile_view",[1050,14018,2173],{"class":1071},[1050,14020,3009],{"class":2971},[1050,14022,2862],{"class":1071},[1050,14024,14025,14027,14030],{"class":1052,"line":4283},[1050,14026,1266],{"class":1265},[1050,14028,14029],{"class":1269},"Function-based profile view",[1050,14031,1273],{"class":1265},[1050,14033,14034],{"class":1052,"line":4294},[1050,14035,1279],{"class":1067},[1050,14037,14038,14040,14042,14044,14046,14048,14050,14052,14054],{"class":1052,"line":4300},[1050,14039,4928],{"class":1063},[1050,14041,2972],{"class":1067},[1050,14043,1072],{"class":1071},[1050,14045,4977],{"class":3074},[1050,14047,4581],{"class":2977},[1050,14049,1366],{"class":1337},[1050,14051,3080],{"class":1341},[1050,14053,1345],{"class":1337},[1050,14055,1259],{"class":1071},[1050,14057,14058,14060,14062,14064,14066,14068,14070,14072,14074,14077,14079,14081,14083,14085],{"class":1052,"line":4305},[1050,14059,7671],{"class":1067},[1050,14061,1328],{"class":1071},[1050,14063,12783],{"class":2169},[1050,14065,2173],{"class":1071},[1050,14067,3009],{"class":2169},[1050,14069,1072],{"class":1071},[1050,14071,3080],{"class":3079},[1050,14073,1100],{"class":1071},[1050,14075,14076],{"class":2313}," instance",[1050,14078,1328],{"class":1071},[1050,14080,3009],{"class":2169},[1050,14082,1072],{"class":1071},[1050,14084,3463],{"class":3074},[1050,14086,1146],{"class":1071},[1050,14088,14089],{"class":1052,"line":4312},[1050,14090,1319],{"class":1067},[1050,14092,14093,14095,14097,14099,14101],{"class":1052,"line":4317},[1050,14094,3134],{"class":1063},[1050,14096,3340],{"class":1067},[1050,14098,1072],{"class":1071},[1050,14100,7709],{"class":2169},[1050,14102,1302],{"class":1071},[1050,14104,14105,14108,14110,14112],{"class":1052,"line":4337},[1050,14106,14107],{"class":1067},"            form",[1050,14109,1072],{"class":1071},[1050,14111,3851],{"class":2169},[1050,14113,3396],{"class":1071},[1050,14115,14116,14118,14120,14122,14124,14126,14128,14130,14133,14135],{"class":1052,"line":4347},[1050,14117,4261],{"class":1067},[1050,14119,1072],{"class":1071},[1050,14121,3759],{"class":2169},[1050,14123,2173],{"class":1071},[1050,14125,3009],{"class":2169},[1050,14127,1100],{"class":1071},[1050,14129,1366],{"class":1337},[1050,14131,14132],{"class":1341},"Profile updated successfully.",[1050,14134,1345],{"class":1337},[1050,14136,1146],{"class":1071},[1050,14138,14139,14141,14143,14145,14147,14149,14151],{"class":1052,"line":4352},[1050,14140,3144],{"class":1063},[1050,14142,4949],{"class":2169},[1050,14144,2173],{"class":1071},[1050,14146,1345],{"class":1337},[1050,14148,6919],{"class":1341},[1050,14150,1345],{"class":1337},[1050,14152,1146],{"class":1071},[1050,14154,14155,14157],{"class":1052,"line":4376},[1050,14156,7818],{"class":1063},[1050,14158,1259],{"class":1071},[1050,14160,14161,14163,14165,14167,14169,14171,14173,14175,14177,14179],{"class":1052,"line":4381},[1050,14162,7671],{"class":1067},[1050,14164,1328],{"class":1071},[1050,14166,12783],{"class":2169},[1050,14168,2173],{"class":1071},[1050,14170,12951],{"class":2313},[1050,14172,1328],{"class":1071},[1050,14174,3009],{"class":2169},[1050,14176,1072],{"class":1071},[1050,14178,3463],{"class":3074},[1050,14180,1146],{"class":1071},[1050,14182,14183],{"class":1052,"line":4395},[1050,14184,1279],{"class":1067},[1050,14186,14187,14189,14191],{"class":1052,"line":4416},[1050,14188,5437],{"class":1067},[1050,14190,1328],{"class":1071},[1050,14192,1331],{"class":1071},[1050,14194,14195,14197,14199,14201,14203,14205],{"class":1052,"line":4433},[1050,14196,5447],{"class":1337},[1050,14198,3374],{"class":1341},[1050,14200,1345],{"class":1337},[1050,14202,1348],{"class":1071},[1050,14204,3340],{"class":1067},[1050,14206,1116],{"class":1071},[1050,14208,14209,14211,14213,14215,14217,14219,14221,14223],{"class":1052,"line":4449},[1050,14210,5447],{"class":1337},[1050,14212,3463],{"class":1341},[1050,14214,1345],{"class":1337},[1050,14216,1348],{"class":1071},[1050,14218,2972],{"class":1067},[1050,14220,1072],{"class":1071},[1050,14222,3463],{"class":3074},[1050,14224,1116],{"class":1071},[1050,14226,14227],{"class":1052,"line":4465},[1050,14228,5483],{"class":1071},[1050,14230,14231],{"class":1052,"line":4471},[1050,14232,1279],{"class":1067},[1050,14234,14235,14237,14239,14241,14243,14245,14247,14249,14251,14253,14255],{"class":1052,"line":4476},[1050,14236,5494],{"class":1063},[1050,14238,1185],{"class":2169},[1050,14240,2173],{"class":1071},[1050,14242,3009],{"class":2169},[1050,14244,1100],{"class":1071},[1050,14246,1366],{"class":1337},[1050,14248,13056],{"class":1341},[1050,14250,1345],{"class":1337},[1050,14252,1100],{"class":1071},[1050,14254,5513],{"class":2169},[1050,14256,1146],{"class":1071},[1030,14258,14260],{"id":14259},"account-management-views","Account Management Views",[1035,14262,14264],{"id":14263},"account-settings-and-security","Account Settings and Security",[1040,14266,14268],{"className":1042,"code":14267,"language":1044,"meta":1045,"style":1045},"# Account management and security views\nclass AccountSettingsView(LoginRequiredMixin, TemplateView):\n    \"\"\"Account settings dashboard\"\"\"\n    \n    template_name = 'auth/account_settings.html'\n    \n    def get_context_data(self, **kwargs):\n        \"\"\"Add account information to context\"\"\"\n        \n        context = super().get_context_data(**kwargs)\n        \n        user = self.request.user\n        \n        context.update({\n            'user': user,\n            'security_info': {\n                'password_last_changed': getattr(user, 'password_changed_at', None),\n                'two_factor_enabled': getattr(user.profile, 'two_factor_enabled', False) if hasattr(user, 'profile') else False,\n                'active_sessions': self.get_active_sessions(user),\n            },\n            'privacy_settings': self.get_privacy_settings(user),\n            'notification_settings': self.get_notification_settings(user),\n        })\n        \n        return context\n    \n    def get_active_sessions(self, user):\n        \"\"\"Get user's active sessions\"\"\"\n        \n        from django.contrib.sessions.models import Session\n        \n        active_sessions = []\n        current_session_key = self.request.session.session_key\n        \n        for session in Session.objects.filter(expire_date__gt=timezone.now()):\n            try:\n                session_data = session.get_decoded()\n                session_user_id = session_data.get('_auth_user_id')\n                \n                if session_user_id and int(session_user_id) == user.id:\n                    active_sessions.append({\n                        'session_key': session.session_key,\n                        'is_current': session.session_key == current_session_key,\n                        'expire_date': session.expire_date,\n                        'ip_address': session_data.get('ip_address', 'Unknown'),\n                        'user_agent': session_data.get('user_agent', 'Unknown')[:50],\n                    })\n            except:\n                continue\n        \n        return active_sessions\n    \n    def get_privacy_settings(self, user):\n        \"\"\"Get user's privacy settings\"\"\"\n        \n        # This would depend on your privacy settings implementation\n        if hasattr(user, 'profile'):\n            return {\n                'profile_public': getattr(user.profile, 'profile_public', True),\n                'email_public': getattr(user.profile, 'email_public', False),\n                'activity_public': getattr(user.profile, 'activity_public', True),\n            }\n        \n        return {}\n    \n    def get_notification_settings(self, user):\n        \"\"\"Get user's notification settings\"\"\"\n        \n        # This would depend on your notification system\n        if hasattr(user, 'profile'):\n            return {\n                'email_notifications': getattr(user.profile, 'email_notifications', True),\n                'push_notifications': getattr(user.profile, 'push_notifications', False),\n                'marketing_emails': getattr(user.profile, 'marketing_emails', False),\n            }\n        \n        return {}\n\nclass TerminateSessionView(LoginRequiredMixin, View):\n    \"\"\"Terminate specific user session\"\"\"\n    \n    def post(self, request, *args, **kwargs):\n        \"\"\"Terminate session\"\"\"\n        \n        session_key = request.POST.get('session_key')\n        \n        if session_key and session_key != request.session.session_key:\n            try:\n                from django.contrib.sessions.models import Session\n                \n                session = Session.objects.get(session_key=session_key)\n                \n                # Verify session belongs to current user\n                session_data = session.get_decoded()\n                session_user_id = session_data.get('_auth_user_id')\n                \n                if session_user_id and int(session_user_id) == request.user.id:\n                    session.delete()\n                    messages.success(request, 'Session terminated successfully.')\n                else:\n                    messages.error(request, 'Invalid session.')\n            \n            except Session.DoesNotExist:\n                messages.error(request, 'Session not found.')\n        else:\n            messages.error(request, 'Cannot terminate current session.')\n        \n        return redirect('account_settings')\n\nclass DeleteAccountView(LoginRequiredMixin, TemplateView):\n    \"\"\"Account deletion view\"\"\"\n    \n    template_name = 'auth/delete_account.html'\n    \n    def post(self, request, *args, **kwargs):\n        \"\"\"Handle account deletion\"\"\"\n        \n        password = request.POST.get('password')\n        confirmation = request.POST.get('confirmation')\n        \n        # Verify password\n        if not request.user.check_password(password):\n            messages.error(request, 'Incorrect password.')\n            return self.get(request, *args, **kwargs)\n        \n        # Verify confirmation\n        if confirmation != 'DELETE':\n            messages.error(request, 'Please type DELETE to confirm.')\n            return self.get(request, *args, **kwargs)\n        \n        # Log account deletion\n        import logging\n        logger = logging.getLogger('auth')\n        logger.info(f\"Account deleted: {request.user.username}\")\n        \n        # Store user info before deletion\n        username = request.user.username\n        \n        # Delete user account\n        request.user.delete()\n        \n        # Log out and redirect\n        logout(request)\n        \n        messages.success(\n            request,\n            f'Account {username} has been deleted successfully.'\n        )\n        \n        return redirect('home')\n\n# Two-factor authentication setup\nclass TwoFactorSetupView(LoginRequiredMixin, TemplateView):\n    \"\"\"Two-factor authentication setup\"\"\"\n    \n    template_name = 'auth/2fa_setup.html'\n    \n    def get_context_data(self, **kwargs):\n        \"\"\"Add 2FA setup context\"\"\"\n        \n        context = super().get_context_data(**kwargs)\n        \n        user = self.request.user\n        \n        # Generate TOTP secret if not exists\n        if not hasattr(user, 'profile') or not user.profile.totp_secret:\n            import pyotp\n            secret = pyotp.random_base32()\n            \n            if hasattr(user, 'profile'):\n                user.profile.totp_secret = secret\n                user.profile.save()\n        else:\n            secret = user.profile.totp_secret\n        \n        # Generate QR code\n        import pyotp\n        import qrcode\n        from io import BytesIO\n        import base64\n        \n        totp_uri = pyotp.totp.TOTP(secret).provisioning_uri(\n            name=user.email,\n            issuer_name=\"Your Site Name\"\n        )\n        \n        qr = qrcode.QRCode(version=1, box_size=10, border=5)\n        qr.add_data(totp_uri)\n        qr.make(fit=True)\n        \n        img = qr.make_image(fill_color=\"black\", back_color=\"white\")\n        buffer = BytesIO()\n        img.save(buffer, format='PNG')\n        buffer.seek(0)\n        \n        qr_code_data = base64.b64encode(buffer.getvalue()).decode()\n        \n        context.update({\n            'secret': secret,\n            'qr_code': qr_code_data,\n            'totp_uri': totp_uri,\n        })\n        \n        return context\n    \n    def post(self, request, *args, **kwargs):\n        \"\"\"Verify and enable 2FA\"\"\"\n        \n        token = request.POST.get('token')\n        \n        if hasattr(request.user, 'profile') and request.user.profile.totp_secret:\n            import pyotp\n            \n            totp = pyotp.TOTP(request.user.profile.totp_secret)\n            \n            if totp.verify(token, valid_window=1):\n                # Enable 2FA\n                request.user.profile.two_factor_enabled = True\n                request.user.profile.save()\n                \n                messages.success(\n                    request,\n                    'Two-factor authentication has been enabled successfully.'\n                )\n                \n                return redirect('account_settings')\n            else:\n                messages.error(request, 'Invalid verification code.')\n        else:\n            messages.error(request, 'Two-factor authentication not properly configured.')\n        \n        return self.get(request, *args, **kwargs)\n",[1047,14269,14270,14275,14293,14302,14306,14319,14323,14341,14350,14354,14374,14378,14394,14398,14408,14422,14435,14467,14527,14551,14555,14579,14603,14607,14611,14617,14621,14638,14647,14651,14673,14677,14686,14706,14710,14745,14751,14765,14788,14792,14822,14833,14852,14875,14894,14929,14968,14973,14979,14983,14987,14994,14998,15015,15024,15028,15033,15053,15059,15094,15129,15164,15168,15172,15179,15183,15200,15209,15213,15218,15238,15244,15279,15314,15349,15353,15357,15363,15367,15385,15394,15398,15426,15435,15439,15466,15470,15496,15502,15525,15529,15556,15560,15565,15579,15601,15605,15635,15645,15668,15674,15697,15701,15713,15736,15742,15765,15769,15786,15790,15807,15816,15820,15833,15837,15865,15874,15878,15904,15932,15936,15941,15964,15987,16015,16019,16024,16042,16065,16093,16097,16102,16108,16130,16163,16167,16172,16188,16192,16197,16211,16215,16220,16230,16234,16244,16250,16266,16270,16274,16290,16294,16299,16316,16325,16329,16342,16346,16364,16373,16377,16397,16401,16417,16421,16426,16464,16470,16486,16490,16510,16528,16542,16548,16565,16569,16574,16580,16587,16599,16606,16610,16640,16655,16668,16672,16676,16720,16737,16757,16761,16806,16818,16848,16864,16868,16900,16904,16914,16929,16945,16960,16964,16968,16974,16978,17006,17015,17019,17045,17049,17091,17097,17101,17132,17136,17160,17165,17185,17203,17207,17217,17223,17232,17237,17241,17257,17263,17285,17291,17313,17317],{"__ignoreMap":1045},[1050,14271,14272],{"class":1052,"line":1053},[1050,14273,14274],{"class":1056},"# Account management and security views\n",[1050,14276,14277,14279,14282,14284,14286,14288,14291],{"class":1052,"line":1060},[1050,14278,1252],{"class":1251},[1050,14280,14281],{"class":1255}," AccountSettingsView",[1050,14283,2173],{"class":1071},[1050,14285,13007],{"class":2859},[1050,14287,1100],{"class":1071},[1050,14289,14290],{"class":2859}," TemplateView",[1050,14292,2862],{"class":1071},[1050,14294,14295,14297,14300],{"class":1052,"line":1094},[1050,14296,1266],{"class":1265},[1050,14298,14299],{"class":1269},"Account settings dashboard",[1050,14301,1273],{"class":1265},[1050,14303,14304],{"class":1052,"line":1119},[1050,14305,1279],{"class":1067},[1050,14307,14308,14310,14312,14314,14317],{"class":1052,"line":1137},[1050,14309,2880],{"class":1067},[1050,14311,1328],{"class":1071},[1050,14313,1366],{"class":1337},[1050,14315,14316],{"class":1341},"auth/account_settings.html",[1050,14318,1435],{"class":1337},[1050,14320,14321],{"class":1052,"line":1143},[1050,14322,1279],{"class":1067},[1050,14324,14325,14327,14329,14331,14333,14335,14337,14339],{"class":1052,"line":1149},[1050,14326,1295],{"class":1251},[1050,14328,4322],{"class":1298},[1050,14330,2173],{"class":1071},[1050,14332,2966],{"class":2965},[1050,14334,1100],{"class":1071},[1050,14336,2986],{"class":2977},[1050,14338,2989],{"class":2971},[1050,14340,2862],{"class":1071},[1050,14342,14343,14345,14348],{"class":1052,"line":1171},[1050,14344,1308],{"class":1265},[1050,14346,14347],{"class":1269},"Add account information to context",[1050,14349,1273],{"class":1265},[1050,14351,14352],{"class":1052,"line":1193},[1050,14353,1319],{"class":1067},[1050,14355,14356,14358,14360,14362,14364,14366,14368,14370,14372],{"class":1052,"line":1224},[1050,14357,4355],{"class":1067},[1050,14359,1328],{"class":1071},[1050,14361,2998],{"class":1288},[1050,14363,3001],{"class":1071},[1050,14365,4364],{"class":2169},[1050,14367,2173],{"class":1071},[1050,14369,4369],{"class":2977},[1050,14371,2989],{"class":2169},[1050,14373,1146],{"class":1071},[1050,14375,14376],{"class":1052,"line":1241},[1050,14377,1319],{"class":1067},[1050,14379,14380,14382,14384,14386,14388,14390,14392],{"class":1052,"line":1248},[1050,14381,3161],{"class":1067},[1050,14383,1328],{"class":1071},[1050,14385,3069],{"class":3068},[1050,14387,1072],{"class":1071},[1050,14389,3009],{"class":3074},[1050,14391,1072],{"class":1071},[1050,14393,3174],{"class":3074},[1050,14395,14396],{"class":1052,"line":1262},[1050,14397,1319],{"class":1067},[1050,14399,14400,14402,14404,14406],{"class":1052,"line":1276},[1050,14401,4384],{"class":1067},[1050,14403,1072],{"class":1071},[1050,14405,4389],{"class":2169},[1050,14407,4392],{"class":1071},[1050,14409,14410,14412,14414,14416,14418,14420],{"class":1052,"line":1282},[1050,14411,1338],{"class":1337},[1050,14413,3463],{"class":1341},[1050,14415,1345],{"class":1337},[1050,14417,1348],{"class":1071},[1050,14419,3185],{"class":2169},[1050,14421,1116],{"class":1071},[1050,14423,14424,14426,14429,14431,14433],{"class":1052,"line":1292},[1050,14425,1338],{"class":1337},[1050,14427,14428],{"class":1341},"security_info",[1050,14430,1345],{"class":1337},[1050,14432,1348],{"class":1071},[1050,14434,1331],{"class":1071},[1050,14436,14437,14439,14442,14444,14446,14449,14451,14453,14455,14457,14459,14461,14463,14465],{"class":1052,"line":1305},[1050,14438,1356],{"class":1337},[1050,14440,14441],{"class":1341},"password_last_changed",[1050,14443,1345],{"class":1337},[1050,14445,1348],{"class":1071},[1050,14447,14448],{"class":6907}," getattr",[1050,14450,2173],{"class":1071},[1050,14452,3463],{"class":2169},[1050,14454,1100],{"class":1071},[1050,14456,1366],{"class":1337},[1050,14458,6937],{"class":1341},[1050,14460,1345],{"class":1337},[1050,14462,1100],{"class":1071},[1050,14464,1700],{"class":1529},[1050,14466,2326],{"class":1071},[1050,14468,14469,14471,14473,14475,14477,14479,14481,14483,14485,14487,14489,14491,14493,14495,14497,14499,14501,14504,14506,14508,14510,14512,14514,14516,14518,14520,14523,14525],{"class":1052,"line":1316},[1050,14470,1356],{"class":1337},[1050,14472,9244],{"class":1341},[1050,14474,1345],{"class":1337},[1050,14476,1348],{"class":1071},[1050,14478,14448],{"class":6907},[1050,14480,2173],{"class":1071},[1050,14482,3463],{"class":2169},[1050,14484,1072],{"class":1071},[1050,14486,6919],{"class":3074},[1050,14488,1100],{"class":1071},[1050,14490,1366],{"class":1337},[1050,14492,9244],{"class":1341},[1050,14494,1345],{"class":1337},[1050,14496,1100],{"class":1071},[1050,14498,4814],{"class":1529},[1050,14500,3097],{"class":1071},[1050,14502,14503],{"class":1063}," if",[1050,14505,6908],{"class":6907},[1050,14507,2173],{"class":1071},[1050,14509,3463],{"class":2169},[1050,14511,1100],{"class":1071},[1050,14513,1366],{"class":1337},[1050,14515,6919],{"class":1341},[1050,14517,1345],{"class":1337},[1050,14519,3097],{"class":1071},[1050,14521,14522],{"class":1063}," else",[1050,14524,4814],{"class":1529},[1050,14526,1116],{"class":1071},[1050,14528,14529,14531,14534,14536,14538,14540,14542,14545,14547,14549],{"class":1052,"line":1322},[1050,14530,1356],{"class":1337},[1050,14532,14533],{"class":1341},"active_sessions",[1050,14535,1345],{"class":1337},[1050,14537,1348],{"class":1071},[1050,14539,3069],{"class":3068},[1050,14541,1072],{"class":1071},[1050,14543,14544],{"class":2169},"get_active_sessions",[1050,14546,2173],{"class":1071},[1050,14548,3463],{"class":2169},[1050,14550,2326],{"class":1071},[1050,14552,14553],{"class":1052,"line":1334},[1050,14554,1441],{"class":1071},[1050,14556,14557,14559,14562,14564,14566,14568,14570,14573,14575,14577],{"class":1052,"line":1353},[1050,14558,1338],{"class":1337},[1050,14560,14561],{"class":1341},"privacy_settings",[1050,14563,1345],{"class":1337},[1050,14565,1348],{"class":1071},[1050,14567,3069],{"class":3068},[1050,14569,1072],{"class":1071},[1050,14571,14572],{"class":2169},"get_privacy_settings",[1050,14574,2173],{"class":1071},[1050,14576,3463],{"class":2169},[1050,14578,2326],{"class":1071},[1050,14580,14581,14583,14586,14588,14590,14592,14594,14597,14599,14601],{"class":1052,"line":1376},[1050,14582,1338],{"class":1337},[1050,14584,14585],{"class":1341},"notification_settings",[1050,14587,1345],{"class":1337},[1050,14589,1348],{"class":1071},[1050,14591,3069],{"class":3068},[1050,14593,1072],{"class":1071},[1050,14595,14596],{"class":2169},"get_notification_settings",[1050,14598,2173],{"class":1071},[1050,14600,3463],{"class":2169},[1050,14602,2326],{"class":1071},[1050,14604,14605],{"class":1052,"line":1397},[1050,14606,4468],{"class":1071},[1050,14608,14609],{"class":1052,"line":1418},[1050,14610,1319],{"class":1067},[1050,14612,14613,14615],{"class":1052,"line":1438},[1050,14614,2106],{"class":1063},[1050,14616,4481],{"class":1067},[1050,14618,14619],{"class":1052,"line":1444},[1050,14620,1279],{"class":1067},[1050,14622,14623,14625,14628,14630,14632,14634,14636],{"class":1052,"line":1458},[1050,14624,1295],{"class":1251},[1050,14626,14627],{"class":1298}," get_active_sessions",[1050,14629,2173],{"class":1071},[1050,14631,2966],{"class":2965},[1050,14633,1100],{"class":1071},[1050,14635,3185],{"class":2971},[1050,14637,2862],{"class":1071},[1050,14639,14640,14642,14645],{"class":1052,"line":1478},[1050,14641,1308],{"class":1265},[1050,14643,14644],{"class":1269},"Get user's active sessions",[1050,14646,1273],{"class":1265},[1050,14648,14649],{"class":1052,"line":1498},[1050,14650,1319],{"class":1067},[1050,14652,14653,14655,14657,14659,14661,14663,14665,14667,14669,14671],{"class":1052,"line":1518},[1050,14654,4093],{"class":1063},[1050,14656,1068],{"class":1067},[1050,14658,1072],{"class":1071},[1050,14660,1075],{"class":1067},[1050,14662,1072],{"class":1071},[1050,14664,6985],{"class":1067},[1050,14666,1072],{"class":1071},[1050,14668,6990],{"class":1067},[1050,14670,1088],{"class":1063},[1050,14672,6995],{"class":1067},[1050,14674,14675],{"class":1052,"line":1533},[1050,14676,1319],{"class":1067},[1050,14678,14679,14682,14684],{"class":1052,"line":1538},[1050,14680,14681],{"class":1067},"        active_sessions ",[1050,14683,1328],{"class":1071},[1050,14685,7040],{"class":1071},[1050,14687,14688,14690,14692,14694,14696,14698,14700,14702,14704],{"class":1052,"line":1552},[1050,14689,7004],{"class":1067},[1050,14691,1328],{"class":1071},[1050,14693,3069],{"class":3068},[1050,14695,1072],{"class":1071},[1050,14697,3009],{"class":3074},[1050,14699,1072],{"class":1071},[1050,14701,3532],{"class":3074},[1050,14703,1072],{"class":1071},[1050,14705,7021],{"class":3074},[1050,14707,14708],{"class":1052,"line":1572},[1050,14709,1319],{"class":1067},[1050,14711,14712,14714,14716,14718,14720,14722,14724,14726,14728,14730,14733,14735,14738,14740,14742],{"class":1052,"line":1592},[1050,14713,7045],{"class":1063},[1050,14715,7048],{"class":1067},[1050,14717,5894],{"class":1063},[1050,14719,7053],{"class":1067},[1050,14721,1072],{"class":1071},[1050,14723,7058],{"class":3074},[1050,14725,1072],{"class":1071},[1050,14727,3257],{"class":2169},[1050,14729,2173],{"class":1071},[1050,14731,14732],{"class":2313},"expire_date__gt",[1050,14734,1328],{"class":1071},[1050,14736,14737],{"class":2169},"timezone",[1050,14739,1072],{"class":1071},[1050,14741,3556],{"class":2169},[1050,14743,14744],{"class":1071},"()):\n",[1050,14746,14747,14749],{"class":1052,"line":1612},[1050,14748,7070],{"class":1063},[1050,14750,1259],{"class":1071},[1050,14752,14753,14755,14757,14759,14761,14763],{"class":1052,"line":1630},[1050,14754,7077],{"class":1067},[1050,14756,1328],{"class":1071},[1050,14758,7082],{"class":1067},[1050,14760,1072],{"class":1071},[1050,14762,7087],{"class":2169},[1050,14764,3396],{"class":1071},[1050,14766,14767,14770,14772,14774,14776,14778,14780,14782,14784,14786],{"class":1052,"line":1635},[1050,14768,14769],{"class":1067},"                session_user_id ",[1050,14771,1328],{"class":1071},[1050,14773,7096],{"class":1067},[1050,14775,1072],{"class":1071},[1050,14777,3085],{"class":2169},[1050,14779,2173],{"class":1071},[1050,14781,1345],{"class":1337},[1050,14783,7107],{"class":1341},[1050,14785,1345],{"class":1337},[1050,14787,1146],{"class":1071},[1050,14789,14790],{"class":1052,"line":1649},[1050,14791,5180],{"class":1067},[1050,14793,14794,14796,14799,14802,14805,14807,14810,14812,14814,14816,14818,14820],{"class":1052,"line":1669},[1050,14795,5192],{"class":1063},[1050,14797,14798],{"class":1067}," session_user_id ",[1050,14800,14801],{"class":2977},"and",[1050,14803,14804],{"class":1288}," int",[1050,14806,2173],{"class":1071},[1050,14808,14809],{"class":2169},"session_user_id",[1050,14811,3097],{"class":1071},[1050,14813,4581],{"class":2977},[1050,14815,3185],{"class":1067},[1050,14817,1072],{"class":1071},[1050,14819,7125],{"class":3074},[1050,14821,1259],{"class":1071},[1050,14823,14824,14827,14829,14831],{"class":1052,"line":1689},[1050,14825,14826],{"class":1067},"                    active_sessions",[1050,14828,1072],{"class":1071},[1050,14830,7157],{"class":2169},[1050,14832,4392],{"class":1071},[1050,14834,14835,14838,14840,14842,14844,14846,14848,14850],{"class":1052,"line":1705},[1050,14836,14837],{"class":1337},"                        '",[1050,14839,7139],{"class":1341},[1050,14841,1345],{"class":1337},[1050,14843,1348],{"class":1071},[1050,14845,7082],{"class":2169},[1050,14847,1072],{"class":1071},[1050,14849,7139],{"class":3074},[1050,14851,1116],{"class":1071},[1050,14853,14854,14856,14859,14861,14863,14865,14867,14869,14871,14873],{"class":1052,"line":1718},[1050,14855,14837],{"class":1337},[1050,14857,14858],{"class":1341},"is_current",[1050,14860,1345],{"class":1337},[1050,14862,1348],{"class":1071},[1050,14864,7082],{"class":2169},[1050,14866,1072],{"class":1071},[1050,14868,7139],{"class":3074},[1050,14870,4581],{"class":2977},[1050,14872,7145],{"class":2169},[1050,14874,1116],{"class":1071},[1050,14876,14877,14879,14882,14884,14886,14888,14890,14892],{"class":1052,"line":1723},[1050,14878,14837],{"class":1337},[1050,14880,14881],{"class":1341},"expire_date",[1050,14883,1345],{"class":1337},[1050,14885,1348],{"class":1071},[1050,14887,7082],{"class":2169},[1050,14889,1072],{"class":1071},[1050,14891,14881],{"class":3074},[1050,14893,1116],{"class":1071},[1050,14895,14896,14898,14900,14902,14904,14906,14908,14910,14912,14914,14916,14918,14920,14922,14925,14927],{"class":1052,"line":1737},[1050,14897,14837],{"class":1337},[1050,14899,4162],{"class":1341},[1050,14901,1345],{"class":1337},[1050,14903,1348],{"class":1071},[1050,14905,7096],{"class":2169},[1050,14907,1072],{"class":1071},[1050,14909,3085],{"class":2169},[1050,14911,2173],{"class":1071},[1050,14913,1345],{"class":1337},[1050,14915,4162],{"class":1341},[1050,14917,1345],{"class":1337},[1050,14919,1100],{"class":1071},[1050,14921,1366],{"class":1337},[1050,14923,14924],{"class":1341},"Unknown",[1050,14926,1345],{"class":1337},[1050,14928,2326],{"class":1071},[1050,14930,14931,14933,14935,14937,14939,14941,14943,14945,14947,14949,14951,14953,14955,14957,14959,14961,14963,14966],{"class":1052,"line":1757},[1050,14932,14837],{"class":1337},[1050,14934,3582],{"class":1341},[1050,14936,1345],{"class":1337},[1050,14938,1348],{"class":1071},[1050,14940,7096],{"class":2169},[1050,14942,1072],{"class":1071},[1050,14944,3085],{"class":2169},[1050,14946,2173],{"class":1071},[1050,14948,1345],{"class":1337},[1050,14950,3582],{"class":1341},[1050,14952,1345],{"class":1337},[1050,14954,1100],{"class":1071},[1050,14956,1366],{"class":1337},[1050,14958,14924],{"class":1341},[1050,14960,1345],{"class":1337},[1050,14962,3619],{"class":1071},[1050,14964,14965],{"class":3622},"50",[1050,14967,9034],{"class":1071},[1050,14969,14970],{"class":1052,"line":1777},[1050,14971,14972],{"class":1071},"                    })\n",[1050,14974,14975,14977],{"class":1052,"line":1797},[1050,14976,7168],{"class":1063},[1050,14978,1259],{"class":1071},[1050,14980,14981],{"class":1052,"line":1815},[1050,14982,7175],{"class":1063},[1050,14984,14985],{"class":1052,"line":1820},[1050,14986,1319],{"class":1067},[1050,14988,14989,14991],{"class":1052,"line":1834},[1050,14990,2106],{"class":1063},[1050,14992,14993],{"class":1067}," active_sessions\n",[1050,14995,14996],{"class":1052,"line":1854},[1050,14997,1279],{"class":1067},[1050,14999,15000,15002,15005,15007,15009,15011,15013],{"class":1052,"line":1874},[1050,15001,1295],{"class":1251},[1050,15003,15004],{"class":1298}," get_privacy_settings",[1050,15006,2173],{"class":1071},[1050,15008,2966],{"class":2965},[1050,15010,1100],{"class":1071},[1050,15012,3185],{"class":2971},[1050,15014,2862],{"class":1071},[1050,15016,15017,15019,15022],{"class":1052,"line":1889},[1050,15018,1308],{"class":1265},[1050,15020,15021],{"class":1269},"Get user's privacy settings",[1050,15023,1273],{"class":1265},[1050,15025,15026],{"class":1052,"line":1902},[1050,15027,1319],{"class":1067},[1050,15029,15030],{"class":1052,"line":1907},[1050,15031,15032],{"class":1056},"        # This would depend on your privacy settings implementation\n",[1050,15034,15035,15037,15039,15041,15043,15045,15047,15049,15051],{"class":1052,"line":1921},[1050,15036,3134],{"class":1063},[1050,15038,6908],{"class":6907},[1050,15040,2173],{"class":1071},[1050,15042,3463],{"class":2169},[1050,15044,1100],{"class":1071},[1050,15046,1366],{"class":1337},[1050,15048,6919],{"class":1341},[1050,15050,1345],{"class":1337},[1050,15052,2862],{"class":1071},[1050,15054,15055,15057],{"class":1052,"line":1941},[1050,15056,3144],{"class":1063},[1050,15058,1331],{"class":1071},[1050,15060,15061,15063,15066,15068,15070,15072,15074,15076,15078,15080,15082,15084,15086,15088,15090,15092],{"class":1052,"line":1961},[1050,15062,1356],{"class":1337},[1050,15064,15065],{"class":1341},"profile_public",[1050,15067,1345],{"class":1337},[1050,15069,1348],{"class":1071},[1050,15071,14448],{"class":6907},[1050,15073,2173],{"class":1071},[1050,15075,3463],{"class":2169},[1050,15077,1072],{"class":1071},[1050,15079,6919],{"class":3074},[1050,15081,1100],{"class":1071},[1050,15083,1366],{"class":1337},[1050,15085,15065],{"class":1341},[1050,15087,1345],{"class":1337},[1050,15089,1100],{"class":1071},[1050,15091,4428],{"class":1529},[1050,15093,2326],{"class":1071},[1050,15095,15096,15098,15101,15103,15105,15107,15109,15111,15113,15115,15117,15119,15121,15123,15125,15127],{"class":1052,"line":1981},[1050,15097,1356],{"class":1337},[1050,15099,15100],{"class":1341},"email_public",[1050,15102,1345],{"class":1337},[1050,15104,1348],{"class":1071},[1050,15106,14448],{"class":6907},[1050,15108,2173],{"class":1071},[1050,15110,3463],{"class":2169},[1050,15112,1072],{"class":1071},[1050,15114,6919],{"class":3074},[1050,15116,1100],{"class":1071},[1050,15118,1366],{"class":1337},[1050,15120,15100],{"class":1341},[1050,15122,1345],{"class":1337},[1050,15124,1100],{"class":1071},[1050,15126,4814],{"class":1529},[1050,15128,2326],{"class":1071},[1050,15130,15131,15133,15136,15138,15140,15142,15144,15146,15148,15150,15152,15154,15156,15158,15160,15162],{"class":1052,"line":1999},[1050,15132,1356],{"class":1337},[1050,15134,15135],{"class":1341},"activity_public",[1050,15137,1345],{"class":1337},[1050,15139,1348],{"class":1071},[1050,15141,14448],{"class":6907},[1050,15143,2173],{"class":1071},[1050,15145,3463],{"class":2169},[1050,15147,1072],{"class":1071},[1050,15149,6919],{"class":3074},[1050,15151,1100],{"class":1071},[1050,15153,1366],{"class":1337},[1050,15155,15135],{"class":1341},[1050,15157,1345],{"class":1337},[1050,15159,1100],{"class":1071},[1050,15161,4428],{"class":1529},[1050,15163,2326],{"class":1071},[1050,15165,15166],{"class":1052,"line":2004},[1050,15167,2089],{"class":1071},[1050,15169,15170],{"class":1052,"line":2018},[1050,15171,1319],{"class":1067},[1050,15173,15174,15176],{"class":1052,"line":2038},[1050,15175,2106],{"class":1063},[1050,15177,15178],{"class":1071}," {}\n",[1050,15180,15181],{"class":1052,"line":2058},[1050,15182,1279],{"class":1067},[1050,15184,15185,15187,15190,15192,15194,15196,15198],{"class":1052,"line":2073},[1050,15186,1295],{"class":1251},[1050,15188,15189],{"class":1298}," get_notification_settings",[1050,15191,2173],{"class":1071},[1050,15193,2966],{"class":2965},[1050,15195,1100],{"class":1071},[1050,15197,3185],{"class":2971},[1050,15199,2862],{"class":1071},[1050,15201,15202,15204,15207],{"class":1052,"line":2086},[1050,15203,1308],{"class":1265},[1050,15205,15206],{"class":1269},"Get user's notification settings",[1050,15208,1273],{"class":1265},[1050,15210,15211],{"class":1052,"line":2092},[1050,15212,1319],{"class":1067},[1050,15214,15215],{"class":1052,"line":2098},[1050,15216,15217],{"class":1056},"        # This would depend on your notification system\n",[1050,15219,15220,15222,15224,15226,15228,15230,15232,15234,15236],{"class":1052,"line":2103},[1050,15221,3134],{"class":1063},[1050,15223,6908],{"class":6907},[1050,15225,2173],{"class":1071},[1050,15227,3463],{"class":2169},[1050,15229,1100],{"class":1071},[1050,15231,1366],{"class":1337},[1050,15233,6919],{"class":1341},[1050,15235,1345],{"class":1337},[1050,15237,2862],{"class":1071},[1050,15239,15240,15242],{"class":1052,"line":2112},[1050,15241,3144],{"class":1063},[1050,15243,1331],{"class":1071},[1050,15245,15246,15248,15251,15253,15255,15257,15259,15261,15263,15265,15267,15269,15271,15273,15275,15277],{"class":1052,"line":2117},[1050,15247,1356],{"class":1337},[1050,15249,15250],{"class":1341},"email_notifications",[1050,15252,1345],{"class":1337},[1050,15254,1348],{"class":1071},[1050,15256,14448],{"class":6907},[1050,15258,2173],{"class":1071},[1050,15260,3463],{"class":2169},[1050,15262,1072],{"class":1071},[1050,15264,6919],{"class":3074},[1050,15266,1100],{"class":1071},[1050,15268,1366],{"class":1337},[1050,15270,15250],{"class":1341},[1050,15272,1345],{"class":1337},[1050,15274,1100],{"class":1071},[1050,15276,4428],{"class":1529},[1050,15278,2326],{"class":1071},[1050,15280,15281,15283,15286,15288,15290,15292,15294,15296,15298,15300,15302,15304,15306,15308,15310,15312],{"class":1052,"line":2124},[1050,15282,1356],{"class":1337},[1050,15284,15285],{"class":1341},"push_notifications",[1050,15287,1345],{"class":1337},[1050,15289,1348],{"class":1071},[1050,15291,14448],{"class":6907},[1050,15293,2173],{"class":1071},[1050,15295,3463],{"class":2169},[1050,15297,1072],{"class":1071},[1050,15299,6919],{"class":3074},[1050,15301,1100],{"class":1071},[1050,15303,1366],{"class":1337},[1050,15305,15285],{"class":1341},[1050,15307,1345],{"class":1337},[1050,15309,1100],{"class":1071},[1050,15311,4814],{"class":1529},[1050,15313,2326],{"class":1071},[1050,15315,15316,15318,15321,15323,15325,15327,15329,15331,15333,15335,15337,15339,15341,15343,15345,15347],{"class":1052,"line":2134},[1050,15317,1356],{"class":1337},[1050,15319,15320],{"class":1341},"marketing_emails",[1050,15322,1345],{"class":1337},[1050,15324,1348],{"class":1071},[1050,15326,14448],{"class":6907},[1050,15328,2173],{"class":1071},[1050,15330,3463],{"class":2169},[1050,15332,1072],{"class":1071},[1050,15334,6919],{"class":3074},[1050,15336,1100],{"class":1071},[1050,15338,1366],{"class":1337},[1050,15340,15320],{"class":1341},[1050,15342,1345],{"class":1337},[1050,15344,1100],{"class":1071},[1050,15346,4814],{"class":1529},[1050,15348,2326],{"class":1071},[1050,15350,15351],{"class":1052,"line":2144},[1050,15352,2089],{"class":1071},[1050,15354,15355],{"class":1052,"line":2149},[1050,15356,1319],{"class":1067},[1050,15358,15359,15361],{"class":1052,"line":2155},[1050,15360,2106],{"class":1063},[1050,15362,15178],{"class":1071},[1050,15364,15365],{"class":1052,"line":2166},[1050,15366,1245],{"emptyLinePlaceholder":1244},[1050,15368,15369,15371,15374,15376,15378,15380,15383],{"class":1052,"line":2200},[1050,15370,1252],{"class":1251},[1050,15372,15373],{"class":1255}," TerminateSessionView",[1050,15375,2173],{"class":1071},[1050,15377,13007],{"class":2859},[1050,15379,1100],{"class":1071},[1050,15381,15382],{"class":2859}," View",[1050,15384,2862],{"class":1071},[1050,15386,15387,15389,15392],{"class":1052,"line":2206},[1050,15388,1266],{"class":1265},[1050,15390,15391],{"class":1269},"Terminate specific user session",[1050,15393,1273],{"class":1265},[1050,15395,15396],{"class":1052,"line":2211},[1050,15397,1279],{"class":1067},[1050,15399,15400,15402,15404,15406,15408,15410,15412,15414,15416,15418,15420,15422,15424],{"class":1052,"line":2217},[1050,15401,1295],{"class":1251},[1050,15403,13750],{"class":1298},[1050,15405,2173],{"class":1071},[1050,15407,2966],{"class":2965},[1050,15409,1100],{"class":1071},[1050,15411,2972],{"class":2971},[1050,15413,1100],{"class":1071},[1050,15415,2978],{"class":2977},[1050,15417,2981],{"class":2971},[1050,15419,1100],{"class":1071},[1050,15421,2986],{"class":2977},[1050,15423,2989],{"class":2971},[1050,15425,2862],{"class":1071},[1050,15427,15428,15430,15433],{"class":1052,"line":2223},[1050,15429,1308],{"class":1265},[1050,15431,15432],{"class":1269},"Terminate session",[1050,15434,1273],{"class":1265},[1050,15436,15437],{"class":1052,"line":2229},[1050,15438,1319],{"class":1067},[1050,15440,15441,15444,15446,15448,15450,15452,15454,15456,15458,15460,15462,15464],{"class":1052,"line":2235},[1050,15442,15443],{"class":1067},"        session_key ",[1050,15445,1328],{"class":1071},[1050,15447,2972],{"class":1067},[1050,15449,1072],{"class":1071},[1050,15451,3080],{"class":3079},[1050,15453,1072],{"class":1071},[1050,15455,3085],{"class":2169},[1050,15457,2173],{"class":1071},[1050,15459,1345],{"class":1337},[1050,15461,7139],{"class":1341},[1050,15463,1345],{"class":1337},[1050,15465,1146],{"class":1071},[1050,15467,15468],{"class":1052,"line":2241},[1050,15469,1319],{"class":1067},[1050,15471,15472,15474,15477,15479,15481,15484,15486,15488,15490,15492,15494],{"class":1052,"line":2247},[1050,15473,3134],{"class":1063},[1050,15475,15476],{"class":1067}," session_key ",[1050,15478,14801],{"class":2977},[1050,15480,15476],{"class":1067},[1050,15482,15483],{"class":2977},"!=",[1050,15485,2972],{"class":1067},[1050,15487,1072],{"class":1071},[1050,15489,3532],{"class":3074},[1050,15491,1072],{"class":1071},[1050,15493,7139],{"class":3074},[1050,15495,1259],{"class":1071},[1050,15497,15498,15500],{"class":1052,"line":2253},[1050,15499,7070],{"class":1063},[1050,15501,1259],{"class":1071},[1050,15503,15504,15507,15509,15511,15513,15515,15517,15519,15521,15523],{"class":1052,"line":2259},[1050,15505,15506],{"class":1063},"                from",[1050,15508,1068],{"class":1067},[1050,15510,1072],{"class":1071},[1050,15512,1075],{"class":1067},[1050,15514,1072],{"class":1071},[1050,15516,6985],{"class":1067},[1050,15518,1072],{"class":1071},[1050,15520,6990],{"class":1067},[1050,15522,1088],{"class":1063},[1050,15524,6995],{"class":1067},[1050,15526,15527],{"class":1052,"line":2265},[1050,15528,5180],{"class":1067},[1050,15530,15531,15534,15536,15538,15540,15542,15544,15546,15548,15550,15552,15554],{"class":1052,"line":2270},[1050,15532,15533],{"class":1067},"                session ",[1050,15535,1328],{"class":1071},[1050,15537,7053],{"class":1067},[1050,15539,1072],{"class":1071},[1050,15541,7058],{"class":3074},[1050,15543,1072],{"class":1071},[1050,15545,3085],{"class":2169},[1050,15547,2173],{"class":1071},[1050,15549,7139],{"class":2313},[1050,15551,1328],{"class":1071},[1050,15553,7139],{"class":2169},[1050,15555,1146],{"class":1071},[1050,15557,15558],{"class":1052,"line":2276},[1050,15559,5180],{"class":1067},[1050,15561,15562],{"class":1052,"line":2286},[1050,15563,15564],{"class":1056},"                # Verify session belongs to current user\n",[1050,15566,15567,15569,15571,15573,15575,15577],{"class":1052,"line":2329},[1050,15568,7077],{"class":1067},[1050,15570,1328],{"class":1071},[1050,15572,7082],{"class":1067},[1050,15574,1072],{"class":1071},[1050,15576,7087],{"class":2169},[1050,15578,3396],{"class":1071},[1050,15580,15581,15583,15585,15587,15589,15591,15593,15595,15597,15599],{"class":1052,"line":2366},[1050,15582,14769],{"class":1067},[1050,15584,1328],{"class":1071},[1050,15586,7096],{"class":1067},[1050,15588,1072],{"class":1071},[1050,15590,3085],{"class":2169},[1050,15592,2173],{"class":1071},[1050,15594,1345],{"class":1337},[1050,15596,7107],{"class":1341},[1050,15598,1345],{"class":1337},[1050,15600,1146],{"class":1071},[1050,15602,15603],{"class":1052,"line":2403},[1050,15604,5180],{"class":1067},[1050,15606,15607,15609,15611,15613,15615,15617,15619,15621,15623,15625,15627,15629,15631,15633],{"class":1052,"line":2439},[1050,15608,5192],{"class":1063},[1050,15610,14798],{"class":1067},[1050,15612,14801],{"class":2977},[1050,15614,14804],{"class":1288},[1050,15616,2173],{"class":1071},[1050,15618,14809],{"class":2169},[1050,15620,3097],{"class":1071},[1050,15622,4581],{"class":2977},[1050,15624,2972],{"class":1067},[1050,15626,1072],{"class":1071},[1050,15628,3463],{"class":3074},[1050,15630,1072],{"class":1071},[1050,15632,7125],{"class":3074},[1050,15634,1259],{"class":1071},[1050,15636,15637,15639,15641,15643],{"class":1052,"line":2477},[1050,15638,8944],{"class":1067},[1050,15640,1072],{"class":1071},[1050,15642,7207],{"class":2169},[1050,15644,3396],{"class":1071},[1050,15646,15647,15649,15651,15653,15655,15657,15659,15661,15664,15666],{"class":1052,"line":2513},[1050,15648,9765],{"class":1067},[1050,15650,1072],{"class":1071},[1050,15652,3759],{"class":2169},[1050,15654,2173],{"class":1071},[1050,15656,3009],{"class":2169},[1050,15658,1100],{"class":1071},[1050,15660,1366],{"class":1337},[1050,15662,15663],{"class":1341},"Session terminated successfully.",[1050,15665,1345],{"class":1337},[1050,15667,1146],{"class":1071},[1050,15669,15670,15672],{"class":1052,"line":2550},[1050,15671,9806],{"class":1063},[1050,15673,1259],{"class":1071},[1050,15675,15676,15678,15680,15682,15684,15686,15688,15690,15693,15695],{"class":1052,"line":2587},[1050,15677,9765],{"class":1067},[1050,15679,1072],{"class":1071},[1050,15681,4266],{"class":2169},[1050,15683,2173],{"class":1071},[1050,15685,3009],{"class":2169},[1050,15687,1100],{"class":1071},[1050,15689,1366],{"class":1337},[1050,15691,15692],{"class":1341},"Invalid session.",[1050,15694,1345],{"class":1337},[1050,15696,1146],{"class":1071},[1050,15698,15699],{"class":1052,"line":2592},[1050,15700,4620],{"class":1067},[1050,15702,15703,15705,15707,15709,15711],{"class":1052,"line":2597},[1050,15704,7168],{"class":1063},[1050,15706,7053],{"class":1067},[1050,15708,1072],{"class":1071},[1050,15710,9876],{"class":3074},[1050,15712,1259],{"class":1071},[1050,15714,15715,15717,15719,15721,15723,15725,15727,15729,15732,15734],{"class":1052,"line":4169},[1050,15716,5238],{"class":1067},[1050,15718,1072],{"class":1071},[1050,15720,4266],{"class":2169},[1050,15722,2173],{"class":1071},[1050,15724,3009],{"class":2169},[1050,15726,1100],{"class":1071},[1050,15728,1366],{"class":1337},[1050,15730,15731],{"class":1341},"Session not found.",[1050,15733,1345],{"class":1337},[1050,15735,1146],{"class":1071},[1050,15737,15738,15740],{"class":1052,"line":4174},[1050,15739,3301],{"class":1063},[1050,15741,1259],{"class":1071},[1050,15743,15744,15746,15748,15750,15752,15754,15756,15758,15761,15763],{"class":1052,"line":4207},[1050,15745,4261],{"class":1067},[1050,15747,1072],{"class":1071},[1050,15749,4266],{"class":2169},[1050,15751,2173],{"class":1071},[1050,15753,3009],{"class":2169},[1050,15755,1100],{"class":1071},[1050,15757,1366],{"class":1337},[1050,15759,15760],{"class":1341},"Cannot terminate current session.",[1050,15762,1345],{"class":1337},[1050,15764,1146],{"class":1071},[1050,15766,15767],{"class":1052,"line":4237},[1050,15768,1319],{"class":1067},[1050,15770,15771,15773,15775,15777,15779,15782,15784],{"class":1052,"line":4242},[1050,15772,2106],{"class":1063},[1050,15774,4949],{"class":2169},[1050,15776,2173],{"class":1071},[1050,15778,1345],{"class":1337},[1050,15780,15781],{"class":1341},"account_settings",[1050,15783,1345],{"class":1337},[1050,15785,1146],{"class":1071},[1050,15787,15788],{"class":1052,"line":4258},[1050,15789,1245],{"emptyLinePlaceholder":1244},[1050,15791,15792,15794,15797,15799,15801,15803,15805],{"class":1052,"line":4271},[1050,15793,1252],{"class":1251},[1050,15795,15796],{"class":1255}," DeleteAccountView",[1050,15798,2173],{"class":1071},[1050,15800,13007],{"class":2859},[1050,15802,1100],{"class":1071},[1050,15804,14290],{"class":2859},[1050,15806,2862],{"class":1071},[1050,15808,15809,15811,15814],{"class":1052,"line":4283},[1050,15810,1266],{"class":1265},[1050,15812,15813],{"class":1269},"Account deletion view",[1050,15815,1273],{"class":1265},[1050,15817,15818],{"class":1052,"line":4294},[1050,15819,1279],{"class":1067},[1050,15821,15822,15824,15826,15828,15831],{"class":1052,"line":4300},[1050,15823,2880],{"class":1067},[1050,15825,1328],{"class":1071},[1050,15827,1366],{"class":1337},[1050,15829,15830],{"class":1341},"auth/delete_account.html",[1050,15832,1435],{"class":1337},[1050,15834,15835],{"class":1052,"line":4305},[1050,15836,1279],{"class":1067},[1050,15838,15839,15841,15843,15845,15847,15849,15851,15853,15855,15857,15859,15861,15863],{"class":1052,"line":4312},[1050,15840,1295],{"class":1251},[1050,15842,13750],{"class":1298},[1050,15844,2173],{"class":1071},[1050,15846,2966],{"class":2965},[1050,15848,1100],{"class":1071},[1050,15850,2972],{"class":2971},[1050,15852,1100],{"class":1071},[1050,15854,2978],{"class":2977},[1050,15856,2981],{"class":2971},[1050,15858,1100],{"class":1071},[1050,15860,2986],{"class":2977},[1050,15862,2989],{"class":2971},[1050,15864,2862],{"class":1071},[1050,15866,15867,15869,15872],{"class":1052,"line":4317},[1050,15868,1308],{"class":1265},[1050,15870,15871],{"class":1269},"Handle account deletion",[1050,15873,1273],{"class":1265},[1050,15875,15876],{"class":1052,"line":4337},[1050,15877,1319],{"class":1067},[1050,15879,15880,15882,15884,15886,15888,15890,15892,15894,15896,15898,15900,15902],{"class":1052,"line":4347},[1050,15881,5020],{"class":1067},[1050,15883,1328],{"class":1071},[1050,15885,2972],{"class":1067},[1050,15887,1072],{"class":1071},[1050,15889,3080],{"class":3079},[1050,15891,1072],{"class":1071},[1050,15893,3085],{"class":2169},[1050,15895,2173],{"class":1071},[1050,15897,1345],{"class":1337},[1050,15899,5039],{"class":1341},[1050,15901,1345],{"class":1337},[1050,15903,1146],{"class":1071},[1050,15905,15906,15909,15911,15913,15915,15917,15919,15921,15923,15925,15928,15930],{"class":1052,"line":4352},[1050,15907,15908],{"class":1067},"        confirmation ",[1050,15910,1328],{"class":1071},[1050,15912,2972],{"class":1067},[1050,15914,1072],{"class":1071},[1050,15916,3080],{"class":3079},[1050,15918,1072],{"class":1071},[1050,15920,3085],{"class":2169},[1050,15922,2173],{"class":1071},[1050,15924,1345],{"class":1337},[1050,15926,15927],{"class":1341},"confirmation",[1050,15929,1345],{"class":1337},[1050,15931,1146],{"class":1071},[1050,15933,15934],{"class":1052,"line":4376},[1050,15935,1319],{"class":1067},[1050,15937,15938],{"class":1052,"line":4381},[1050,15939,15940],{"class":1056},"        # Verify password\n",[1050,15942,15943,15945,15947,15949,15951,15953,15955,15958,15960,15962],{"class":1052,"line":4395},[1050,15944,3134],{"class":1063},[1050,15946,5133],{"class":2977},[1050,15948,2972],{"class":1067},[1050,15950,1072],{"class":1071},[1050,15952,3463],{"class":3074},[1050,15954,1072],{"class":1071},[1050,15956,15957],{"class":2169},"check_password",[1050,15959,2173],{"class":1071},[1050,15961,5039],{"class":2169},[1050,15963,2862],{"class":1071},[1050,15965,15966,15968,15970,15972,15974,15976,15978,15980,15983,15985],{"class":1052,"line":4416},[1050,15967,4261],{"class":1067},[1050,15969,1072],{"class":1071},[1050,15971,4266],{"class":2169},[1050,15973,2173],{"class":1071},[1050,15975,3009],{"class":2169},[1050,15977,1100],{"class":1071},[1050,15979,1366],{"class":1337},[1050,15981,15982],{"class":1341},"Incorrect password.",[1050,15984,1345],{"class":1337},[1050,15986,1146],{"class":1071},[1050,15988,15989,15991,15993,15995,15997,15999,16001,16003,16005,16007,16009,16011,16013],{"class":1052,"line":4433},[1050,15990,3144],{"class":1063},[1050,15992,3069],{"class":3068},[1050,15994,1072],{"class":1071},[1050,15996,3085],{"class":2169},[1050,15998,2173],{"class":1071},[1050,16000,3009],{"class":2169},[1050,16002,1100],{"class":1071},[1050,16004,2978],{"class":2977},[1050,16006,2981],{"class":2169},[1050,16008,1100],{"class":1071},[1050,16010,2986],{"class":2977},[1050,16012,2989],{"class":2169},[1050,16014,1146],{"class":1071},[1050,16016,16017],{"class":1052,"line":4449},[1050,16018,1319],{"class":1067},[1050,16020,16021],{"class":1052,"line":4465},[1050,16022,16023],{"class":1056},"        # Verify confirmation\n",[1050,16025,16026,16028,16031,16033,16035,16038,16040],{"class":1052,"line":4471},[1050,16027,3134],{"class":1063},[1050,16029,16030],{"class":1067}," confirmation ",[1050,16032,15483],{"class":2977},[1050,16034,1366],{"class":1337},[1050,16036,16037],{"class":1341},"DELETE",[1050,16039,1345],{"class":1337},[1050,16041,1259],{"class":1071},[1050,16043,16044,16046,16048,16050,16052,16054,16056,16058,16061,16063],{"class":1052,"line":4476},[1050,16045,4261],{"class":1067},[1050,16047,1072],{"class":1071},[1050,16049,4266],{"class":2169},[1050,16051,2173],{"class":1071},[1050,16053,3009],{"class":2169},[1050,16055,1100],{"class":1071},[1050,16057,1366],{"class":1337},[1050,16059,16060],{"class":1341},"Please type DELETE to confirm.",[1050,16062,1345],{"class":1337},[1050,16064,1146],{"class":1071},[1050,16066,16067,16069,16071,16073,16075,16077,16079,16081,16083,16085,16087,16089,16091],{"class":1052,"line":4484},[1050,16068,3144],{"class":1063},[1050,16070,3069],{"class":3068},[1050,16072,1072],{"class":1071},[1050,16074,3085],{"class":2169},[1050,16076,2173],{"class":1071},[1050,16078,3009],{"class":2169},[1050,16080,1100],{"class":1071},[1050,16082,2978],{"class":2977},[1050,16084,2981],{"class":2169},[1050,16086,1100],{"class":1071},[1050,16088,2986],{"class":2977},[1050,16090,2989],{"class":2169},[1050,16092,1146],{"class":1071},[1050,16094,16095],{"class":1052,"line":4489},[1050,16096,1319],{"class":1067},[1050,16098,16099],{"class":1052,"line":4503},[1050,16100,16101],{"class":1056},"        # Log account deletion\n",[1050,16103,16104,16106],{"class":1052,"line":4513},[1050,16105,3410],{"class":1063},[1050,16107,3413],{"class":1067},[1050,16109,16110,16112,16114,16116,16118,16120,16122,16124,16126,16128],{"class":1052,"line":4518},[1050,16111,3418],{"class":1067},[1050,16113,1328],{"class":1071},[1050,16115,3423],{"class":1067},[1050,16117,1072],{"class":1071},[1050,16119,3428],{"class":2169},[1050,16121,2173],{"class":1071},[1050,16123,1345],{"class":1337},[1050,16125,1080],{"class":1341},[1050,16127,1345],{"class":1337},[1050,16129,1146],{"class":1071},[1050,16131,16132,16134,16136,16138,16140,16142,16145,16147,16149,16151,16153,16155,16157,16159,16161],{"class":1052,"line":4535},[1050,16133,3443],{"class":1067},[1050,16135,1072],{"class":1071},[1050,16137,3448],{"class":2169},[1050,16139,2173],{"class":1071},[1050,16141,3453],{"class":1251},[1050,16143,16144],{"class":1341},"\"Account deleted: ",[1050,16146,3460],{"class":3459},[1050,16148,3009],{"class":2169},[1050,16150,1072],{"class":1071},[1050,16152,3463],{"class":3074},[1050,16154,1072],{"class":1071},[1050,16156,3468],{"class":3074},[1050,16158,3471],{"class":3459},[1050,16160,3507],{"class":1341},[1050,16162,1146],{"class":1071},[1050,16164,16165],{"class":1052,"line":4545},[1050,16166,1319],{"class":1067},[1050,16168,16169],{"class":1052,"line":4550},[1050,16170,16171],{"class":1056},"        # Store user info before deletion\n",[1050,16173,16174,16176,16178,16180,16182,16184,16186],{"class":1052,"line":4593},[1050,16175,3946],{"class":1067},[1050,16177,1328],{"class":1071},[1050,16179,2972],{"class":1067},[1050,16181,1072],{"class":1071},[1050,16183,3463],{"class":3074},[1050,16185,1072],{"class":1071},[1050,16187,6261],{"class":3074},[1050,16189,16190],{"class":1052,"line":4617},[1050,16191,1319],{"class":1067},[1050,16193,16194],{"class":1052,"line":4623},[1050,16195,16196],{"class":1056},"        # Delete user account\n",[1050,16198,16199,16201,16203,16205,16207,16209],{"class":1052,"line":4633},[1050,16200,6509],{"class":1067},[1050,16202,1072],{"class":1071},[1050,16204,3463],{"class":3074},[1050,16206,1072],{"class":1071},[1050,16208,7207],{"class":2169},[1050,16210,3396],{"class":1071},[1050,16212,16213],{"class":1052,"line":4648},[1050,16214,1319],{"class":1067},[1050,16216,16217],{"class":1052,"line":4669},[1050,16218,16219],{"class":1056},"        # Log out and redirect\n",[1050,16221,16222,16224,16226,16228],{"class":1052,"line":4690},[1050,16223,6545],{"class":2169},[1050,16225,2173],{"class":1071},[1050,16227,3009],{"class":2169},[1050,16229,1146],{"class":1071},[1050,16231,16232],{"class":1052,"line":4696},[1050,16233,1319],{"class":1067},[1050,16235,16236,16238,16240,16242],{"class":1052,"line":4701},[1050,16237,3754],{"class":1067},[1050,16239,1072],{"class":1071},[1050,16241,3759],{"class":2169},[1050,16243,3762],{"class":1071},[1050,16245,16246,16248],{"class":1052,"line":4718},[1050,16247,12219],{"class":2169},[1050,16249,1116],{"class":1071},[1050,16251,16252,16254,16257,16259,16261,16263],{"class":1052,"line":4723},[1050,16253,3780],{"class":1251},[1050,16255,16256],{"class":1341},"'Account ",[1050,16258,3460],{"class":3459},[1050,16260,3468],{"class":2169},[1050,16262,3471],{"class":3459},[1050,16264,16265],{"class":1341}," has been deleted successfully.'\n",[1050,16267,16268],{"class":1052,"line":4740},[1050,16269,3813],{"class":1071},[1050,16271,16272],{"class":1052,"line":4750},[1050,16273,1319],{"class":1067},[1050,16275,16276,16278,16280,16282,16284,16286,16288],{"class":1052,"line":4755},[1050,16277,2106],{"class":1063},[1050,16279,4949],{"class":2169},[1050,16281,2173],{"class":1071},[1050,16283,1345],{"class":1337},[1050,16285,6118],{"class":1341},[1050,16287,1345],{"class":1337},[1050,16289,1146],{"class":1071},[1050,16291,16292],{"class":1052,"line":4794},[1050,16293,1245],{"emptyLinePlaceholder":1244},[1050,16295,16296],{"class":1052,"line":4803},[1050,16297,16298],{"class":1056},"# Two-factor authentication setup\n",[1050,16300,16301,16303,16306,16308,16310,16312,16314],{"class":1052,"line":4819},[1050,16302,1252],{"class":1251},[1050,16304,16305],{"class":1255}," TwoFactorSetupView",[1050,16307,2173],{"class":1071},[1050,16309,13007],{"class":2859},[1050,16311,1100],{"class":1071},[1050,16313,14290],{"class":2859},[1050,16315,2862],{"class":1071},[1050,16317,16318,16320,16323],{"class":1052,"line":4839},[1050,16319,1266],{"class":1265},[1050,16321,16322],{"class":1269},"Two-factor authentication setup",[1050,16324,1273],{"class":1265},[1050,16326,16327],{"class":1052,"line":4857},[1050,16328,1279],{"class":1067},[1050,16330,16331,16333,16335,16337,16340],{"class":1052,"line":4862},[1050,16332,2880],{"class":1067},[1050,16334,1328],{"class":1071},[1050,16336,1366],{"class":1337},[1050,16338,16339],{"class":1341},"auth/2fa_setup.html",[1050,16341,1435],{"class":1337},[1050,16343,16344],{"class":1052,"line":4867},[1050,16345,1279],{"class":1067},[1050,16347,16348,16350,16352,16354,16356,16358,16360,16362],{"class":1052,"line":4884},[1050,16349,1295],{"class":1251},[1050,16351,4322],{"class":1298},[1050,16353,2173],{"class":1071},[1050,16355,2966],{"class":2965},[1050,16357,1100],{"class":1071},[1050,16359,2986],{"class":2977},[1050,16361,2989],{"class":2971},[1050,16363,2862],{"class":1071},[1050,16365,16366,16368,16371],{"class":1052,"line":4889},[1050,16367,1308],{"class":1265},[1050,16369,16370],{"class":1269},"Add 2FA setup context",[1050,16372,1273],{"class":1265},[1050,16374,16375],{"class":1052,"line":4895},[1050,16376,1319],{"class":1067},[1050,16378,16379,16381,16383,16385,16387,16389,16391,16393,16395],{"class":1052,"line":4910},[1050,16380,4355],{"class":1067},[1050,16382,1328],{"class":1071},[1050,16384,2998],{"class":1288},[1050,16386,3001],{"class":1071},[1050,16388,4364],{"class":2169},[1050,16390,2173],{"class":1071},[1050,16392,4369],{"class":2977},[1050,16394,2989],{"class":2169},[1050,16396,1146],{"class":1071},[1050,16398,16399],{"class":1052,"line":4920},[1050,16400,1319],{"class":1067},[1050,16402,16403,16405,16407,16409,16411,16413,16415],{"class":1052,"line":4925},[1050,16404,3161],{"class":1067},[1050,16406,1328],{"class":1071},[1050,16408,3069],{"class":3068},[1050,16410,1072],{"class":1071},[1050,16412,3009],{"class":3074},[1050,16414,1072],{"class":1071},[1050,16416,3174],{"class":3074},[1050,16418,16419],{"class":1052,"line":4944},[1050,16420,1319],{"class":1067},[1050,16422,16423],{"class":1052,"line":4963},[1050,16424,16425],{"class":1056},"        # Generate TOTP secret if not exists\n",[1050,16427,16428,16430,16432,16434,16436,16438,16440,16442,16444,16446,16448,16450,16452,16454,16456,16458,16460,16462],{"class":1052,"line":4968},[1050,16429,3134],{"class":1063},[1050,16431,5133],{"class":2977},[1050,16433,6908],{"class":6907},[1050,16435,2173],{"class":1071},[1050,16437,3463],{"class":2169},[1050,16439,1100],{"class":1071},[1050,16441,1366],{"class":1337},[1050,16443,6919],{"class":1341},[1050,16445,1345],{"class":1337},[1050,16447,3097],{"class":1071},[1050,16449,3100],{"class":2977},[1050,16451,5133],{"class":2977},[1050,16453,3185],{"class":1067},[1050,16455,1072],{"class":1071},[1050,16457,6919],{"class":3074},[1050,16459,1072],{"class":1071},[1050,16461,9622],{"class":3074},[1050,16463,1259],{"class":1071},[1050,16465,16466,16468],{"class":1052,"line":4990},[1050,16467,5702],{"class":1063},[1050,16469,9585],{"class":1067},[1050,16471,16472,16475,16477,16479,16481,16484],{"class":1052,"line":5017},[1050,16473,16474],{"class":1067},"            secret ",[1050,16476,1328],{"class":1071},[1050,16478,9634],{"class":1067},[1050,16480,1072],{"class":1071},[1050,16482,16483],{"class":2169},"random_base32",[1050,16485,3396],{"class":1071},[1050,16487,16488],{"class":1052,"line":5046},[1050,16489,4620],{"class":1067},[1050,16491,16492,16494,16496,16498,16500,16502,16504,16506,16508],{"class":1052,"line":5073},[1050,16493,5143],{"class":1063},[1050,16495,6908],{"class":6907},[1050,16497,2173],{"class":1071},[1050,16499,3463],{"class":2169},[1050,16501,1100],{"class":1071},[1050,16503,1366],{"class":1337},[1050,16505,6919],{"class":1341},[1050,16507,1345],{"class":1337},[1050,16509,2862],{"class":1071},[1050,16511,16512,16515,16517,16519,16521,16523,16525],{"class":1052,"line":5078},[1050,16513,16514],{"class":1067},"                user",[1050,16516,1072],{"class":1071},[1050,16518,6919],{"class":3074},[1050,16520,1072],{"class":1071},[1050,16522,9622],{"class":3074},[1050,16524,3548],{"class":1071},[1050,16526,16527],{"class":1067}," secret\n",[1050,16529,16530,16532,16534,16536,16538,16540],{"class":1052,"line":5084},[1050,16531,16514],{"class":1067},[1050,16533,1072],{"class":1071},[1050,16535,6919],{"class":3074},[1050,16537,1072],{"class":1071},[1050,16539,3851],{"class":2169},[1050,16541,3396],{"class":1071},[1050,16543,16544,16546],{"class":1052,"line":5117},[1050,16545,3301],{"class":1063},[1050,16547,1259],{"class":1071},[1050,16549,16550,16552,16554,16556,16558,16560,16562],{"class":1052,"line":5122},[1050,16551,16474],{"class":1067},[1050,16553,1328],{"class":1071},[1050,16555,3185],{"class":1067},[1050,16557,1072],{"class":1071},[1050,16559,6919],{"class":3074},[1050,16561,1072],{"class":1071},[1050,16563,16564],{"class":3074},"totp_secret\n",[1050,16566,16567],{"class":1052,"line":5140},[1050,16568,1319],{"class":1067},[1050,16570,16571],{"class":1052,"line":5155},[1050,16572,16573],{"class":1056},"        # Generate QR code\n",[1050,16575,16576,16578],{"class":1052,"line":5161},[1050,16577,3410],{"class":1063},[1050,16579,9585],{"class":1067},[1050,16581,16582,16584],{"class":1052,"line":5177},[1050,16583,3410],{"class":1063},[1050,16585,16586],{"class":1067}," qrcode\n",[1050,16588,16589,16591,16594,16596],{"class":1052,"line":5183},[1050,16590,4093],{"class":1063},[1050,16592,16593],{"class":1067}," io ",[1050,16595,1088],{"class":1063},[1050,16597,16598],{"class":1067}," BytesIO\n",[1050,16600,16601,16603],{"class":1052,"line":5189},[1050,16602,3410],{"class":1063},[1050,16604,16605],{"class":1067}," base64\n",[1050,16607,16608],{"class":1052,"line":5201},[1050,16609,1319],{"class":1067},[1050,16611,16612,16615,16617,16619,16621,16624,16626,16628,16630,16633,16635,16638],{"class":1052,"line":5224},[1050,16613,16614],{"class":1067},"        totp_uri ",[1050,16616,1328],{"class":1071},[1050,16618,9634],{"class":1067},[1050,16620,1072],{"class":1071},[1050,16622,16623],{"class":3074},"totp",[1050,16625,1072],{"class":1071},[1050,16627,9639],{"class":2169},[1050,16629,2173],{"class":1071},[1050,16631,16632],{"class":2169},"secret",[1050,16634,3274],{"class":1071},[1050,16636,16637],{"class":2169},"provisioning_uri",[1050,16639,3762],{"class":1071},[1050,16641,16642,16645,16647,16649,16651,16653],{"class":1052,"line":5229},[1050,16643,16644],{"class":2313},"            name",[1050,16646,1328],{"class":1071},[1050,16648,3463],{"class":2169},[1050,16650,1072],{"class":1071},[1050,16652,8148],{"class":3074},[1050,16654,1116],{"class":1071},[1050,16656,16657,16660,16662,16664,16666],{"class":1052,"line":5235},[1050,16658,16659],{"class":2313},"            issuer_name",[1050,16661,1328],{"class":1071},[1050,16663,3507],{"class":1337},[1050,16665,4409],{"class":1341},[1050,16667,4075],{"class":1337},[1050,16669,16670],{"class":1052,"line":5281},[1050,16671,3813],{"class":1071},[1050,16673,16674],{"class":1052,"line":5286},[1050,16675,1319],{"class":1067},[1050,16677,16678,16681,16683,16686,16688,16691,16693,16696,16698,16700,16702,16705,16707,16709,16711,16714,16716,16718],{"class":1052,"line":5292},[1050,16679,16680],{"class":1067},"        qr ",[1050,16682,1328],{"class":1071},[1050,16684,16685],{"class":1067}," qrcode",[1050,16687,1072],{"class":1071},[1050,16689,16690],{"class":2169},"QRCode",[1050,16692,2173],{"class":1071},[1050,16694,16695],{"class":2313},"version",[1050,16697,1328],{"class":1071},[1050,16699,9683],{"class":3622},[1050,16701,1100],{"class":1071},[1050,16703,16704],{"class":2313}," box_size",[1050,16706,1328],{"class":1071},[1050,16708,13994],{"class":3622},[1050,16710,1100],{"class":1071},[1050,16712,16713],{"class":2313}," border",[1050,16715,1328],{"class":1071},[1050,16717,13657],{"class":3622},[1050,16719,1146],{"class":1071},[1050,16721,16722,16725,16727,16730,16732,16735],{"class":1052,"line":5342},[1050,16723,16724],{"class":1067},"        qr",[1050,16726,1072],{"class":1071},[1050,16728,16729],{"class":2169},"add_data",[1050,16731,2173],{"class":1071},[1050,16733,16734],{"class":2169},"totp_uri",[1050,16736,1146],{"class":1071},[1050,16738,16739,16741,16743,16746,16748,16751,16753,16755],{"class":1052,"line":5366},[1050,16740,16724],{"class":1067},[1050,16742,1072],{"class":1071},[1050,16744,16745],{"class":2169},"make",[1050,16747,2173],{"class":1071},[1050,16749,16750],{"class":2313},"fit",[1050,16752,1328],{"class":1071},[1050,16754,9044],{"class":1529},[1050,16756,1146],{"class":1071},[1050,16758,16759],{"class":1052,"line":5374},[1050,16760,1319],{"class":1067},[1050,16762,16763,16766,16768,16771,16773,16776,16778,16781,16783,16785,16788,16790,16792,16795,16797,16799,16802,16804],{"class":1052,"line":5398},[1050,16764,16765],{"class":1067},"        img ",[1050,16767,1328],{"class":1071},[1050,16769,16770],{"class":1067}," qr",[1050,16772,1072],{"class":1071},[1050,16774,16775],{"class":2169},"make_image",[1050,16777,2173],{"class":1071},[1050,16779,16780],{"class":2313},"fill_color",[1050,16782,1328],{"class":1071},[1050,16784,3507],{"class":1337},[1050,16786,16787],{"class":1341},"black",[1050,16789,3507],{"class":1337},[1050,16791,1100],{"class":1071},[1050,16793,16794],{"class":2313}," back_color",[1050,16796,1328],{"class":1071},[1050,16798,3507],{"class":1337},[1050,16800,16801],{"class":1341},"white",[1050,16803,3507],{"class":1337},[1050,16805,1146],{"class":1071},[1050,16807,16808,16811,16813,16816],{"class":1052,"line":5405},[1050,16809,16810],{"class":1067},"        buffer ",[1050,16812,1328],{"class":1071},[1050,16814,16815],{"class":2169}," BytesIO",[1050,16817,3396],{"class":1071},[1050,16819,16820,16823,16825,16827,16829,16832,16834,16837,16839,16841,16844,16846],{"class":1052,"line":5429},[1050,16821,16822],{"class":1067},"        img",[1050,16824,1072],{"class":1071},[1050,16826,3851],{"class":2169},[1050,16828,2173],{"class":1071},[1050,16830,16831],{"class":2169},"buffer",[1050,16833,1100],{"class":1071},[1050,16835,16836],{"class":2313}," format",[1050,16838,1328],{"class":1071},[1050,16840,1345],{"class":1337},[1050,16842,16843],{"class":1341},"PNG",[1050,16845,1345],{"class":1337},[1050,16847,1146],{"class":1071},[1050,16849,16850,16853,16855,16858,16860,16862],{"class":1052,"line":5434},[1050,16851,16852],{"class":1067},"        buffer",[1050,16854,1072],{"class":1071},[1050,16856,16857],{"class":2169},"seek",[1050,16859,2173],{"class":1071},[1050,16861,3704],{"class":3622},[1050,16863,1146],{"class":1071},[1050,16865,16866],{"class":1052,"line":5444},[1050,16867,1319],{"class":1067},[1050,16869,16870,16873,16875,16878,16880,16883,16885,16887,16889,16892,16895,16898],{"class":1052,"line":5480},[1050,16871,16872],{"class":1067},"        qr_code_data ",[1050,16874,1328],{"class":1071},[1050,16876,16877],{"class":1067}," base64",[1050,16879,1072],{"class":1071},[1050,16881,16882],{"class":2169},"b64encode",[1050,16884,2173],{"class":1071},[1050,16886,16831],{"class":2169},[1050,16888,1072],{"class":1071},[1050,16890,16891],{"class":2169},"getvalue",[1050,16893,16894],{"class":1071},"()).",[1050,16896,16897],{"class":2169},"decode",[1050,16899,3396],{"class":1071},[1050,16901,16902],{"class":1052,"line":5486},[1050,16903,1319],{"class":1067},[1050,16905,16906,16908,16910,16912],{"class":1052,"line":5491},[1050,16907,4384],{"class":1067},[1050,16909,1072],{"class":1071},[1050,16911,4389],{"class":2169},[1050,16913,4392],{"class":1071},[1050,16915,16916,16918,16920,16922,16924,16927],{"class":1052,"line":12288},[1050,16917,1338],{"class":1337},[1050,16919,16632],{"class":1341},[1050,16921,1345],{"class":1337},[1050,16923,1348],{"class":1071},[1050,16925,16926],{"class":2169}," secret",[1050,16928,1116],{"class":1071},[1050,16930,16931,16933,16936,16938,16940,16943],{"class":1052,"line":12293},[1050,16932,1338],{"class":1337},[1050,16934,16935],{"class":1341},"qr_code",[1050,16937,1345],{"class":1337},[1050,16939,1348],{"class":1071},[1050,16941,16942],{"class":2169}," qr_code_data",[1050,16944,1116],{"class":1071},[1050,16946,16947,16949,16951,16953,16955,16958],{"class":1052,"line":12298},[1050,16948,1338],{"class":1337},[1050,16950,16734],{"class":1341},[1050,16952,1345],{"class":1337},[1050,16954,1348],{"class":1071},[1050,16956,16957],{"class":2169}," totp_uri",[1050,16959,1116],{"class":1071},[1050,16961,16962],{"class":1052,"line":12316},[1050,16963,4468],{"class":1071},[1050,16965,16966],{"class":1052,"line":12321},[1050,16967,1319],{"class":1067},[1050,16969,16970,16972],{"class":1052,"line":12327},[1050,16971,2106],{"class":1063},[1050,16973,4481],{"class":1067},[1050,16975,16976],{"class":1052,"line":12341},[1050,16977,1279],{"class":1067},[1050,16979,16980,16982,16984,16986,16988,16990,16992,16994,16996,16998,17000,17002,17004],{"class":1052,"line":12351},[1050,16981,1295],{"class":1251},[1050,16983,13750],{"class":1298},[1050,16985,2173],{"class":1071},[1050,16987,2966],{"class":2965},[1050,16989,1100],{"class":1071},[1050,16991,2972],{"class":2971},[1050,16993,1100],{"class":1071},[1050,16995,2978],{"class":2977},[1050,16997,2981],{"class":2971},[1050,16999,1100],{"class":1071},[1050,17001,2986],{"class":2977},[1050,17003,2989],{"class":2971},[1050,17005,2862],{"class":1071},[1050,17007,17008,17010,17013],{"class":1052,"line":12356},[1050,17009,1308],{"class":1265},[1050,17011,17012],{"class":1269},"Verify and enable 2FA",[1050,17014,1273],{"class":1265},[1050,17016,17017],{"class":1052,"line":12373},[1050,17018,1319],{"class":1067},[1050,17020,17021,17023,17025,17027,17029,17031,17033,17035,17037,17039,17041,17043],{"class":1052,"line":12390},[1050,17022,9426],{"class":1067},[1050,17024,1328],{"class":1071},[1050,17026,2972],{"class":1067},[1050,17028,1072],{"class":1071},[1050,17030,3080],{"class":3079},[1050,17032,1072],{"class":1071},[1050,17034,3085],{"class":2169},[1050,17036,2173],{"class":1071},[1050,17038,1345],{"class":1337},[1050,17040,9445],{"class":1341},[1050,17042,1345],{"class":1337},[1050,17044,1146],{"class":1071},[1050,17046,17047],{"class":1052,"line":12395},[1050,17048,1319],{"class":1067},[1050,17050,17051,17053,17055,17057,17059,17061,17063,17065,17067,17069,17071,17073,17075,17077,17079,17081,17083,17085,17087,17089],{"class":1052,"line":12416},[1050,17052,3134],{"class":1063},[1050,17054,6908],{"class":6907},[1050,17056,2173],{"class":1071},[1050,17058,3009],{"class":2169},[1050,17060,1072],{"class":1071},[1050,17062,3463],{"class":3074},[1050,17064,1100],{"class":1071},[1050,17066,1366],{"class":1337},[1050,17068,6919],{"class":1341},[1050,17070,1345],{"class":1337},[1050,17072,3097],{"class":1071},[1050,17074,9233],{"class":2977},[1050,17076,2972],{"class":1067},[1050,17078,1072],{"class":1071},[1050,17080,3463],{"class":3074},[1050,17082,1072],{"class":1071},[1050,17084,6919],{"class":3074},[1050,17086,1072],{"class":1071},[1050,17088,9622],{"class":3074},[1050,17090,1259],{"class":1071},[1050,17092,17093,17095],{"class":1052,"line":12435},[1050,17094,5702],{"class":1063},[1050,17096,9585],{"class":1067},[1050,17098,17099],{"class":1052,"line":12440},[1050,17100,4620],{"class":1067},[1050,17102,17103,17106,17108,17110,17112,17114,17116,17118,17120,17122,17124,17126,17128,17130],{"class":1052,"line":12453},[1050,17104,17105],{"class":1067},"            totp ",[1050,17107,1328],{"class":1071},[1050,17109,9634],{"class":1067},[1050,17111,1072],{"class":1071},[1050,17113,9639],{"class":2169},[1050,17115,2173],{"class":1071},[1050,17117,3009],{"class":2169},[1050,17119,1072],{"class":1071},[1050,17121,3463],{"class":3074},[1050,17123,1072],{"class":1071},[1050,17125,6919],{"class":3074},[1050,17127,1072],{"class":1071},[1050,17129,9622],{"class":3074},[1050,17131,1146],{"class":1071},[1050,17133,17134],{"class":1052,"line":12468},[1050,17135,4620],{"class":1067},[1050,17137,17138,17140,17142,17144,17146,17148,17150,17152,17154,17156,17158],{"class":1052,"line":12473},[1050,17139,5143],{"class":1063},[1050,17141,9664],{"class":1067},[1050,17143,1072],{"class":1071},[1050,17145,9669],{"class":2169},[1050,17147,2173],{"class":1071},[1050,17149,9445],{"class":2169},[1050,17151,1100],{"class":1071},[1050,17153,9678],{"class":2313},[1050,17155,1328],{"class":1071},[1050,17157,9683],{"class":3622},[1050,17159,2862],{"class":1071},[1050,17161,17162],{"class":1052,"line":12479},[1050,17163,17164],{"class":1056},"                # Enable 2FA\n",[1050,17166,17167,17169,17171,17173,17175,17177,17179,17181,17183],{"class":1052,"line":12486},[1050,17168,5904],{"class":1067},[1050,17170,1072],{"class":1071},[1050,17172,3463],{"class":3074},[1050,17174,1072],{"class":1071},[1050,17176,6919],{"class":3074},[1050,17178,1072],{"class":1071},[1050,17180,9244],{"class":3074},[1050,17182,3548],{"class":1071},[1050,17184,2908],{"class":1529},[1050,17186,17187,17189,17191,17193,17195,17197,17199,17201],{"class":1052,"line":12509},[1050,17188,5904],{"class":1067},[1050,17190,1072],{"class":1071},[1050,17192,3463],{"class":3074},[1050,17194,1072],{"class":1071},[1050,17196,6919],{"class":3074},[1050,17198,1072],{"class":1071},[1050,17200,3851],{"class":2169},[1050,17202,3396],{"class":1071},[1050,17204,17205],{"class":1052,"line":12538},[1050,17206,5180],{"class":1067},[1050,17208,17209,17211,17213,17215],{"class":1052,"line":12543},[1050,17210,5238],{"class":1067},[1050,17212,1072],{"class":1071},[1050,17214,3759],{"class":2169},[1050,17216,3762],{"class":1071},[1050,17218,17219,17221],{"class":1052,"line":12549},[1050,17220,5204],{"class":2169},[1050,17222,1116],{"class":1071},[1050,17224,17225,17227,17230],{"class":1052,"line":12564},[1050,17226,6289],{"class":1337},[1050,17228,17229],{"class":1341},"Two-factor authentication has been enabled successfully.",[1050,17231,1435],{"class":1337},[1050,17233,17234],{"class":1052,"line":12569},[1050,17235,17236],{"class":1071},"                )\n",[1050,17238,17239],{"class":1052,"line":12580},[1050,17240,5180],{"class":1067},[1050,17242,17243,17245,17247,17249,17251,17253,17255],{"class":1052,"line":12587},[1050,17244,5345],{"class":1063},[1050,17246,4949],{"class":2169},[1050,17248,2173],{"class":1071},[1050,17250,1345],{"class":1337},[1050,17252,15781],{"class":1341},[1050,17254,1345],{"class":1337},[1050,17256,1146],{"class":1071},[1050,17258,17259,17261],{"class":1052,"line":12616},[1050,17260,5369],{"class":1063},[1050,17262,1259],{"class":1071},[1050,17264,17265,17267,17269,17271,17273,17275,17277,17279,17281,17283],{"class":1052,"line":12626},[1050,17266,5238],{"class":1067},[1050,17268,1072],{"class":1071},[1050,17270,4266],{"class":2169},[1050,17272,2173],{"class":1071},[1050,17274,3009],{"class":2169},[1050,17276,1100],{"class":1071},[1050,17278,1366],{"class":1337},[1050,17280,9827],{"class":1341},[1050,17282,1345],{"class":1337},[1050,17284,1146],{"class":1071},[1050,17286,17287,17289],{"class":1052,"line":12631},[1050,17288,3301],{"class":1063},[1050,17290,1259],{"class":1071},[1050,17292,17293,17295,17297,17299,17301,17303,17305,17307,17309,17311],{"class":1052,"line":12636},[1050,17294,4261],{"class":1067},[1050,17296,1072],{"class":1071},[1050,17298,4266],{"class":2169},[1050,17300,2173],{"class":1071},[1050,17302,3009],{"class":2169},[1050,17304,1100],{"class":1071},[1050,17306,1366],{"class":1337},[1050,17308,9856],{"class":1341},[1050,17310,1345],{"class":1337},[1050,17312,1146],{"class":1071},[1050,17314,17315],{"class":1052,"line":12653},[1050,17316,1319],{"class":1067},[1050,17318,17319,17321,17323,17325,17327,17329,17331,17333,17335,17337,17339,17341,17343],{"class":1052,"line":12660},[1050,17320,2106],{"class":1063},[1050,17322,3069],{"class":3068},[1050,17324,1072],{"class":1071},[1050,17326,3085],{"class":2169},[1050,17328,2173],{"class":1071},[1050,17330,3009],{"class":2169},[1050,17332,1100],{"class":1071},[1050,17334,2978],{"class":2977},[1050,17336,2981],{"class":2169},[1050,17338,1100],{"class":1071},[1050,17340,2986],{"class":2977},[1050,17342,2989],{"class":2169},[1050,17344,1146],{"class":1071},[1026,17346,17347],{},"Authentication views form the user-facing interface of your authentication system. By implementing comprehensive, secure, and user-friendly authentication views, you provide users with a smooth experience while maintaining strong security standards throughout the authentication process.",[17349,17350,17351],"style",{},"html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sD-vU, html code.shiki .sD-vU{--shiki-light:#E2931D;--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .sm7ve, html code.shiki .sm7ve{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#B5695977;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D77;--shiki-dark-font-style:inherit}html pre.shiki code .sVyVU, html code.shiki .sVyVU{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B56959;--shiki-default-font-style:inherit;--shiki-dark:#C98A7D;--shiki-dark-font-style:inherit}html pre.shiki code .sa2tF, html code.shiki .sa2tF{--shiki-light:#E2931D;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}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 .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .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 .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 .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .se3Ec, html code.shiki .se3Ec{--shiki-light:#90A4AE;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sBPpx, html code.shiki .sBPpx{--shiki-light:#E53935;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .sFGJz, html code.shiki .sFGJz{--shiki-light:#E53935;--shiki-default:#A65E2B;--shiki-dark:#C99076}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 .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}",{"title":1045,"searchDepth":1053,"depth":1060,"links":17353},[17354,17361,17364,17367],{"id":1032,"depth":1060,"text":1033,"children":17355},[17356,17357,17358,17359,17360],{"id":1037,"depth":1094,"text":1038},{"id":2625,"depth":1094,"text":2626},{"id":5518,"depth":1094,"text":5519},{"id":6608,"depth":1094,"text":6609},{"id":7881,"depth":1094,"text":7882},{"id":9947,"depth":1060,"text":9948,"children":17362},[17363],{"id":9951,"depth":1094,"text":9952},{"id":12711,"depth":1060,"text":12712,"children":17365},[17366],{"id":12715,"depth":1094,"text":12716},{"id":14259,"depth":1060,"text":14260,"children":17368},[17369],{"id":14263,"depth":1094,"text":14264},"md",null,{},{"title":412,"description":1028},"4jLv-OKXFRfTmIGqXjjkGJi-HaxLprLHX0xLulNoTOs",[17376,17378],{"title":408,"path":409,"stem":410,"description":17377,"children":-1},"Secure password management is critical for protecting user accounts and maintaining application security. Django provides robust password handling capabilities including hashing, validation, and secure storage. Understanding these features enables you to implement strong password policies and protect user credentials.",{"title":416,"path":417,"stem":418,"description":17379,"children":-1},"Implementing secure and user-friendly login and logout functionality is fundamental to any Django application. Understanding how to handle authentication flows, manage sessions, and provide a smooth user experience while maintaining security is essential for building robust authentication systems.",1772474927913]