锋哥原创的Python Web开发 Django5视频教程:
2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计57条视频,包括:2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、第3讲 Django5创建项目(用命令方式)等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV14Z421z78C/用户登录功能,后端验证主要通过auth模块提供的authenticate校验方法,以及login登录方法实现。
首先urls.py里加下映射:
# 跳转登录页面
path('auth/toLogin', helloWorld.views.to_login),
# 提交登录请求
path('auth/login', helloWorld.views.login),
登录页面login.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="/auth/login" method="post">
{% csrf_token %}
<table>
<tr>
<th>用户登录</th>
</tr>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" value="{{ username }}"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" value="{{ password }}"></td>
</tr>
<tr>
<td>
<input type="submit" value="提交">
</td>
<td>
<font color="red">{{ errorInfo }}</font>
</td>
</tr>
</table>
</form>
</body>
</html>
网站首页index.html,登录成功后跳转:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>网站首页</title>
</head>
<body>
网站首页,欢迎: {{ request.user }}
</body>
</html>
views.py里实现to_login和login方法。
通过auth.authenticate校验用户是否已经存在。校验用户成功后,返回的是一个封装好的用户对象;校验错误则返回None
用户对象is_active方法判断用户是否激活。
通过调用auth.login,用户登录成功之后,返回给客户端登录的凭证或者说是令牌、随机字符串,则不需要我们去操作diango_session表,会自动创建session
当执行完auth.authenticate
和auth.login
后,也就是登录成功后,我们就可以通过request.user
直接获取到当前登录的用户对象数据
-
登录成功的情况下,该方法获得的是登录用户对象
-
登录不成功的情况下,该方法获得的是匿名对象
AnonymousUser
def to_login(request):
"""
跳转登录页面
:param request:
:return:
"""
return render(request, 'auth/login.html')
def login(request):
"""
登录处理
:param request:
:return:
"""
username = request.POST.get('username')
password = request.POST.get('password')
# 通过auth模块来检验加密后的密码 ,校验成功返回用户对象,否则返回None
resUser: User = auth.authenticate(request, username=username, password=password)
if resUser and resUser.is_active:
print(resUser, type(resUser))
# 用户登录成功之后(返回给客户端登录的凭证或者说是令牌、随机字符串)
auth.login(request, resUser)
return render(request, 'auth/index.html')
else:
return render(request, 'auth/login.html',
context={"errorInfo": "用户名或者密码错误", "username": username, "password": password})
我们来测试下:浏览器输入: http://127.0.0.1:8000/auth/toLogin
进入登录页面:
用户名密码输入错误,提示报错信息:
用户名密码输入正确,则跳转到主页: