讲一下登录时的代码:
当勾选了 记住登录
当没勾选记住登录
分析authenticate原理
注意箭头的顺序,自己想
直接演示代码的操作
首先我们创建一个新的文件:
代码的MobilePasswordBackend继承了BaseBackend,并且重写了authenticate这个方法,但是username是一个已经写好的变量,获取的手机号也是从username这个变量获取。获取之后开始验证是不是符合手机号的格式,符合的话,就通过手机号查询 mysql 数据库中的 user 表获取 User 实例,然后调用 user.check_password(password):
判断密码是否正确,正确就返回user
import re
from django.contrib.auth.backends import BaseBackend, UserModel
class MobilePasswordBackend(BaseBackend):
def authenticate(self, request, **kwargs):
mobile = kwargs.get("username")
password = kwargs.get("password")
# 检查 username 是否是手机号
if not re.match(r"^1[3-9]\d{9}$", mobile):
return
try:
# 通过手机号查询 mysql 数据库中的 user 表获取 User 实例
user = UserModel.objects.get(mobile=mobile)
except UserModel.DoesNotExist:
return
if user.check_password(password):
return user
然后还要配置用户认证,在登录的时候,用户可能使用用户名登录,也有可能使用手机号登录。
如何在商品首页页面 显示出登录的用户名
把用户名写入cookie
页面上就会显示啦
值得说明的是:设置session的期限,request.session.set_expiry(None)
表示为设置两周
在设置username的期限的时候response.set_cookie("username", request.user.username, expires=None)
,设置为None 就表示不设置期限,直接关闭浏览器会话就结束
所以正确的写法是这样的