登录逻辑

登录逻辑图解

在这里插入图片描述

用户登录逻辑流程
  1. 提取前端的数据
    ① 用户输入的用户名
    ② 用户输入的密码
    ③用户是否勾选记住密码
  2. 验证参数
    ① 判断参数是否全部都有
    ② 验证用户用户名和密码是否正确
  3. 保持登录状态
  4. 处理记住密码
    ① 如果勾选了记住密码就设置session有效期,看需求要记住多长时间
    ② 如果没有勾选就设置session有效期为0,关闭浏览器就会自动删除session
  5. 前端通过cookie获取用户名来显示在页面,把用户的用户名存入cookie
登录逻辑视图内代码

不要忘记注册路由

多用户登录(判断是用手机号登录还是用户名登录)

手机号登录

authenticate方法Django自带的验证用户名密码根据User.USERNAME_FIELD来对比用户名还是手机号登录
user = authenticate(username=用户名,password=密码)

设置cookie让前端页面获取用户名代入到模板

class LoginView(View):
    def post(self, request):
        user_dict = json.loads(request.body)
        username = user_dict.get('username')
        password = user_dict.get('password')
        remembered = user_dict.get('remembered')
        if not all([username, password, remembered]):
            return JsonResponse({'code': 400, 'errmsg': '缺少参数'})
        # 如果用户输入的是手机号把User.USERNAME_FIELD改为手机号验证
        if re.match('1[3-9]\d{9}', username):
            User.USERNAME_FIELD = 'mobile'
        else:
            User.USERNAME_FIELD = 'username'
        user = authenticate(username=username, password=password)
        if not user:
            return JsonResponse({'code': 400, 'errmsg': '用户名或密码错误'})

        login(request, user)

        if remembered:
            request.session.set_expiry(None)
        else:
            request.session.set_expiry(0)
        ret = JsonResponse({'code': 0, 'errmsg': 'ok'})
        ret.set_cookie('username', user.username, max_age=3600 * 24 * 5)
        return ret

测试
在这里插入图片描述

退出逻辑

退出逻辑流程
  1. logout(request)方法删除cookie中的sessionid来退出用户的登录状态
  2. 删除cookie中的用户名让前端页面改为注册登录
  3. 返回json成功与否
退出登录视图内代码

Django自带的logout方法 参数为request

Response对象的delete_cookie('key')方法根据key删除cookie

class LogoutView(View):
    def delete(self, request):
        logout(request)
        ret = JsonResponse({'code': 0, 'errmsg': 'ok'})
        ret.delete_cookie('username')

        return ret
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐