Компонент аутентификации пользователей Django (Auth)
Компонент аутентификации пользователей Django (Auth) обычно используется для входа и регистрации пользователей, чтобы определить, действителен ли текущий пользователь, и перенаправить на страницу успешного или неудачного входа.
Компонент аутентификации пользователей Django (Auth) требует импорта модуля auth:
# 认证模块 from django.contrib import auth # 对应数据库 from django.contrib.auth.models import User
Возвращаемое значение — объект пользователя.
Три метода создания объекта пользователя:
- create(): Создать обычного пользователя, пароль в открытом виде.
- create_user(): Создать обычного пользователя, пароль в зашифрованном виде.
- create_superuser(): Создать суперпользователя, пароль в зашифрованном виде, и необходимо передать дополнительный параметр email.
Параметры:
- username: имя пользователя.
- password: пароль.
- email: Электронная почта (метод create_superuser требует дополнительный параметр email).
from django.contrib.auth.models import User User.objects.create(username='runboo',password='123')

from django.contrib.auth.models import User User.objects.create_user(username='runbooo',password='123')

from django.contrib.auth.models import User User.objects.create_superuser(username='runboooo',password='123',email='[email protected]')

Используйте метод authenticate() для проверки имени пользователя и пароля, фильтруя объект пользователя из таблицы auth_user.
Перед использованием необходимо импортировать:
from django.contrib import auth
Параметры:
- username: имя пользователя
- password: пароль
Возвращаемое значение:Если проверка успешна, возвращается объект пользователя; в противном случае возвращается None.
Пример
if request.method == "GET":
return render(request, "login.html")
username = request.POST.get("username")
password = request.POST.get("pwd")
valid_num = request.POST.get("valid_num")
keep_str = request.session.get("keep_str")
if keep_str.upper() == valid_num.upper():
user_obj = auth.authenticate(username=username, password=пароль)
print(user_obj.username)

Добавьте сессию для успешно проверенного пользователя и присвойте request.user объекту пользователя.
Используйте метод login() для входа.Перед использованием необходимо импортировать:
from django.contrib import auth
Параметры:
- request: объект пользователя
Возвращаемое значение: None
Пример
if request.method == "GET":
return render(request, "login.html")
username = request.POST.get("username")
password = request.POST.get("pwd")
valid_num = request.POST.get("valid_num")
keep_str = request.session.get("keep_str")
if keep_str.upper() == valid_num.upper():
user_obj = auth.authenticate(username=username, password=пароль)
print(user_obj.username)
if not user_obj:
return redirect("/login/")
else:
auth.login(request, user_obj)
path = request.GET.get("next") or "/index/"
print(path)
return redirect(path)
else:
return redirect("/login/")

Чтобы выйти пользователю из системы, используйте метод logout(), который должен очистить информацию о сеансе и установить request.user как анонимного пользователя.
Перед использованием необходимо импортировать:
from django.contrib import auth
Параметры:
- request: объект пользователя
Возвращаемое значение: None
Пример
ppp = auth.logout(request)
print(ppp) # None
return redirect("/login/")
Настройте декоратор и единообразно применяйте его к страницам, доступ к которым возможен только после успешного входа.
Перед использованием необходимо импортировать:
from django.contrib.auth.decorators import login_required
Пример
def index(request):
return HttpResponse("index page...")
Укажите, с какой страницы пользователь пришёл, чтобы после успешного входа пользователь вернулся на эту страницу.
Анализ:
Когда пользователь посещает страницу, если пользователь не вошёл в систему, Django возвращает пользователю страницу входа.
На этом этапе URL страницы входа имеет после себя параметр: next=URL страницы, которую посетил пользователь.
Поэтому укажите URL для перенаправления после успешного входа в качестве значения параметра next.
Однако если пользователь сразу входит на страницу входа (logi) напрямую, request.GET.get("next") не получит значение, поэтому добавьте после "or", чтобы задать собственную страницу возврата.
Пример
path = request.GET.get("next") or "/index/"
return redirect(path)
