Introduction
This is the first article in a multipart series on implementing the Django authentication system. To aid in the demonstration of the many features of Django authentication I will be building a demo survey application which I’ll call Django Survey throughout these tutorials.
Выход
Для полного счастья осталось добавить возможность выхода (для ещё большего счастья смену и восстановление пароля, но об этом ниже). Для выхода не требуется никаких форм и шаблонов, поэтому представление для него делается буквально в четыре строки:
Apps.py
from django.apps import AppConfig class AccountsConfig(AppConfig): name = 'accounts'High level approach (using the stock django loginview)
Over in survey/urls.py I locate the login url path and replace the custom built views.LoginView class with the builtin django.contrib.auth.views.LoginView and assign a parameter named template_name within the .as_view(…) method with the same survey/login.html template used previously.
# survey/urls.py from django.contrib.auth import views as auth_views from django.urls import path from . import views urlpatterns = [ path('register/', views.RegisterView.as_view(), name='register'), path('login/', auth_views.LoginView.as_view(template_name='survey/login.html'), name='login'), path('profile/', views.ProfileView.as_view(), name='profile'), path('logout/', auth_views.LogoutView.as_view(), name='logout'), ]Local enivironment setup for django development
To start off I create a Python3 virtual enviroment, activate it, pip install django and django-widget-tweaks (widget-tweaks is used for controlling the way forms are rendered).
python3 -m venv venv source venv/bin/activate (venv) $ pip install django django-widget-tweaksAfter that I create a django_survey project, change directories into the resulting django_survey directory and, make a Django app named survey.
Login.html
В шаблоне авторизации добавляется данный виджет. По тому же самому принципу можно добавлять виджет авторизации на любой странице в любом месте сайта.
Login_widget.html
Напоминаю, что я использую
django_bootstrap3
на сайте, поэтому и шаблон будет с его использованием.
Settings.py
INSTALLED_APPS = [ 'accounts.apps.AccountsConfig', ]Settings.py и apps.py
Не забудьте зарегистрировать модуль авторизаций в настройках сайта.
Urls.py файлы
Для того, чтобы подменить страницу авторизации, да и в целом использовать виджет авторизации, необходимо в файле urls.py вашего проекта добавить следующие шаблоны url.
Views.py
А теперь перейдём к представлению, которое будет обрабатывать авторизацию, как со страницы авторизации, так и с люой другой страницы.
Аутентификация в веб-запросах¶
Django использует sessions и промежуточное ПО для подключения системы аутентификации к requestobjects.
Все виды аутентификации¶
Это список со всеми представлениями, которые предоставляет django.contrib.auth. Подробности реализации смотрите в Использование представлений.
Встроенные формы¶
Если вы не хотите использовать встроенные представления, но желаете избежать необходимости писать формы для этой функциональности, система аутентификации предоставляет несколько встроенных форм, расположенных в django.contrib.auth.forms:
Групи¶
django.contrib.auth.models.Group Модели — это общий способ категоризации пользователей, чтобы вы могли применять к ним разрешения или другие метки. Пользователь может принадлежать к любому количеству групп.
Пользователь в группе автоматически имеет разрешения, предоставленные этой группе. Например, если группа Siteeditors имеет разрешение can_edit_home_page, то любой пользователь в этой группе будет иметь это разрешение.
Данные аутентификации в шаблонах¶
Текущий зарегистрированный пользователь и его разрешения доступны в template context при использовании RequestContext.
Декоратор login_required¶
login_required(redirect_field_name=‘next’, login_url=None)[исходныйкод]¶В качестве сокращения можно использовать удобный декоратор
login_required():login_required()делает следующее:По умолчанию путь, на который пользователь должен быть перенаправлен после успешной аутентификации, хранится в параметре строки запроса под названием
"next". Если вы предпочитаете использовать другое имя для этого параметра,login_required()принимает необязательный параметрredirect_field_name:Обратите внимание, что если вы зададите значение
redirect_field_name, то, скорее всего, вам также придется настроить шаблон входа в систему, так как контекстная переменная шаблона, хранящая путь перенаправления, будет использовать в качестве ключа значениеredirect_field_name, а не"next"(по умолчанию).login_required()также принимает необязательный параметрlogin_url. Пример:Обратите внимание, что если вы не указываете параметр
login_url, вам нужно убедиться, что параметрsettings.LOGIN_URLи ваше представление входа правильно связаны. Например, используя значения по умолчанию, добавьте следующие строки в URLconf:settings.LOGIN_URLтакже принимает имена функций представления и named URL patterns. Это позволяет вам свободно переназначать представление входа в URLconf без необходимости обновлять настройки.
Изменение паролей¶
Django не хранит необработанные (открытый текст) пароли в модели пользователя, а только хэш (см. documentation of how passwords are managed для полной информации). В связи с этим не пытайтесь манипулировать атрибутом password пользователя напрямую. Поэтому при создании пользователя используется вспомогательная функция.
Чтобы изменить пароль пользователя, у вас есть несколько вариантов:
Использование представлений¶
Существуют различные методы реализации этих представлений в вашем проекте. Самый простой способ — включить предоставленный URLconf в django.contrib.auth.urls в ваш собственный URLconf, например:
Это будет включать следующие шаблоны URL:
Представления предоставляют имя URL для более удобного использования. Подробнее об использовании именованных шаблонов URL см. в the URL documentation.
Если вы хотите получить больший контроль над своими URL-адресами, вы можете сослаться на определенное представление в URLconf:
Представления имеют необязательные аргументы, которые можно использовать для изменения поведения представления. Например, если вы хотите изменить имя шаблона, которое использует представление, вы можете указать аргумент template_name. Для этого в URLconf можно указать аргументы в виде ключевых слов, которые будут переданы представлению. Например:
Все представления являются class-based, что позволяет легко настраивать их с помощью подклассов.
Как войти в систему пользователя¶
Если у вас есть аутентифицированный пользователь, которого вы хотите присоединить к текущей сессии — это делается с помощью функции login().
Кэширование разрешений¶
ModelBackend кэширует разрешения на объект пользователя после первого раза, когда они должны быть получены для проверки разрешений. Обычно это подходит для цикла запрос-ответ, поскольку разрешения обычно не проверяются сразу после их добавления (например, в админке).
Миксин permissionrequiredmixin¶
Чтобы применить проверку разрешений к class-based views, вы можете использовать PermissionRequiredMixin:
- class
PermissionRequiredMixin¶ Этот миксин, как и декоратор
permission_required, проверяет, имеет ли пользователь, обращающийся к представлению, все заданные разрешения. Вы должны указать разрешение (или итерацию разрешений) с помощью параметраpermission_required:Вы можете установить любой из параметров
AccessMixin, чтобы настроить обработку неавторизованных пользователей.Вы также можете переопределить эти методы:
get_permission_required()¶Возвращает итерабель имен разрешений, используемых данным микшином. По умолчанию используется атрибут
permission_required, при необходимости преобразуется в кортеж.
has_permission()¶Возвращает булево значение, обозначающее, имеет ли текущий пользователь разрешение на выполнение декорированного представления. По умолчанию возвращается результат вызова
has_perms()со списком разрешений, возвращаемымget_permission_required().
Модели прокси¶
Прокси-модели работают точно так же, как и конкретные модели. Разрешения создаются с использованием собственного типа содержимого прокси-модели. Прокси-модели не наследуют разрешения конкретной модели, которую они подклассифицируют:
Ограничение доступа для вошедших в систему пользователей, которые прошли тест¶
Чтобы ограничить доступ на основе определенных разрешений или какого-либо другого теста, вы сделаете практически то же самое, что описано в предыдущем разделе.
Ограничение доступа для вошедших в систему пользователей¶
Декоратор login_required¶
login_required(redirect_field_name=‘next’, login_url=None)[исходныйкод]¶В качестве сокращения можно использовать удобный декоратор
login_required():login_required()делает следующее:По умолчанию путь, на который пользователь должен быть перенаправлен после успешной аутентификации, хранится в параметре строки запроса под названием
"next". Если вы предпочитаете использовать другое имя для этого параметра,login_required()принимает необязательный параметрredirect_field_name:Обратите внимание, что если вы зададите значение
redirect_field_name, то, скорее всего, вам также придется настроить шаблон входа в систему, так как контекстная переменная шаблона, хранящая путь перенаправления, будет использовать в качестве ключа значениеredirect_field_name, а не"next"(по умолчанию).login_required()также принимает необязательный параметрlogin_url. Пример:Обратите внимание, что если вы не указываете параметр
login_url, вам нужно убедиться, что параметрsettings.LOGIN_URLи ваше представление входа правильно связаны. Например, используя значения по умолчанию, добавьте следующие строки в URLconf:settings.LOGIN_URLтакже принимает имена функций представления и named URL patterns. Это позволяет вам свободно переназначать представление входа в URLconf без необходимости обновлять настройки.
Ограничение доступа для вошедших в систему пользователей, которые прошли тест¶
Чтобы ограничить доступ на основе определенных разрешений или какого-либо другого теста, вы сделаете практически то же самое, что описано в предыдущем разделе.
Вы можете запустить свой тест на request.user непосредственно в представлении. Например, это представление проверяет, есть ли у пользователя email в нужном домене, и если нет, перенаправляет на страницу входа:
user_passes_test(test_func, login_url=None, redirect_field_name=‘next’)[исходныйкод]¶В качестве сокращения можно использовать удобный декоратор
user_passes_test, который выполняет перенаправление, когда вызываемый объект возвращаетFalse:user_passes_test()принимает обязательный аргумент: вызываемый объект, который принимает объектUserи возвращаетTrue, если пользователю разрешено просматривать страницу. Обратите внимание, чтоuser_passes_test()не проверяет автоматически, чтоUserне является анонимным.user_passes_test()принимает два необязательных аргумента:login_url- Позволяет указать URL, на который будут перенаправлены пользователи, не прошедшие тест. Это может быть страница входа в систему и по умолчанию имеет значение
settings.LOGIN_URL, если вы его не укажете. redirect_field_name- То же самое, что и для
login_required(). Установка значенияNoneудаляет его из URL, что может понадобиться, если вы перенаправляете пользователей, не прошедших тест, на страницу без входа в систему, где нет «следующей страницы».
Например:
- class
UserPassesTestMixin¶ При использовании class-based views, вы можете использовать
UserPassesTestMixinдля этого.test_func()¶Вы должны переопределить метод
test_func()класса, чтобы указать выполняемый тест. Кроме того, вы можете установить любой из параметровAccessMixinдля настройки обработки неавторизованных пользователей:
get_test_func()¶Вы также можете переопределить метод
get_test_func(), чтобы миксин использовал для своих проверок функцию с другим именем (вместоtest_func()).
Декоратор permission_required¶
permission_required(perm, login_url=None, raise_exception=False)[исходныйкод]¶Это довольно распространенная задача — проверить, есть ли у пользователя определенное разрешение. По этой причине Django предоставляет ярлык для этого случая: декоратор
permission_required().:Как и в методе
has_perm(), имена разрешений принимают форму"<applabel>.<permissioncodename>"(например,polls.add_choiceдля разрешения на модель в приложенииpolls).Декоратор также может принимать итерацию разрешений, в этом случае пользователь должен иметь все разрешения, чтобы получить доступ к представлению.
Обратите внимание, что
permission_required()также принимает необязательный параметрlogin_url:Как и в декораторе
login_required(),login_urlпо умолчанию равенsettings.LOGIN_URL.Если задан параметр
raise_exception, декоратор подниметPermissionDenied, предлагая the 403 (HTTP Forbidden) view вместо перенаправления на страницу входа.Если вы хотите использовать
raise_exception, но при этом дать пользователям возможность сначала войти в систему, вы можете добавить декораторlogin_required():Это также позволяет избежать цикла перенаправления, когда
LoginViewстановитсяredirect_authenticated_user=True, а у вошедшего пользователя нет всех необходимых прав.
Миксин PermissionRequiredMixin¶
Чтобы применить проверку разрешений к class-based views, вы можете использовать PermissionRequiredMixin:
- class
PermissionRequiredMixin¶ Этот миксин, как и декоратор
permission_required, проверяет, имеет ли пользователь, обращающийся к представлению, все заданные разрешения. Вы должны указать разрешение (или итерацию разрешений) с помощью параметраpermission_required:Вы можете установить любой из параметров
AccessMixin, чтобы настроить обработку неавторизованных пользователей.Вы также можете переопределить эти методы:
get_permission_required()¶Возвращает итерабель имен разрешений, используемых данным микшином. По умолчанию используется атрибут
permission_required, при необходимости преобразуется в кортеж.
has_permission()¶Возвращает булево значение, обозначающее, имеет ли текущий пользователь разрешение на выполнение декорированного представления. По умолчанию возвращается результат вызова
has_perms()со списком разрешений, возвращаемымget_permission_required().
Представления аутентификации¶
Django предоставляет несколько представлений, которые вы можете использовать для обработки входа, выхода и управления паролями. В них используется stock auth forms, но вы можете передавать и свои собственные формы.
Django не предоставляет шаблонов по умолчанию для представлений аутентификации. Вы должны создать свои собственные шаблоны для представлений, которые вы хотите использовать. Контекст шаблона документирован в каждом представлении, см. Все виды аутентификации.
Использование представлений¶
Существуют различные методы реализации этих представлений в вашем проекте. Самый простой способ — включить предоставленный URLconf в django.contrib.auth.urls в ваш собственный URLconf, например:
Это будет включать следующие шаблоны URL:
Представления предоставляют имя URL для более удобного использования. Подробнее об использовании именованных шаблонов URL см. в the URL documentation.
Если вы хотите получить больший контроль над своими URL-адресами, вы можете сослаться на определенное представление в URLconf:
Представления имеют необязательные аргументы, которые можно использовать для изменения поведения представления. Например, если вы хотите изменить имя шаблона, которое использует представление, вы можете указать аргумент template_name. Для этого в URLconf можно указать аргументы в виде ключевых слов, которые будут переданы представлению. Например:
Все представления являются class-based, что позволяет легко настраивать их с помощью подклассов.
Все виды аутентификации¶
Это список со всеми представлениями, которые предоставляет django.contrib.auth. Подробности реализации смотрите в Использование представлений.
- class
LoginView¶ Имя URL:
loginПодробнее об использовании именованных шаблонов URL см. в разделе the URL documentation.
Методы и атрибуты
template_name¶Имя шаблона, отображаемого для представления, используемого для входа пользователя в систему. По умолчанию имеет значение
registration/login.html.
next_page¶URL для перенаправления после входа в систему. По умолчанию
LOGIN_REDIRECT_URL.
redirect_field_name¶Имя поля
GET, содержащего URL для перенаправления после входа в систему. По умолчанию используетсяnext. Переопределяет URLget_default_redirect_url(), если передан заданный параметрGET.
authentication_form¶Вызываемый объект (обычно класс формы), который будет использоваться для аутентификации. По умолчанию
AuthenticationForm.
extra_context¶Словарь контекстных данных, которые будут добавлены к контекстным данным по умолчанию, переданным в шаблон.
redirect_authenticated_user¶Булево значение, определяющее, будут ли аутентифицированные пользователи, зашедшие на страницу входа, перенаправлены так, как будто они только что успешно вошли в систему. По умолчанию имеет значение
False.
success_url_allowed_hosts¶setхостов, в дополнение кrequest.get_host(), которые безопасны для перенаправления после входа в систему. По умолчанию используется пустойset.
get_default_redirect_url()¶Возвращает URL для перенаправления после входа в систему. Реализация по умолчанию разрешает и возвращает
next_page, если установлен, илиLOGIN_REDIRECT_URLв противном случае.
Вот что делает
LoginView:Вы обязаны предоставить html для шаблона входа в систему, который по умолчанию называется
registration/login.html. Этому шаблону передаются четыре контекстные переменные шаблона:Если вы предпочитаете не вызывать шаблон
registration/login.html, вы можете передать параметрtemplate_nameчерез дополнительные аргументы методуas_viewв вашем URLconf. Например, эта строка URLconf будет использоватьmyapp/login.htmlвместо:Вы также можете указать имя поля
GET, которое содержит URL-адрес для перенаправления на него после входа в систему с помощьюredirect_field_name. По умолчанию поле называетсяnext.Вот пример шаблона
registration/login.html, который вы можете использовать в качестве отправной точки. Он предполагает, что у вас есть шаблонbase.html, определяющий блокcontent:Если вы настроили аутентификацию (см. Customizing Authentication), вы можете использовать пользовательскую форму аутентификации, установив атрибут
authentication_form. Эта форма должна принимать аргумент с ключевым словомrequestв своем методе__init__()и предоставлять методget_user(), который возвращает объект аутентифицированного пользователя (этот метод вызывается только после успешной проверки формы).
- class
LogoutView¶ Выход пользователя из системы.
Имя URL:
logoutАтрибуты:
next_page¶URL для перенаправления после выхода из системы. По умолчанию
LOGOUT_REDIRECT_URL.
template_name¶Полное имя шаблона для отображения после выхода пользователя из системы. По умолчанию имеет значение
registration/logged_out.html.
redirect_field_name¶Имя поля
GET, содержащего URL для перенаправления после выхода из системы. По умолчанию используется значение'next'. Переопределяет URLnext_page, если передан заданный параметрGET.
extra_context¶Словарь контекстных данных, которые будут добавлены к контекстным данным по умолчанию, переданным в шаблон.
success_url_allowed_hosts¶setхостов, в дополнение кrequest.get_host(), которые безопасны для перенаправления после выхода из системы. По умолчанию используется пустое значениеset.
Контекст шаблона:
logout_then_login(request, login_url=None)¶Выводит пользователя из системы, а затем перенаправляет на страницу входа в систему.
Имя URL: URL по умолчанию не предоставляется
Дополнительные аргументы:
- class
PasswordChangeView¶ Имя URL:
password_changeПозволяет пользователю изменить свой пароль.
Атрибуты:
success_url¶URL для перенаправления после успешной смены пароля. По умолчанию
'password_change_done'.
form_class¶Пользовательская форма «Смена пароля», которая должна принимать аргумент в виде ключевого слова
user. Форма отвечает за фактическое изменение пароля пользователя. По умолчанию используетсяPasswordChangeForm.
extra_context¶Словарь контекстных данных, которые будут добавлены к контекстным данным по умолчанию, переданным в шаблон.
Контекст шаблона:
- class
PasswordChangeDoneView¶ Имя URL:
password_change_doneСтраница, отображаемая после того, как пользователь изменил свой пароль.
Атрибуты:
template_name¶Полное имя шаблона для использования. По умолчанию
registration/password_change_done.html, если не указано.
extra_context¶Словарь контекстных данных, которые будут добавлены к контекстным данным по умолчанию, переданным в шаблон.
- class
PasswordResetView¶ Имя URL:
password_resetПозволяет пользователю сбросить пароль путем генерации ссылки одноразового использования, которая может быть использована для сброса пароля, и отправки этой ссылки на зарегистрированный адрес электронной почты пользователя.
Если указанный адрес электронной почты не существует в системе, это представление не отправит письмо, но пользователь также не получит никакого сообщения об ошибке. Это предотвращает утечку информации к потенциальным злоумышленникам. Если вы хотите предоставить сообщение об ошибке в этом случае, вы можете подклассифицировать
PasswordResetFormи использовать атрибутform_class.Пользователям, отмеченным непригодным паролем (см.
set_unusable_password()), не разрешается запрашивать сброс пароля, чтобы предотвратить злоупотребления при использовании внешнего источника аутентификации, например LDAP. Обратите внимание, что они не получат никакого сообщения об ошибке, поскольку это раскрыло бы существование их учетной записи, но и почта не будет отправлена.Атрибуты:
template_name¶Полное имя шаблона, который будет использоваться для отображения формы сброса пароля. По умолчанию имеет значение
registration/password_reset_form.html, если не указано.
form_class¶Форма, которая будет использоваться для получения email пользователя для сброса пароля. По умолчанию имеет значение
PasswordResetForm.
email_template_name¶Полное имя шаблона, который будет использоваться для создания письма со ссылкой на сброс пароля. По умолчанию имеет значение
registration/password_reset_email.html, если не указано.
subject_template_name¶Полное имя шаблона, который будет использоваться для темы письма со ссылкой на сброс пароля. По умолчанию имеет значение
registration/password_reset_subject.txt, если не указано.
token_generator¶Экземпляр класса для проверки одноразовой ссылки. По умолчанию это будет
default_token_generator, это экземплярdjango.contrib.auth.tokens.PasswordResetTokenGenerator.
success_url¶URL для перенаправления после успешного запроса на сброс пароля. По умолчанию
'password_reset_done'.
from_email¶Действительный адрес электронной почты. По умолчанию Django использует
DEFAULT_FROM_EMAIL.
extra_context¶Словарь контекстных данных, которые будут добавлены к контекстным данным по умолчанию, переданным в шаблон.
html_email_template_name¶Полное имя шаблона, используемого для генерации многокомпонентного письма text/html со ссылкой для сброса пароля. По умолчанию письмо в формате HTML не отправляется.
extra_email_context¶Словарь контекстных данных, которые будут доступны в шаблоне письма. Его можно использовать для переопределения значений контекста шаблона по умолчанию, перечисленных ниже, например
domain.
Контекст шаблона:
Контекст шаблона электронной почты:
Образец
registration/password_reset_email.html(шаблон тела письма):Тот же контекст шаблона используется для шаблона темы. Тема должна быть однострочной строкой обычного текста.
- class
PasswordResetDoneView¶ Имя URL:
password_reset_doneСтраница, отображаемая после того, как пользователь получил по электронной почте ссылку для сброса пароля. Это представление вызывается по умолчанию, если для
PasswordResetViewне задан явный URLsuccess_url.Атрибуты:
template_name¶Полное имя шаблона для использования. По умолчанию
registration/password_reset_done.html, если не указано.
extra_context¶Словарь контекстных данных, которые будут добавлены к контекстным данным по умолчанию, переданным в шаблон.
- class
PasswordResetConfirmView¶ Имя URL:
password_reset_confirmПредставляет форму для ввода нового пароля.
Ключевые аргументы из URL:.
Атрибуты:
template_name¶Полное имя шаблона для отображения представления подтверждения пароля. Значение по умолчанию —
registration/password_reset_confirm.html.
token_generator¶Экземпляр класса для проверки пароля. По умолчанию это будет
default_token_generator, это экземплярdjango.contrib.auth.tokens.PasswordResetTokenGenerator.
post_reset_login¶Булево значение, указывающее, следует ли автоматически аутентифицировать пользователя после успешного сброса пароля. По умолчанию имеет значение
False.
post_reset_login_backend¶Пунктирный путь к бэкенду аутентификации, который будет использоваться при аутентификации пользователя, если
post_reset_loginявляетсяTrue. Требуется, только если у вас настроено несколькоAUTHENTICATION_BACKENDS. По умолчанию используетсяNone.
form_class¶Форма, которая будет использоваться для установки пароля. По умолчанию имеет значение
SetPasswordForm.
success_url¶URL для перенаправления после сброса пароля. По умолчанию
'password_reset_complete'.
extra_context¶Словарь контекстных данных, которые будут добавлены к контекстным данным по умолчанию, переданным в шаблон.
reset_url_token¶Параметр токена, отображаемый как компонент URL-адресов сброса пароля. По умолчанию имеет значение
'set-password'.
Контекст шаблона:
- class
PasswordResetCompleteView¶ Имя URL:
password_reset_completeПредставляет представление, которое информирует пользователя о том, что пароль был успешно изменен.
Атрибуты:
template_name¶Полное имя шаблона для отображения представления. По умолчанию имеет значение
registration/password_reset_complete.html.
extra_context¶Словарь контекстных данных, которые будут добавлены к контекстным данным по умолчанию, переданным в шаблон.
Разрешения и авторизация¶
Django поставляется со встроенной системой разрешений. Она предоставляет возможность назначать разрешения определенным пользователям и группам пользователей.
Он используется администратором сайта Django, но вы можете использовать его в своем собственном коде.
Административный сайт Django использует разрешения следующим образом:
- Доступ к объектам просмотра ограничен пользователями, имеющими разрешение «просмотр» или «изменение» для данного типа объекта.
- Доступ к просмотру формы «Добавить» и добавлению объекта ограничен пользователями с правом «Добавить» для данного типа объекта.
- Доступ к просмотру списка изменений, форме «изменения» и изменению объекта ограничен пользователями с правом «изменения» для данного типа объекта.
- Доступ к удалению объекта ограничен пользователями, имеющими разрешение «удалить» для данного типа объекта.
Разрешения по умолчанию¶
Когда django.contrib.auth указано в настройках INSTALLED_APPS, это гарантирует, что четыре разрешения по умолчанию — добавление, изменение, удаление и просмотр — будут созданы для каждой модели Django, определенной в одном из ваших установленных приложений.
Эти разрешения будут созданы при запуске manage.pymigrate; при первом запуске migrate после добавления django.contrib.auth к INSTALLED_APPS разрешения по умолчанию будут созданы для всех ранее установленных моделей, а также для любых новых моделей, устанавливаемых в это время.
После этого он будет создавать разрешения по умолчанию для новых моделей каждый раз, когда вы запускаете manage.pymigrate (функция, создающая разрешения, связана с сигналом post_migrate).
Предположим, что у вас есть приложение с app_labelfoo и моделью с именем Bar, для проверки основных разрешений вы должны использовать:
К модели Permission редко обращаются напрямую.
Создание пользователей¶
Вы должны увидеть ссылку на «Пользователи» в разделе «Auth» на главной странице индекса администратора. Страница администратора «Добавить пользователя» отличается от стандартных страниц администратора тем, что она требует выбора имени пользователя и пароля, прежде чем вы сможете редактировать остальные поля пользователя.
Страница шаблона login.html#
Первым делом мы создадим файл шаблона страницы входа. Назовём эту страницу — login.html.
На этой странице будет располагаться заголовок, который сообщает о том, что это страница входа в систему, а также форма
входа, состоящая из двух полей: имя пользователя и пароль.
Обратим внимание на следующий код:
Файл forms.py#
Далее мы перейдем к нашему файлу forms.py, который содержит нашу форму.
В файле шаблона мы указали переменную формы, но не создали её. Исправим это создав форму Loginform следующим образом:
Файл views.py#
Напоследок обратимся к нашему файлу views.py, содержимое которого показано ниже:
Заключение
Скопировав и склеив всё это, можно получить минимальную систему «чтобы работало» с большим потенциалом для улучшения. Например, можно реализовать страницы восстановления и изменения пароля аналогичным образом на основе форм PasswordResetForm и PasswordChangeForm из django.contrib.auth.forms.
Вход в личный кабинет