{
    "componentChunkName": "component---src-pages-blog-markdown-remark-fields-slug-js",
    "path": "/blog/django-bootstrap-login-template",
    "result": {"data":{"markdownRemark":{"html":"<h2 id=\"table-of-contents\" style=\"position:relative;\"><a href=\"#table-of-contents\" aria-label=\"table of contents permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Table of Contents</h2>\n<ol>\n<li><a href=\"#high-level-refresher\">High Level Refresher</a></li>\n<li><a href=\"#prerequisites\">Prerequisites</a></li>\n<li><a href=\"#setting-up-a-django-application\">Setting up a Django Application</a></li>\n<li><a href=\"#editing-project-configs\">Editing Project Configs</a>\n<ul>\n<li><a href=\"#djangologinsettingspy\">django_login/settings.py</a></li>\n<li><a href=\"#djangologinurlspy\">django_login/urls.py</a></li>\n</ul>\n</li>\n<li><a href=\"#building-the-login-screen-with-bootstrap\">Building the Login Screen with Bootstrap</a>\n<ul>\n<li><a href=\"#logintemplatesregistrationloginhtml\">login/templates/registration/login.html</a></li>\n</ul>\n</li>\n<li><a href=\"#running-the-application\">Running the Application</a></li>\n<li><a href=\"#conclusion\">Conclusion</a></li>\n</ol>\n<h2 id=\"high-level-refresher\" style=\"position:relative;\"><a href=\"#high-level-refresher\" aria-label=\"high level refresher permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>High Level Refresher</h2>\n<p><strong>Django</strong> is a high-level Python framework that follows the model-template-views architectural pattern. Django is one of the most <a href=\"https://www.jetbrains.com/lp/devecosystem-2022/python/\" target=\"_blank\" rel=\"nofollow\">popular web frameworks</a> due to its security, scalability, and flexible design. Companies like Instagram, Reddit, and Dropbox all used Django.</p>\n<p><strong>Bootstrap</strong> is an open-source CSS framework that provides pre-built HTML, CSS, and JavaScript components. This includes elements such as navigation bars, forms, buttons, modals, and more. Originally created by Twitter, Bootstrap is now maintained by a large developer community.</p>\n<h2 id=\"prerequisites\" style=\"position:relative;\"><a href=\"#prerequisites\" aria-label=\"prerequisites permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Prerequisites</h2>\n<ul>\n<li>A basic understanding of HTML, CSS, and Javascript</li>\n<li>A basic understanding of Django</li>\n<li><a href=\"https://www.python.org/downloads/\" target=\"_blank\" rel=\"nofollow\">Python3</a> installed on your machine</li>\n<li><a href=\"https://docs.djangoproject.com/en/4.1/topics/install/\" target=\"_blank\" rel=\"nofollow\">Django</a> installed on your machine</li>\n</ul>\n<h2 id=\"setting-up-a-django-application\" style=\"position:relative;\"><a href=\"#setting-up-a-django-application\" aria-label=\"setting up a django application permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Setting up a Django application</h2>\n<p>Let’s first create a project. In your command line, find the correct directory, and run the following command:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"62836476064445230000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`\\$ django-admin startproject django_login`, `62836476064445230000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\">$ django<span class=\"token operator\">-</span>admin startproject django_login</code></pre></div>\n<p>This creates the project we’ll be working in. From there, we’ll need to create an application. Since we’re building a login screen, navigate into the project with <code class=\"language-text\">cd django_login</code>, and run the following command:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"47156343825291215000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`\\$ python3 manage.py startapp login`, `47156343825291215000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\">$ python3 manage<span class=\"token punctuation\">.</span>py startapp login</code></pre></div>\n<p>Let’s now run the server to test if everything has been set up correctly. Run the following command:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"31094522401433244000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`\\$ python3 manage.py runserver`, `31094522401433244000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\">$ python3 manage<span class=\"token punctuation\">.</span>py runserver</code></pre></div>\n<p>By deploying our Django application, we can check in real-time if the build is compiling correctly. Since we have only initialized our Django application, in <a href=\"http://localhost:8000/\" target=\"_blank\" rel=\"nofollow\">localhost:8000/</a>, you should see the following webpage:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/e476ec85348b335e32e8ebc480950c81/c2d13/django_landing_page.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 56.32911392405063%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAhklEQVQoz72RbQvCMAyE+///qdYPCu2a5qU3WqhMGAtz4sHBJYQnhAT8WEFVsWcz+8iz3uY9h9Yajtz1ooInlZG9+eDBUsq4xwduMSLl7EJd4DxPVEa+BJzQrS6d/I3/B/R0CtjVn1C4Qs1AzGAViCqI63vmFJBFsFCBmqJUQhUeS3rv6NsrpxxonvQFuJUAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Django homepage\"\n        title=\"Django homepage\"\n        src=\"/static/e476ec85348b335e32e8ebc480950c81/f058b/django_landing_page.png\"\n        srcset=\"/static/e476ec85348b335e32e8ebc480950c81/c26ae/django_landing_page.png 158w,\n/static/e476ec85348b335e32e8ebc480950c81/6bdcf/django_landing_page.png 315w,\n/static/e476ec85348b335e32e8ebc480950c81/f058b/django_landing_page.png 630w,\n/static/e476ec85348b335e32e8ebc480950c81/40601/django_landing_page.png 945w,\n/static/e476ec85348b335e32e8ebc480950c81/78612/django_landing_page.png 1260w,\n/static/e476ec85348b335e32e8ebc480950c81/c2d13/django_landing_page.png 2560w\"\n        sizes=\"(max-width: 630px) 100vw, 630px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>Below is a command-line screenshot of setting up a Django application from scratch.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/2e4a47d13781138b1208825baf743501/54c3a/django_terminal.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 56.32911392405063%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB2klEQVQoz32T+U7qQByFeYwb6GYB6UZXS1tburIUUDQx8f3f5LuZiai5mvvHlzM5mZ457fw6eX195e3tjWEY6LqOMAxZr9c4jkMQBHItEL5pmiiKgqZpqKr6A+FPnp6euF6vVFVFURSkaSoRIbquy003bg/9j8mtYdu2vLy8IA4Qga7rYNs2lmVJ9TxPrm8N/+Wz4fPzM4KyLBnHUepDktD3vTzE930ZuFqtfjT+teH+cGC33/NYllK3dY0fBKSbDVmeEycJK8tivlgwUxQUVUNR1W/6hSoCQ8/Fdx2Exv4az7IIXQfPtglch8BxMFUVU1NZ6BpLXWP+weIbwjd1jcnD3CCZGxTLO9K5QX5vks51PG1KqM+wtSnK9M9n4L3xFbj8LfB8PDK0DfuuZVsU7NuGrqq4bDuu7cC5HhjbHXEUY9zdyUtRP17vO+ITqKrG5DiOjKeTZLfbMRyPVE3LUA/0257L/kxbNpiLJYphoOg6ighQZjJcMJtO0W63fD6deH9/53K5cDwcSLc1XvFI2PcEXUfU9aybRnpB3eBXNV6W48YJdhjhRDG+H8gJEM0neZ6z2WxIkkT+DdEHWZqSbzY8xDFlUZDnGXmWkQkvSeT+KIqkJ+b2Nod/AWUET32vP3UNAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Django setup terminal\"\n        title=\"Django setup terminal\"\n        src=\"/static/2e4a47d13781138b1208825baf743501/f058b/django_terminal.png\"\n        srcset=\"/static/2e4a47d13781138b1208825baf743501/c26ae/django_terminal.png 158w,\n/static/2e4a47d13781138b1208825baf743501/6bdcf/django_terminal.png 315w,\n/static/2e4a47d13781138b1208825baf743501/f058b/django_terminal.png 630w,\n/static/2e4a47d13781138b1208825baf743501/40601/django_terminal.png 945w,\n/static/2e4a47d13781138b1208825baf743501/54c3a/django_terminal.png 1257w\"\n        sizes=\"(max-width: 630px) 100vw, 630px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<h2 id=\"editing-project-configs\" style=\"position:relative;\"><a href=\"#editing-project-configs\" aria-label=\"editing project configs permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Editing Project Configs</h2>\n<p><strong>django_login/settings.py</strong></p>\n<p>First, we’ll notify our project that we’ve created an application. To do this, go into the <code class=\"language-text\">django_login</code> folder and find the <code class=\"language-text\">settings.py</code> file. Scroll down to the <code class=\"language-text\">INSTALLED_APPS</code> section and add <code class=\"language-text\">'login'</code> (our application name) to the list of applications.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/7e765bb56ab5affe8f90e43b2f3ee7df/8de58/django_application_setup.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 62.0253164556962%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAAB+UlEQVQoz3WS2W7bMBBF9RVB4ViiuFPUvthF5KRN4f7/L52CVNIGDfJwMeQQPLwzw+J+vzMMI+u60TQRrQ3WB9Z1xfuAcwHvPLJWh+QHveW00oQQeHw8U2zbxjhO3O+/2fcbSmmcczStx0VNO0Xi1GCiQjcK5SQ6yLxOMeWFqvDBcjp9o7hcLoRuyLBlWbNDrTXaW9zU4XtPO1i60RM7S9s74uDpk6Z0lh63zGNH+Xg6HLbzxo+fr9lpcqiVQlmLihHtDMFrvNU4o/BO470lekOwOu+tUTTeoWVN8f16pZ/X7DD1LDtUCtO0uGnBxIgyNVVdUdUCIZMqKilyTihBKSpsqsgZiuv1SoxtBqbBJKAxBmUddRiQLqISoCwpv9K5RMgapRTF9XKh6Uf2/Zl5Xo6StUZpiTSCWgtqUx9OypKqqj7pHZyBqeRuWrk9v9B1fQaaBLSBMG7EaaUNFqfV38sfIR9zUspjynGYedpvDP2QgdZaRF2ztoHXbeA2dbysA31wCFF9Ar3H7HCaJvpx4fX1F/0b0GhDLSVzF9nnga1r2KeOpW2+LDlFIQTFPM+0qYe3Z7quQ+kD2LSBYb/jxydEdaYWIitdPp8P/e/w4eGBYlkWrHWHM2OzrDFo5zHdRAgeq2q0lChZ579mtco9FeLfoE6nE8Mw8AfOtFsEt2JmAgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Django code setup\"\n        title=\"Django code setup\"\n        src=\"/static/7e765bb56ab5affe8f90e43b2f3ee7df/f058b/django_application_setup.png\"\n        srcset=\"/static/7e765bb56ab5affe8f90e43b2f3ee7df/c26ae/django_application_setup.png 158w,\n/static/7e765bb56ab5affe8f90e43b2f3ee7df/6bdcf/django_application_setup.png 315w,\n/static/7e765bb56ab5affe8f90e43b2f3ee7df/f058b/django_application_setup.png 630w,\n/static/7e765bb56ab5affe8f90e43b2f3ee7df/40601/django_application_setup.png 945w,\n/static/7e765bb56ab5affe8f90e43b2f3ee7df/8de58/django_application_setup.png 1219w\"\n        sizes=\"(max-width: 630px) 100vw, 630px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p><strong>django_login/urls.py</strong></p>\n<p>From there, we’ll need to edit the <code class=\"language-text\">urls.py</code> file to account for our new application. We will be using the <a href=\"https://docs.djangoproject.com/en/4.1/topics/auth/default/\" target=\"_blank\" rel=\"nofollow\">built-in <code class=\"language-text\">LoginView</code></a> from Django which will display the login form and process the login action.</p>\n<p>Replace the template code with the following:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"63912935031039920000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`from django.contrib import admin\nfrom django.urls import path, include\nfrom django.contrib.auth.views import LoginView\n\nurlpatterns = [\n    path('', LoginView.as_view()),\n    path('login/', include('login.urls')),\n    path('admin/', admin.site.urls),\n]`, `63912935031039920000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> django<span class=\"token punctuation\">.</span>contrib <span class=\"token keyword\">import</span> admin\n<span class=\"token keyword\">from</span> django<span class=\"token punctuation\">.</span>urls <span class=\"token keyword\">import</span> path<span class=\"token punctuation\">,</span> include\n<span class=\"token keyword\">from</span> django<span class=\"token punctuation\">.</span>contrib<span class=\"token punctuation\">.</span>auth<span class=\"token punctuation\">.</span>views <span class=\"token keyword\">import</span> LoginView\n\nurlpatterns <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n    path<span class=\"token punctuation\">(</span><span class=\"token string\">''</span><span class=\"token punctuation\">,</span> LoginView<span class=\"token punctuation\">.</span>as_view<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    path<span class=\"token punctuation\">(</span><span class=\"token string\">'login/'</span><span class=\"token punctuation\">,</span> include<span class=\"token punctuation\">(</span><span class=\"token string\">'login.urls'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    path<span class=\"token punctuation\">(</span><span class=\"token string\">'admin/'</span><span class=\"token punctuation\">,</span> admin<span class=\"token punctuation\">.</span>site<span class=\"token punctuation\">.</span>urls<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">]</span></code></pre></div>\n<h2 id=\"building-the-login-screen-with-bootstrap\" style=\"position:relative;\"><a href=\"#building-the-login-screen-with-bootstrap\" aria-label=\"building the login screen with bootstrap permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Building the login screen with Bootstrap</h2>\n<p><strong>login/templates/registration/login.html</strong></p>\n<p>First, within the <code class=\"language-text\">login</code> folder, we’ll need to create a <code class=\"language-text\">templates</code> folder, and then a <code class=\"language-text\">registration</code> folder within. From there, we’ll create a <code class=\"language-text\">login.html</code> file.</p>\n<p>Because we’re using the built-in <code class=\"language-text\">LoginView</code> of Django, we must provide the HTML template with the <code class=\"language-text\">registration/login.html</code> format.</p>\n<p>Inside <code class=\"language-text\">login.html</code>, we’ll add the following Bootstrap code (delivered via CDN for convenience, though there are <a href=\"https://getbootstrap.com/docs/5.3/getting-started/download/\" target=\"_blank\" rel=\"nofollow\">other Bootstrap installation methods</a>):</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"8641326152561990000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`<!DOCTYPE html>\n<html lang=&quot;en&quot;>\n  <head>\n    <meta charset=&quot;utf-8&quot;>\n    <meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;>\n    <meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;>\n    <title>Signin</title>\n    <link href=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css&quot; rel=&quot;stylesheet&quot; integrity=&quot;sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD&quot; crossorigin=&quot;anonymous&quot;>    \n    <script src=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js&quot; integrity=&quot;sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN&quot; crossorigin=&quot;anonymous&quot;></script>\n    \n  </head>\n  <body class=&quot;text-center&quot;>\n    <form class=&quot;form-signin&quot;>\n      <h1 class=&quot;h3 mb-3 font-weight-normal&quot;>Django Login Demo</h1>\n      {% csrf_token %}\n      <input id=&quot;inputEmail&quot; class=&quot;form-control&quot; placeholder=&quot;Email address&quot; required=&quot;&quot; autofocus=&quot;&quot; type=&quot;email&quot;>\n      <input id=&quot;inputPassword&quot; class=&quot;form-control&quot; placeholder=&quot;Password&quot; required=&quot;&quot; type=&quot;password&quot;>\n      <div class=&quot;checkbox mb-3&quot;>\n        <label>\n          <input value=&quot;remember-me&quot; type=&quot;checkbox&quot;> Remember me\n        </label>\n      </div>\n      <button class=&quot;btn btn-lg btn-primary btn-block&quot; type=&quot;submit&quot;>Sign in</button>\n    </form>\n  </body>\n</html>\n\n<style>\nhtml,\nbody {\n  height: 100%;\n}\n\nbody {\n  display: -ms-flexbox;\n  display: -webkit-box;\n  display: flex;\n  -ms-flex-align: center;\n  -ms-flex-pack: center;\n  -webkit-box-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  justify-content: center;\n  padding-top: 40px;\n  padding-bottom: 40px;\n  background-color: #f5f5f5;\n}\n\n.form-signin {\n  width: 100%;\n  max-width: 330px;\n  padding: 15px;\n  margin: 0 auto;\n}\n\n.form-signin .checkbox {\n  font-weight: 400;\n}\n\n.form-signin .form-control {\n  position: relative;\n  box-sizing: border-box;\n  height: auto;\n  padding: 10px;\n  font-size: 16px;\n}\n\n.form-signin .form-control:focus {\n  z-index: 2;\n}\n\n.form-signin input[type=&quot;email&quot;] {\n  margin-bottom: -1px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.form-signin input[type=&quot;password&quot;] {\n  margin-bottom: 10px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n</style>`, `8641326152561990000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token doctype\"><span class=\"token punctuation\">&lt;!</span><span class=\"token doctype-tag\">DOCTYPE</span> <span class=\"token name\">html</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>html</span> <span class=\"token attr-name\">lang</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>en<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>head</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">charset</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>utf-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">http-equiv</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>X-UA-Compatible<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>IE=edge<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>viewport<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>width=device-width, initial-scale=1<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>title</span><span class=\"token punctuation\">></span></span>Signin<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>title</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>link</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">rel</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>stylesheet<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">integrity</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">crossorigin</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>anonymous<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>    \n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">integrity</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">crossorigin</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>anonymous<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token script\"></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span>\n    \n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>head</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>body</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text-center<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>form</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>form-signin<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h1</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>h3 mb-3 font-weight-normal<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Django Login Demo<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h1</span><span class=\"token punctuation\">></span></span>\n      {% csrf_token %}\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>inputEmail<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>form-control<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">placeholder</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Email address<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">required</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">autofocus</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>email<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>inputPassword<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>form-control<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">placeholder</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Password<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">required</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>password<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>checkbox mb-3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span><span class=\"token punctuation\">></span></span>\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>remember-me<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>checkbox<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span> Remember me\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>btn btn-lg btn-primary btn-block<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>submit<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Sign in<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>form</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>body</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>html</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>style</span><span class=\"token punctuation\">></span></span><span class=\"token style\"><span class=\"token language-css\">\n<span class=\"token selector\">html,\nbody</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">height</span><span class=\"token punctuation\">:</span> 100%<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">body</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> -ms-flexbox<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> -webkit-box<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> flex<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">-ms-flex-align</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">-ms-flex-pack</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">-webkit-box-align</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">align-items</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">-webkit-box-pack</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">justify-content</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">padding-top</span><span class=\"token punctuation\">:</span> 40px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">padding-bottom</span><span class=\"token punctuation\">:</span> 40px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">background-color</span><span class=\"token punctuation\">:</span> #f5f5f5<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.form-signin</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">width</span><span class=\"token punctuation\">:</span> 100%<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">max-width</span><span class=\"token punctuation\">:</span> 330px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 15px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">margin</span><span class=\"token punctuation\">:</span> 0 auto<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.form-signin .checkbox</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">font-weight</span><span class=\"token punctuation\">:</span> 400<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.form-signin .form-control</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">position</span><span class=\"token punctuation\">:</span> relative<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">box-sizing</span><span class=\"token punctuation\">:</span> border-box<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">height</span><span class=\"token punctuation\">:</span> auto<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 10px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> 16px<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.form-signin .form-control:focus</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">z-index</span><span class=\"token punctuation\">:</span> 2<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.form-signin input[type=\"email\"]</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">margin-bottom</span><span class=\"token punctuation\">:</span> -1px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">border-bottom-right-radius</span><span class=\"token punctuation\">:</span> 0<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">border-bottom-left-radius</span><span class=\"token punctuation\">:</span> 0<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.form-signin input[type=\"password\"]</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">margin-bottom</span><span class=\"token punctuation\">:</span> 10px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">border-top-left-radius</span><span class=\"token punctuation\">:</span> 0<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">border-top-right-radius</span><span class=\"token punctuation\">:</span> 0<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>style</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p><strong>login/views.py</strong></p>\n<p>Now that we have our HTML, we need to render it in Django. Go to the <code class=\"language-text\">views.py</code> file and replace the template code with the following:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"67858589822800860000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`from django.shortcuts import render\n\ndef index(request):\n    return render(request, 'authentication/login.html')`, `67858589822800860000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> django<span class=\"token punctuation\">.</span>shortcuts <span class=\"token keyword\">import</span> render\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">index</span><span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">return</span> render<span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">,</span> <span class=\"token string\">'authentication/login.html'</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h2 id=\"running-the-application\" style=\"position:relative;\"><a href=\"#running-the-application\" aria-label=\"running the application permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Running the application</h2>\n<p>Once everything is set up, your <code class=\"language-text\">login</code> folder structure should look like this:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 276px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/20d79b9ce20f60c182c9534719377051/f2d11/django_directory_structure.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 90.50632911392405%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAAsTAAALEwEAmpwYAAACMklEQVQ4y31U2ZKCMBDkL6zalSOACHgVooIieOB9PFjlg+X//8ds9WBwUXcfppJA0tMz3YnSbDbJcRzSNI1M0yRVVXluGAavP4f4I0xSPM+jLMsI43A4pOv1Svv9nqbTKVmWRbquM7gchRBPUPEOqlimSa1WixqNBvV6PQYfj8cc3W6X/yE6nQ75vsf7AIhkPD6CkwhBCjIiM0oFSBRFvPlwOND9fme2u92OTqcTbTYbQovq9Trv/x2SuSL7AtB+v8/9tC2LJpMJtdttCoKAy8/znBaLRVFBHPN/zJMkoTRNyXNdxlDMBzIWOIySkA3luq5LcRwzWJaltF6v+TBiNptxgtVqxXPHKc4pUh3D0KkfBGTbNoN/f31RrVbjEuMo4m8Av91u3AK0Bgkulwuf01SVe1kCQsUwDEuBUMpyuaTBYMDMR6MhM4ZwaAVag31IKIUyfzPUdY0ZIDMObLdbFgLlQCywYr+qamkfKSgL8rBQCQgzS7v4vs8qA0SCoyyoK+3yFk+V30tGaWAHUJSe50XpKK9i7A+3psIQVkDZ6BNYHY/Hso9QFJ5E4veb8kxQ2gYbcfUAhibDDgCBB9FXAFcYfmIqzKooOAiGAATb+XzOSfAN84Zt/3GXP/RQihKNRsxymiS8HoQhnc9ntk4pivjntXkVBapCFIgBZlmaMVuE/R/DV1HgJ7woYOh7HvsPjwFuA/oofSjKd7LK7FlyacqCpXxcMSLUh5ExrwgiChFexx+i2RzoqfHA0wAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Django directory structure\"\n        title=\"Django directory structure\"\n        src=\"/static/20d79b9ce20f60c182c9534719377051/f2d11/django_directory_structure.png\"\n        srcset=\"/static/20d79b9ce20f60c182c9534719377051/c26ae/django_directory_structure.png 158w,\n/static/20d79b9ce20f60c182c9534719377051/f2d11/django_directory_structure.png 276w\"\n        sizes=\"(max-width: 276px) 100vw, 276px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>When we run python <code class=\"language-text\">manage.py runserver</code>, the following webpage should show up on your localhost.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/323f507ab976fee9d84e66d9685dda57/c2d13/django_login_page.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 56.32911392405063%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgUlEQVQoz62R0QqDMAxF+/+/uL1OYVPc6L12Gy13REREBGvXhwPJJZwE4mKKSiusj3En2/RpB8ud9141cSB1BGdyZjOEWLZbXS4EpqtM1D3uej2HZUH5haA+gbrcoGtDfd+Ux5/CMEJtTzUdptqyYiFX0jDyUJb5lFmEal8+R3XhDyS1Uuj5rFmrAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"django login page\"\n        title=\"django login page\"\n        src=\"/static/323f507ab976fee9d84e66d9685dda57/f058b/django_login_page.png\"\n        srcset=\"/static/323f507ab976fee9d84e66d9685dda57/c26ae/django_login_page.png 158w,\n/static/323f507ab976fee9d84e66d9685dda57/6bdcf/django_login_page.png 315w,\n/static/323f507ab976fee9d84e66d9685dda57/f058b/django_login_page.png 630w,\n/static/323f507ab976fee9d84e66d9685dda57/40601/django_login_page.png 945w,\n/static/323f507ab976fee9d84e66d9685dda57/78612/django_login_page.png 1260w,\n/static/323f507ab976fee9d84e66d9685dda57/c2d13/django_login_page.png 2560w\"\n        sizes=\"(max-width: 630px) 100vw, 630px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>Great success!</p>\n<h2 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h2>\n<p>Congrats - you’ve created a login screen using Django with Bootstrap! You’ll still need to set up the authentication logic (hashing &#x26; storing the user credentials, session management, building the signup and forgot password screens, and redirecting post-login).</p>\n<p>But for now - time to celebrate!</p>\n<p>At SuperTokens, we simplify your authentication process - and help you set up a fully functioning <a href=\"https://github.com/supertokens/supertokens-python/tree/master/examples/with-django/with-thirdpartyemailpassword\" target=\"_blank\" rel=\"nofollow\">Django authentication flow</a> within minutes. Check us <a href=\"https://supertokens.com\" target=\"_blank\" rel=\"nofollow\">out</a> or message us on <a href=\"https://supertokens.com/discord\" target=\"_blank\" rel=\"nofollow\">Discord</a>!</p>","frontmatter":{"date":"July 10, 2024","title":"Setting up an authentication form with bootstrap in a Django application","cover":"django_bootstrap_banner.png","author":"Nemi Shah","description":"This tutorial wil guide you on how you can setup a bootstrap login template in Django"},"fields":{"slug":"/django-bootstrap-login-template/"}},"site":{"siteMetadata":{"title":"SuperTokens Blog"}}},"pageContext":{"id":"70139935-64d2-5b9e-bf71-7eb8a5316c84","fields__slug":"/django-bootstrap-login-template/","__params":{"fields__slug":"django-bootstrap-login-template"}}},
    "staticQueryHashes": []}