Как сделать регистрацию и авторизацию на сайте django

Обновлено: 07.07.2024

Расширение стандартного пользователя / формы регистрации

Детальный разбор расширения формы регистрации на примерах

Итоги урока

Вы действительно хотите открыть доступ к тестированию по курсу Django на 40 дней?

Целью данного урока является познакомить учащегося с реализацией регистрации и авторизации пользователей на сайте.

Получите курс бесплатно

Спасибо за регистрацию

Спасибо за регистрацию

Ваш аккаунт успешно подтвержден.
Начать обучение вы можете через Личный кабинет
пользователя или непосредственно на странице курса.

Подтверждение аккаунта

На Ваш номер телефона было отправлено смс с кодом активации аккаунта. Пожалуйста, введите код в поле ввода.

Для того, чтобы сделать оформление страницы авторизации в едином стиле с оформлением всего сайта, можно подготовить шаблон оформления и подменить шаблон url, чтобы отдавать требуемое нам представление страницы с требуемым шаблоном. Также это может быть полезно для внедрения функционала блокировок от подбора пароля и более интеллектуального перенаправления пользователя на страницы сайта после авторизации в зависимости от того, имеет ли пользователь статус персонала или нет.

Для работы с авторизацией пользователей предлагаю использовать отдельное приложение/модуль, который будет называться accounts.

Форму авторизации писать не требуется, поскольку можно воспользоваться стандартной формой AuthenticationForm , которую необходимо будет использовать в шаблоне страницы авторизации.

Структура модуля accounts

В данном модуле используется два шаблона:

  • login.html - это шаблон для страницы авторизации
  • login_widget.html - это шаблон для виджета авторизации, который может быть помещён на любой странице сайта, чтобы пользователь мог авторизоваться не только со страницы авторизации, но и с любой страницы со статьёй, например.
  1. 1. Структура модуля accounts
  2. 2. login_widget.html
  3. 3. login.html
  4. 4. urls.py файлы
  5. 5. settings.py и apps.py
    1. 1. apps.py
    2. 2. settings.py

    login_widget.html

    Напоминаю, что я использую django_bootstrap3 на сайте, поэтому и шаблон будет с его использованием.

    login.html

    В шаблоне авторизации добавляется данный виджет. По тому же самому принципу можно добавлять виджет авторизации на любой странице в любом месте сайта.

    urls.py файлы

    Для того, чтобы подменить страницу авторизации, да и в целом использовать виджет авторизации, необходимо в файле urls.py вашего проекта добавить следующие шаблоны url.

    urls.py файл модуля accounts будет выглядеть следующим образом:

    settings.py и apps.py

    Не забудьте зарегистрировать модуль авторизаций в настройках сайта.

    apps.py

    settings.py

    views.py

    А теперь перейдём к представлению, которое будет обрабатывать авторизацию, как со страницы авторизации, так и с люой другой страницы.

    Для Django рекомендую VDS-сервера хостера Timeweb .

    Рекомендуем хостинг TIMEWEB

    Рекомендуем хостинг TIMEWEB

    Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

    В Django есть множество встроенных возможностей, которые позволяют не реализовывать многие классы для стандартных операций. Среди них - авторизация. Django изначально предоставляет пользовательскую систему. Но её можно использовать лучше, чем по умолчанию.

    В предыдущей заметке об админ-панели Django мы уже познакомились с пользователями и авторизацией Django. Но это было довольно поверхностно и только в рамках админ-панели. Если же мы хотим добавить что-то своё в пользователей и авторизацию пользователей на сайте, нам нужно расширить уже имеющуюся систему необходимыми возможностями.

    Заменяем стандартную Django модель для пользователей на свою

    Для того, чтобы начать разработку своего кастомного пользователя, создадим приложение, которое будет за него отмечать -

    После чего в нём создадим модель, которая будет отвечать за хранение и предоставление информации о пользователе - ./user/models.py :

    Не забываем добавить в админку, как это делалось в этой заметке. А также зарегистрировать в конфигурационном файле ./application/settings.py :

    Первое - подгрузка самого приложения, второе - указываем, какая модель будет моделью в Django, отвечающей за пользователя. К слову, после этого регистрация нашего супер-юзера слетит (ибо уже другая модель). Придётся снова делать createsuperuser .

    Добавляем логин на сайт Django

    Чтобы наша моделька и в целом вся пользовательская система работала на всём сайте, а не только в админке, нам нужно сделать пару дополнительных правок. Модель у нас уже есть, но, как минимум, надо добавить url для приложения. Например, application/urls.py :

    И в самом приложении - user/urls.py :

    Можете заметить, что здесь мы используем view для логина пользователя в Django. Давайте его определим, используя уже встроенный в django.contrib.auth :

    То есть достаточно указать шаблон для отображения и форму, которая будет принимать и валидировать данные с фронтенда. В частности, форму логина можно сделать с помощью стандартной в файле user/forms.py :

    По умолчанию используется username и password - достаточно хорошо для нас. Ну и сам шаблон формы user/templates/user/login.html :

    После логина вы будете перенаправлены по адресу, указанному в application/settings.py :

    Первый url для тех, кто хочет авторизоваться, второй - для тех, кто только что вошёл.


    В данной статье мы покажем вам, как создать страницу входа на Django-сайт при помощи Python.

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

    Перейдём непосредственно к коду создания страницы входа в Django.

    Первым делом мы создадим файл шаблона страницы входа. Назовём эту страницу — login.html.

    На этой странице будет располагаться заголовок, который сообщает о том, что это страница входа в систему, а также форма входа, состоящая из двух полей: имя пользователя и пароль.

    Обратим внимание на следующий код:

    Итак, на этой странице располагается наша форма входа.

    Далее мы перейдем к нашему файлу forms.py, который содержит нашу форму.

    В файле шаблона мы указали переменную формы, но не создали её. Исправим это создав форму Loginform следующим образом:

    Вам необходимо импортировать формы из Django в каждом файле forms.py.

    После чего мы создаем форму Loginform, которая является экземпляром класса Form.

    Эта форма имеет только 2 поля: имя пользователя и пароль, то есть всё, что нам нужно для входа в систему.

    В свою очередь, имя пользователя может содержать не более 25 символов, а пароль — не более 30.

    Итак, мы собираемся создать нашу отдельную страницу входа в систему по адресу URL /siteusers/login.

    Открываем файл urls.py в приложении siteusers и затем приводим код к следующему виду:

    Напоследок обратимся к нашему файлу views.py, содержимое которого показано ниже:

    Чтобы создать пользователя нам необходимо импортировать render для отображения страницы шаблона, форму Loginform из файла forms.py и User из django.contrib.auth.models.

    После чего мы вызываем функцию pagelogin(). Вы можете называть функцию как угодно, только не называйте ее login(), так как в Django уже есть встроенная функция login(). Если вы назовете функциональное представление login(), Django не поймёт, на какую функцию вы ссылаетесь, и скрипт не будет работать, поэтому назовите эту функцию как-нибудь иначе.

    Также у нас есть две переменные — uservalue и passwordvalue. Устанавливаем их значение равным пустым строкам, чтобы сделать переменные глобальными.

    Далее мы создаём экземпляр form формы Loginform, которая была описана нами в файле forms.py.

    Если форма верна, мы устанавливаем переменную uservalue равной полю username, а переменную passwordvalue равной полю password.

    Затем мы аутентифицируем пользователя на основе предоставленного им имени пользователя и пароля. Django имеет встроенную функцию аутентификации.

    Если пользователь существует (т.е. не None), то мы регистрируем пользователя с помощью функции login(). В эту функцию передаём запрос и пользователя.

    Если пользователя не существует, то это означает, что комбинация имени пользователя и пароля неверна.

    Читайте также: