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
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
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
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
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
path = request.GET.get("next") or "/index/"
return redirect(path)
