Componente de autenticación de usuarios de Django (Auth)

El componente de autenticación de usuarios de Django (Auth) se usa generalmente en el inicio de sesión y registro de usuarios, para determinar si el usuario actual es válido y redirigir a la página de éxito o fracaso del inicio de sesión.

El componente de autenticación de usuarios de Django (Auth) necesita importar el módulo auth:

# 认证模块
from django.contrib import auth

# 对应数据库
from django.contrib.auth.models import User

El valor de retorno es el objeto de usuario.

Tres métodos para crear objetos de usuario:

  • create(): Crea un usuario normal, la contraseña es texto plano.
  • create_user(): Crea un usuario normal, la contraseña es cifrada.
  • create_superuser(): Crea un superusuario, la contraseña es cifrada, y se debe pasar un parámetro adicional de correo electrónico email.

Parámetros:

  • username: nombre de usuario.
  • password: contraseña.
  • email: correo electrónico (el método create_superuser necesita agregar un 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]')

Para verificar el nombre de usuario y la contraseña del usuario se utiliza el método authenticate(), que filtra el objeto de usuario de la tabla auth_user.

Antes de usar, debe importarse:

from django.contrib import auth

Parámetros:

  • username: nombre de usuario
  • password: contraseña

Valor de retorno:Si la verificación es exitosa, devuelve el objeto de usuario; de lo contrario, devuelve None.

Ejemplo

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=password)
        print(user_obj.username)

Agrega session al usuario verificado correctamente, asignando request.user al objeto de usuario.

Iniciar sesión usa el método login().

Antes de usar, debe importarse:

from django.contrib import auth

Parámetros:

  • request: objeto de usuario

Valor de retorno: None

Ejemplo

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=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/")

Para cerrar la sesión del usuario se usa el método logout(), que necesita limpiar la información de session y asignar request.user a un usuario anónimo.

Antes de usar, debe importarse:

from django.contrib import auth

Parámetros:

  • request: objeto de usuario

Valor de retorno: None

Ejemplo

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

Configurar un decorador para aplicarlo de manera uniforme a las páginas que requieren haber iniciado sesión correctamente para poder acceder.

Antes de usar, debe importarse:

from django.contrib.auth.decorators import login_required

Ejemplo

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

Se configura desde qué página se accede, y después de iniciar sesión correctamente se regresa a esa página.

Análisis:

Cuando un usuario visita una página, si no ha iniciado sesión, django le devuelve la página de inicio de sesión.

En este momento, la URL de la página de inicio de sesión tiene el parámetro: next=URL de la página que el usuario visitaba.

Por lo tanto, se configura la URL de redirección después de que el usuario inicie sesión correctamente como el valor del parámetro next.

Pero, si el usuario ingresa directamente a la página de inicio de sesión login, request.GET.get("next") no obtendrá ningún valor, por lo que al agregar or después, se puede configurar una página de retorno personalizada.

Ejemplo

# Si se ingresa directamente login, get() no obtiene ningún valor; path puede configurar personalizadamente la página de retorno.
path = request.GET.get("next") or "/index/"
return redirect(path)

Otras extensiones