一、用户认证系统
Django内置一个用户认证系统,使用auth模块实现。
auth模块提供了登录、注册、效验、修改密码、注销、验证用户是否登录等功能。
1.1.Django默认创建的数据库表
• auth_user :用户表
• auth_user_groups :用户所属组的表
• auth_user_user_permissions :用户权限表
• auth_group :用户组表
• auth_group_permissions :用户组权限表
• auth_permission :存放全部权限的表,其他的表的权限都是从此表中外键连接过去的
• django_session :保存HTTP状态
• django_migrations :数据库迁移记录
二、auth模块
登录Django后台管理系统,创建devops用户,用于后面的测试
2.1.login()
登录成功,跳转到首页
views.py:
from django.contrib import auth
def login(request):
if request.method == "GET":
return render(request, 'login.html')
elif request.method == "POST":
# 获取前端登录的用户名和密码
username = request.POST.get('username', None)
password = request.POST.get('password', None)
# 对用户身份验证
user = auth.authenticate(username=username, password=password) #验证通过返回用户对象,验证失败返回None
if user:
auth.login(request, user) # 将request与用户对象(包含session)传给login()函数
return redirect(index) # 重定向到函数名,这里是首页
else:
msg = "用户名或密码输入错误"
return render(request, 'login.html', {"msg": msg})
login.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<h1>欢迎访问管理系统</h1>
<form action="" method="post">
用户名: <input type="text", name="username"><br> <!--输入的用户名保存到username变量,传回后端-->
密码: <input type="text", name="password"><br>
<button type="submit">登录</button><br>
</form>
<span style="color: red">{{ msg }}</span>
</body>
</html>
2.2.logout()
views.py:
from django.contrib.auth import login,logout
def logout(request):
auth.logout(request) # 清除当前用户的session信息
return redirect(login)
2.3.login_required装饰器
login_required装饰器:判断用户是否登录,如果没有登录引导至登录页面,登录成功后跳转到目的页面。
views.py:
from django.contrib.auth.decorators import login_required
@login_required()
def index(request):
return render(request, 'index.html')
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1>欢迎访问首页</h1>
<a href="/myldp/logout/">退出</a>
</body>
</html>
在settings.py文件设置没有登录默认跳转页面:
LOGIN_URL = '/myldp/login/'