Django项目实践(商城):八、用户登录

本文详细介绍了Django项目中实现用户登录的完整流程,包括用户名登录逻辑、接口设计、路由定义以及前端交互。还探讨了多账号登录功能,通过自定义用户认证后端支持用户名和手机登录。同时,提出了三种首页用户名展示方案,并讨论了退出登录的方法。最后,讲解了如何判断用户是否登录,并给出了多种优化方案。
摘要由CSDN通过智能技术生成

在这里插入图片描述

(根据居然老师直播课内容整理)

一、用户名登录

1、用户名登录逻辑分析

在这里插入图片描述

  • 用户输入地址后,获取登录页面
  • 输入必要信息用后,点击登录,向后端发送登录请求
  • 后端接收请求,提取参数,然后校验参数,如果有误,向前端返回错误信息
  • 认证参数:验证用户名和密码是数据库信息比较
  • 如果正确,保持状态
    • 将登录信息保存到session中,即redis中
  • 向前端返回登录结果

2、用户名登录接口设计

2.1 请求方式

选项 方案
请求方法 POST
请求地址 /login/

2.2 请求参数:表单

参数名 类型 是否必传 说明
username string 用户名
password string 密码
remembered string 是否记住用户

2.3 响应结果:HTML

字段 说明
登录失败 响应错误提示
登录成功 重定向到首页

3、用户名登录接口定义

3.1 用户注册接口定义

class LoginView(View):
    """用户名登录"""
    def get(self, request):
        """
        提供登录界面
        :param request: 请求对象
        :return: 登录界面
        """
        return render(request, 'login.html')
         
    def post(self, request):
        """
        实现登录逻辑
        :param request: 请求对象
        :return: 登录结果
        """
        pass

3.2 定义校验处理类

  • 在./apps/users下定义forms.py,对需要校验的数据进行校验处理
  • 对数据进行简单校验:变量名(传递的参数名)=form.CharField(简单校验类型=标准值,错误信息字典)
    • 用户名、密码、是否记住登录进行校验
    • 无需其它校验,所以不用clean()方法
class LoginForm(forms.Form):
    username = forms.CharField(max_length=20, min_length=5, required=True, error_messages={
   "max_length": "用户名长度最长为20", "min_length": "用户名最少长度为5"})
    password = forms.CharField(max_length=20, min_length=8, required=True, error_messages={
   "max_length": "密码长度最长为20", "min_length": "密码最少长度为8"})
    remembered = forms.BooleanField(required=False)

3.3 用户登录接口开发

  • 接收并校验参数:实例化校验处理类
  • 判断校验结果
  • 如果校验无误:
    • 取出 用户名、密码、是否记住登录
    • 判断 必传参数是否传入all([参数1,参数2,…]),如果为否,返回缺少参数错误
  • 认证登录用户:
    • 一般作法:
      • 根据users模型从SQL数据库取出登录用户名的相关信息
      • 进行密码时加密并校验密码
      • 根据结果、判断、或出错,进行错误返回
    • Django提供了django.contrib.auth.authenticate()方法,
      • 根据登录用户名、密码,返回一个users对象,如果用户名或密码错误,返回None
      • 如果None,返回错误信息
  • 保持状态:利用django提供的方法: login(request, user)
  • 根据 是否记住登录 的值 设置 session 保存时间:request.session.set_expiry()
  • 返回到首页
class LoginView(View):
    """用户名登录"""

    def get(self, request<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值