Django 5 для начинающих

Прогресс по курсу:  9/1004

10.12 Доработки системы авторизации и регистрации
3 из 3 шагов пройдено

Создание шаблонов для регистрации и авторизации

В папке 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>

Проверяем результаты работы форм и представлений

Теперь проверим, как все у нас работает. Для этого я выйду из аккаунта и попробую зарегистрировать новый аккаунт и авторизоваться с помощью него.

Запустим сервер и в шапке сайта нажмем кнопку "Регистрация". Заполним все данные и нажмем кнопку "Зарегистрироваться".

Далее попробуем авторизоваться на сайте:

Мы видим что мы успешно авторизовались, теперь у нас есть доступ к профилю и другим возможностям сайта.

На этом разработка системы аккаунтов окончена.


  • Комментария
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

Как-то странно выглядит навигация вне navbar:

  

При выпадении меню еще и оба скроллбара появляются
Это сознательно вынесли?

Совсем немного допилить если, то можно все в навбаре разместить, как-то оно так приятнее, на мой взгляд:

@ilya_kutaev, соглашусь, лучше переделаем.

Не работала регистрация пока не добавил model = User в Meta class регистрационной формы. Выдавало ошибку Django ModelForm has no model class specified

@Иван_Белоусов, Очень странно, мы в форме регистрации наследуемся от UserCreationForm, которая наследуется от BaseUserCreationForm. И вот она содержит в себе model = User в мета классе.

Подскажите а в header куда нужно что вписать, чтобы опять подвал не уехал наверх? После добавления кода в header.html опять 

----------

@Георгий_Тимофеев, и как это предотвратить в будущем при добавлении нового кода

@Георгий_Тимофеев, больше никуда не нужно, мы добавили у тега body стили, и добавили у футера. Остальной код не должен влиять на них, тем более header.html. Может где-то не вставили закрывающийся div или подобный тег?

Проверьте код в main.html, там должен быть тег <body class="d-flex flex-column min-vh-100"> и в footer.html должен быть тег <footer class="py-5 bg-dark mt-2 mt-auto">

@Илья_Перминов, спасибо, из body почему то пропали настройки