完整电商项目--(四)用户登录(1):基本业务逻辑

账号登录

多账号登录:
  • 支持使用注册时的 用户名,和 手机号进行登录
  • 这是目前最流行的方式我觉得,给用户的体验也是最好的。 信息化时代,任何网站都需要账号。 众多的用户名。。。我是记不住。 但是同一个特点是都支持手机号登录。
  • 我们可以输入手机号 和密码进行登录。
登录流程(同注册时讲的一样
  • 接收,验证,处理,响应
    • (1)处理当中的 保持登录状态 以及后续的退出登录,都已经讲过了。
    • (2)我们在登陆成功之后,肯定是跳转到首页的。 然后显示用户名的操作:
      • 方案一:模板中 request 变量直接渲染用户名 , 缺点:不方便做首页静态化
      • 方案二:发送ajax请求获取用户信息,缺点:需要发送网络请求
      • 方案三:Vue读取cookie渲染用户信息
    • 综合来讲我们使用 方案三。所以处理操作中,需要增加写入 用户信息,cookie的操作。
自定义认证后端
  • 我们打开官网,找到认证登录的模块
  • (1) 发现,认证用户存在。是通过一个authenticate( ) 方法。
    在这里插入图片描述
  • 方法描述已经十分清晰了。 我们知道这个函数并不能‘直接’认证用户, 而是 (1)默认接收 用户名(username)和密码(password),对着两个参数进行验证。(2 )并且 可以选择性的接收一个request参数(这个在某些情况下会使用到,因为request对象中包含了很多信息)
  • 我们就来看下默认的认证后端,如何设置的:
    在这里插入图片描述
  • 我们知道了,在 AUTHENTICATION_BACKENDS 配置项中,可以添加认证后端,默认的只有一个,就是我们的默认认证后端,并且会尝试所有的认证后端,在前面一个认证失败的情况下。 下面只需要编写我们自己的认证后端,去处理 多账户登录,在添加到这个即可。
编写多用户认证后端
class MeiduoModelBackend(ModelBackend):  # 继承django提供的认证系统
    def authenticate(self, request, username=None, password=None, **kwargs): 
		user = super().authenticate(request, username=username, password=password)
	     # print(user)
	     if user is not None:
	         return user
	     else:
	         # except:
	         # 如果未查到数据,则返回None,用于后续判断
	         try:
	             user = User.objects.get(mobile=username)
	         except:
	             return None
	         else:
	             # 判断密码
	             if user.check_password(password):
	                 return user
	             else:
	                 return None

这样,很简单的代码。我们就可以实现 手机号登录啦。

首页用户名展示
  • 登录成功跳转到首页,显示用户名等信息 在这里插入图片描述

  • 谁来写cookie?

  • 我们翻看文档,查看HttpResponse对象,是具有这个功能的
    在这里插入图片描述

  • 不仅如此,他的子类同样都拥有这些功能
    在这里插入图片描述
    包括 JsonResponse对象 也是 HttpResponse 的一个子类。

  • 那么上代码:

# 响应注册结果
# 重定向到首页,命名空间和 应用名就讲了
response = redirect(reverse('contents:index'))

# 注册时用户名写入到cookie,有效期15天
response.set_cookie('username', user.username, max_age=3600 * 24 * 15)  # 以秒为单位

return response

over!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值