Компонент аутентификации пользователей 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.

Пример

def login(request):
    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

Пример

def login(request):
    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

Пример

def logout(request):
    ppp = auth.logout(request)
    print(ppp) # None
    return redirect("/login/")

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

Перед использованием необходимо импортировать:

from django.contrib.auth.decorators import login_required

Пример

from django.contrib.auth.decorators import login_required @login_required
def index(request):
  return HttpResponse("index page...")

Укажите, с какой страницы пользователь пришёл, чтобы после успешного входа пользователь вернулся на эту страницу.

Анализ:

Когда пользователь посещает страницу, если пользователь не вошёл в систему, Django возвращает пользователю страницу входа.

На этом этапе URL страницы входа имеет после себя параметр: next=URL страницы, которую посетил пользователь.

Поэтому укажите URL для перенаправления после успешного входа в качестве значения параметра next.

Однако если пользователь сразу входит на страницу входа (logi) напрямую, request.GET.get("next") не получит значение, поэтому добавьте после "or", чтобы задать собственную страницу возврата.

Пример

# Если вы входите напрямую в login, get() не получит значение; path можно настроить для задания возвращаемой страницы.
path = request.GET.get("next") or "/index/"
return redirect(path)

Другие расширения