django用户认证系统
428字约1分钟
2024-09-29
内置用户认证系统
Django内置一个用户认证系统,使用auth模块实现。 auth模块提供了登录、注册、效验、修改密码、注销、验证用户是否登录等功能。
Django默认创建的数据库表:
auth_user :用户表
auth_user_groups :用户所属组的表
auth_user_user_permissions :用户权限表
auth_group :用户组表
auth_group_permissions :用户组权限表
auth_permission :存放全部权限的表,其他的表的权限都是从此表中外键连接过去的
django_session :保存HTTP状态
django_migrations :数据库迁移记录
auth模块使用
auth模块:login()
示例:登录认证
from django.contrib import auth
def login(request):
if reqeust.method == 'GET':
return render(request, 'login.html')
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 1. 对用户数据验证
user = auth.authenticate(username=username, password=password)
# 如果效验成功,返回一个用户对象,否则返回一个None
if user:
# 2. 验证通过后,将request与用户对象(包含session)传给login()函数
auth.login(request, user)
# 3. 跳转到首页
return redirect("/")
else:
msg = "用户名或密码错误!"
return render(request, 'login.html',{'msg': msg})
登录表单:
<form method="post">
用户名: <input type="text" name="username"><br>
密码: <input type="text" name="password"><br>
<button type="submit">登录</button>
<span style="color: red">{{ msg }}</span>
</form>
auth模块:logout()
示例:退出登录
from django.contrib.auth import login,logout
def logout(request):
# 清除当前用户的session信息
auth.logout(request)
return redirect('/login')
auth模块:login_required装饰器
login_required装饰器:判断用户是否登录,如果没有登录引导至登录页面,登录 成功后跳转到目的页面。
示例:
from django.contrib.auth.decorators import login_required
@login_required()
def index(request):
return render(request, 'index.html')
在settings.py文件设置没有登录默认跳转页面:
LOGIN_URL = '/login/'