Приложение для пользователей
Поскольку мы создаем собственное представление и URL-адрес для регистрации, нам нужно создать специальное приложение. Назовем его accounts:
python manage.py startapp accounts
Обязательно добавьте новое приложение в INSTALLED_APPS настройки в нашем django_project/settings.py файле:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog.apps.BlogConfig',
'taggit',
'django.contrib.sites',
'django.contrib.sitemaps',
'django.contrib.postgres',
'accounts.apps.AccountsConfig',
]
Затем добавьте URL-адрес уровня проекта для приложения accounts над включенным приложением Django auth.
Django будет искать шаблоны URL-адресов сверху вниз, поэтому, когда он увидит маршрут URL-адреса http://127.0.0.1:8000/accounts/, то он будет следовать сначало в наше accounts приложение, и только потом в auth:
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls', namespace='blog')),
path('sitemap.xml', sitemap, {'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap'),
path("accounts/", include("accounts.urls")),
path("accounts/", include("django.contrib.auth.urls")),
]
Создайте новый urls файл в нашем accounts приложении и добавьте следующий код:
from django.urls import path
from .views import SignUpView
urlpatterns = [
path("signup/", SignUpView.as_view(), name="signup"),
]
Теперь в views.py файл нашего приложения accounts добавим:
from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from django.views import generic
class SignUpView(generic.CreateView):
form_class = UserCreationForm
success_url = reverse_lazy("login")
template_name = "registration/signup.html"
Мы создаем подкласс общего представления CreateView на основе классов в нашем SignUp классе.
Мы указываем использование встроенного UserCreationForm и еще не созданного шаблона в signup.html.
И мы используем reverse_lazy для перенаправления пользователя на login-страницу при успешной регистрации.
Создайте новый шаблон templates/registration/signup.html и заполните его этим кодом, который выглядит почти точно так же, как мы использовали для login.html:
{% extends "blog/base.html" %}
{% block title %} Sign Up {% endblock %}
{% block content %}
<h2> Sign Up </h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<p><input type="submit" value="Sign Up"></p>
</form>
{% endblock %}
Чтобы убедиться, что все работает, запустите наш локальный сервер с помощью команды:
python manage.py runserver
И перейдите к http://127.0.0.1:8000/accounts/signup/:
Дополнительный текст с подсказками по именам пользователей и паролям исходит от Django. Мы также можем настроить это, но это требует немного больше работы и выходит за рамки этого урока.
Заполните необходимые поля и нажмите кнопку SIGN UP. Вы будете перенаправлены на страницу входа http://127.0.0.1:8000/accounts/login/, где вы сможете войти в свою новую учетную запись.
А затем, после успешного входа в систему, вы будете перенаправлены на домашнюю страницу с персонализированным приветствием:
Перейдя в админ панель, мы тоже видим нашего пользователя: