Django的用户认证系统是一个强大的内置应用,用于处理用户登录、注册、权限控制等认证相关功能。
Django用户认证组件基础
导入认证模块:
from django.contrib import auth from django.contrib.auth.models import User
创建用户:
User.objects.create()
:创建一个普通用户,密码为明文。User.objects.create_user()
:创建一个普通用户,密码为密文。User.objects.create_superuser()
:创建一个超级用户,密码为密文,需要提供邮箱。
参数:
username
:用户名。password
:密码。email
:邮箱(仅在创建超级用户时需要)。
用户认证
authenticate() 方法:验证用户的用户名和密码。
- 参数:
username
和password
。 - 返回值:如果验证成功,返回用户对象;否则返回
None
。
- 参数:
实例:
def login(request): # ...省略其他代码... user_obj = auth.authenticate(username=username, password=password) if user_obj is not None: # 用户验证成功 auth.login(request, user_obj) # 登录用户 else: # 用户验证失败
用户登录和登出
login() 方法:给验证成功的用户加上 session,将
request.user
赋值为用户对象。- 参数:
request
,用户对象。
- 参数:
logout() 方法:注销用户,清空 session 信息,将
request.user
赋值为匿名用户。- 参数:
request
,用户对象。
- 参数:
实例:
def login(request): # ...省略其他代码... if user_obj: auth.login(request, user_obj) # 重定向到用户尝试访问的页面或默认页面 path = request.GET.get("next") or "/index/" return redirect(path) else: return redirect("/login/")
def logout(request): auth.logout(request) return redirect("/login/")
装饰器使用
login_required:装饰器,用于保护需要登录后才能访问的视图。
- 使用前导入:
from django.contrib.auth.decorators import login_required
- 使用前导入:
实例:
@login_required def index(request): return HttpResponse("index页面。。。")
重定向未登录用户
Django在用户访问页面时,如果用户未登录,会自动重定向到登录页面,并携带next
参数,该参数为用户原本尝试访问的页面URL。登录成功后,可以重定向回next
参数指定的页面。