Создание шаблонов для регистрации и авторизации
В папке templates/accounts создаем два файла: user_register.html и user_login.html
В файл user_register.html добавляем следующий HTML код:
{% extends 'main.html' %}
{% block content %}
<div class="card mb-3 border-0 nth-shadow">
<div class="card-body">
<div class="card-title nth-card-title">
<h4>Регистрация на сайте</h4>
</div>
<form method="post" action="{% url 'register' %}" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-dark mt-2">Зарегистрироваться</button>
</form>
</div>
</div>
{% endblock %}
А в файл user_login.html следующий код:
{% extends 'main.html' %}
{% block content %}
<div class="card mb-3 border-0 nth-shadow">
<div class="card-body">
<div class="card-title nth-card-title">
<h4>Авторизация на сайте</h4>
</div>
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
{{ form.as_p }}
<div class="d-grid gap-2 d-md-block mt-2">
<button type="submit" class="btn btn-dark">Авторизоваться</button>
</div>
</form>
</div>
</div>
{% endblock %}
Для выхода из системы мы не создаем никаких шаблонов.
И последним шагом нам нужно добавить ссылки входа и выхода в шаблон шапки сайта, для этого откроем header.html и изменим код, добавив навигационные ссылки:
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="/">My Django Blog 2.0</a>
</div>
</nav>
<div class='d-flex justify-content-end '>
{% if request.user.is_authenticated %}
<div class="dropdown text-end">
<a href="#" class="d-block link-dark text-decoration-none dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
{{ request.user }}
</a>
<ul class="dropdown-menu text-small" style="">
<li><a class="dropdown-item" href="{% url 'post_create' %}">Добавить статью</a></li>
<li><a class="dropdown-item" href="{% url 'profile_detail' request.user.profile.slug %}">Мой профиль</a></li>
<li><hr class="dropdown-divider"></li>
<li>
<form action="{% url 'logout' %}" method="post">{% csrf_token %}
<a href="#" class="dropdown-item" onclick="parentNode.submit();">Log Out</a>
</form>
</li>
</ul>
</div>
{% else %}
<ul class="nav ">
<li><a href="{% url 'register' %}" class="nav-link px-2 link-secondary">Регистрация</a></li>
<li><a href="{% url 'login' %}" class="nav-link px-2 link-dark">Вход</a></li>
</ul>
{% endif %}
</div>
Проверяем результаты работы форм и представлений
Теперь проверим, как все у нас работает. Для этого я выйду из аккаунта и попробую зарегистрировать новый аккаунт и авторизоваться с помощью него.
Запустим сервер и в шапке сайта нажмем кнопку "Регистрация". Заполним все данные и нажмем кнопку "Зарегистрироваться".
Далее попробуем авторизоваться на сайте:
Мы видим что мы успешно авторизовались, теперь у нас есть доступ к профилю и другим возможностям сайта.
На этом разработка системы аккаунтов окончена.