Django предоставляет встроенную систему аутентификации и авторизации, которая позволяет регистрировать и аутентифицировать пользователей в веб-приложении. Чтобы реализовать функцию регистрации пользователей в Django, вам потребуется выполнить несколько шагов.
Создание приложения Django для работы с пользователями
Создайте новое приложение Django для работы с пользователями. Вы можете назвать его "accounts". Для этого выполните следующую команду в терминале:
python manage.py startapp accounts
python manage.py startapp accounts
Создание модели пользователя
В файле models.py вашего приложения создайте модель пользователя, которая будет наследоваться от AbstractUser:
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
Создание формы для регистрации пользователя
В файле forms.py вашего приложения создайте форму UserCreationForm для регистрации новых пользователей:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import User
class SignUpForm(UserCreationForm):
email = forms.EmailField(max_length=254, help_text='Required. Enter a valid email address.')
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2', )
from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import User
class SignUpForm(UserCreationForm):
email = forms.EmailField(max_length=254, help_text='Required. Enter a valid email address.')
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2', )
Создание представления для регистрации пользователя
В файле views.py вашего приложения создайте представление signup для обработки запросов на регистрацию новых пользователей:
from django.shortcuts import render, redirect
from .forms import SignUpForm
def signup(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
form.save()
return redirect('home')
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})
from django.shortcuts import render, redirect
from .forms import SignUpForm
def signup(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
form.save()
return redirect('home')
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})
Создание шаблона для регистрации пользователя
Создайте шаблон signup.html для отображения формы регистрации:
{% extends 'base.html' %}
{% block content %}
<h2>Sign up</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Sign up</button>
</form>
{% endblock %}
{% extends 'base.html' %}
{% block content %}
<h2>Sign up</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Sign up</button>
</form>
{% endblock %}
Обновление файла маршрутов
Обновите файл urls.py вашего приложения, чтобы связать представление signup с URL-адресом signup/:
from django.urls import path
from . import views
urlpatterns = [
path('signup/', views.signup, name='signup'),
]
from django.urls import path
from . import views
urlpatterns = [
path('signup/', views.signup, name='signup'),
]
Обновление файла настроек проекта
Добавьте 'accounts' в список установленных приложений в файле settings.py вашего проекта:
INSTALLED_APPS = [
# ...
'accounts',
INSTALLED_APPS = [
# ...
'accounts',
Создание страницы успешной регистрации
Создайте шаблон registration_success.html для отображения страницы успешной регистрации:
{% extends 'base.html' %}
{% block content %}
<h2>Registration Successful</h2>
<p>You have successfully registered for our website. You can now log in using your username and password.</p>
{% endblock %}
{% extends 'base.html' %}
{% block content %}
<h2>Registration Successful</h2>
<p>You have successfully registered for our website. You can now log in using your username and password.</p>
{% endblock %}
Обновление представления для регистрации пользователя
В представлении signup добавьте код для отображения страницы успешной регистрации после успешной отправки формы:
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from .forms import SignUpForm
def signup(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
user = form.save()
user.refresh_from_db()
user.profile.email = form.cleaned_data.get('email')
user.save()
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=user.username, password=raw_password)
login(request, user)
return redirect('registration_success')
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from .forms import SignUpForm
def signup(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
user = form.save()
user.refresh_from_db()
user.profile.email = form.cleaned_data.get('email')
user.save()
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=user.username, password=raw_password)
login(request, user)
return redirect('registration_success')
else:
form = SignUpForm()
return render(request, 'signup.html', {'form': form})
Обновление файла маршрутов
Добавьте URL-адрес registration_success/ и связанное с ним представление в файл urls.py вашего приложения:
from django.urls import path
from . import views
urlpatterns = [
path('signup/', views.signup, name='signup'),
path('registration_success/', views.registration_success, name='registration_success'),
]
from django.urls import path
from . import views
urlpatterns = [
path('signup/', views.signup, name='signup'),
path('registration_success/', views.registration_success, name='registration_success'),
]
Тестирование
Запустите сервер Django и перейдите на страницу http://localhost:8000/signup/. Вы должны увидеть форму регистрации пользователя. Заполните форму и отправьте ее. Если все прошло успешно, вы должны быть перенаправлены на страницу успешной регистрации http://localhost:8000/registration_success/.
Вот и все. Теперь вы знаете, как реализовать функцию регистрации пользователей в Django.
Вот и все. Теперь вы знаете, как реализовать функцию регистрации пользователей в Django.