阿语python4-2 美多商城v5.0用户登录-账号登录之第4.1.1节 用户名登录

news/2024/5/18 14:12:18 标签: jwt, web, session, java, cookie

1. 用户名登录逻辑分析

2. 用户名登录接口设计

1.请求方式

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

2.请求参数:表单

参数名类型是否必传说明
usernamestring用户名
passwordstring密码
rememberedstring是否记住用户

3.响应结果:HTML

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

3. 用户名登录接口定义

class LoginView(View):
    """用户名登录"""

    def get(self, request):
        """
        提供登录界面
        :param request: 请求对象
        :return: 登录界面
        """
        pass

    def post(self, request):
        """
        实现登录逻辑
        :param request: 请求对象
        :return: 登录结果
        """
        pass

4. 用户名登录后端逻辑

class LoginView(View):
    """用户名登录"""

    def get(self, request):
        """
        提供登录界面
        :param request: 请求对象
        :return: 登录界面
        """
        return render(request, 'login.html')

    def post(self, request):
        """
        实现登录逻辑
        :param request: 请求对象
        :return: 登录结果
        """
        # 接受参数
        username = request.POST.get('username')
        password = request.POST.get('password')
        remembered = request.POST.get('remembered')

        # 校验参数
        # 判断参数是否齐全
        if not all([username, password]):
            return http.HttpResponseForbidden('缺少必传参数')

        # 判断用户名是否是5-20个字符
        if not re.match(r'^[a-zA-Z0-9_-]{5,20}$', username):
            return http.HttpResponseForbidden('请输入正确的用户名或手机号')

        # 判断密码是否是8-20个数字
        if not re.match(r'^[0-9A-Za-z]{8,20}$', password):
            return http.HttpResponseForbidden('密码最少8位,最长20位')

        # 认证登录用户
        user = authenticate(username=username, password=password)
        if user is None:
            return render(request, 'login.html', {'account_errmsg': '用户名或密码错误'})

        # 实现状态保持
        login(request, user)
        # 设置状态保持的周期
        if remembered != 'on':
            # 没有记住用户:浏览器会话结束就过期
            request.session.set_expiry(0)
        else:
            # 记住用户:None表示两周后过期
            request.session.set_expiry(None)

        # 响应登录结果
        return redirect(reverse('contents:index'))

5. 知识要点

  1. 登录的核心思想:认证和状态保持

  • 通过用户的认证,确定该登录用户是美多商场的注册用户。

  • 通过状态保持缓存用户的唯一标识信息,用于后续是否登录的判断。


http://www.niftyadmin.cn/n/739774.html

相关文章

阿语python4-2 美多商城v5.0验证码-异步方案RabbitMQ和Celery之第3.3.3节 Celery介绍和使用...

Celery介绍和使用思考:消费者取到消息之后,要消费掉(执行任务),需要我们去实现。任务可能出现高并发的情况,需要补充多任务的方式执行。耗时任务很多种,每种耗时任务编写的生产者和消费者代码有…

阿语python4-2 美多商城v5.0验证码-异步方案RabbitMQ和Celery之第3.3.1节 生产者消费者设计模式...

从今天开始阿语将更新美多商场实战笔记,也就说从今天开始,下面的全部都是实战,喜欢的可以关注一下,一起学习python,有的笔记比较短就一篇文章发了2节笔记,一定要认真看生产者消费者设计模式思考&#xff1a…

阿语python4-2 美多商城v5.0用户登录-账号登录之第4.1.2节 多账号登录

多账号登录Django自带的用户认证后端默认是使用用户名实现用户认证的。用户认证后端位置:django.contrib.auth.backends.ModelBackend。如果想实现用户名和手机号都可以认证用户,就需要自定义用户认证后端。自定义用户认证后端步骤在users应用中新建util…

阿语python4-2 美多商城v5.0用户中心-用户基本信息之第5.1.1节用户基本信息逻辑分析...

用户基本信息逻辑分析1. 用户基本信息逻辑分析以下是要实现的后端逻辑用户模型补充email_active字段查询并渲染用户基本信息添加邮箱发送邮箱验证邮件验证邮箱提示:用户添加邮箱时,界面的局部刷新,我们选择使用Vue.js来实现。

阿语python4-2 美多商城v5.0用户登录-QQ登录之第4.2.4节OAuth2.0认证获取openid

OAuth2.0认证获取openid待处理业务逻辑# 提取code请求参数 # 使用code向QQ服务器请求access_token # 使用access_token向QQ服务器请求openid # 使用openid查询该QQ用户是否在美多商城中绑定过用户 # 如果openid已绑定美多商城用户,直接生成JWT token,并返…

阿语python4-2 美多商城v5.0用户中心-用户基本信息之第5.1.2节查询并渲染用户基本信息...

查询并渲染用户基本信息1. 用户模型补充email_active字段由于在渲染用户基本信息时,需要渲染用户邮箱验证的状态,所以需要给用户模型补充email_active字段补充完字段后,需要进行迁移。 $ python manage.py makemigrations$ python manage.py…

阿语python4-2 美多商城v5.0用户登录-QQ登录之第4.2.5节openid是否绑定用户的处理

1. 判断openid是否绑定过用户使用openid查询该QQ用户是否在美多商城中绑定过用户。try:oauth_user OAuthQQUser.objects.get(openidopenid) except OAuthQQUser.DoesNotExist:# 如果openid没绑定美多商城用户pass else:# 如果openid已绑定美多商城用户pass2. openid已绑定用户…

阿语python4-2 美多商城v5.0用户登录-QQ登录之第4.2.6节openid绑定用户实现

openid绑定用户实现类似于用户注册的业务逻辑当用户输入的手机号对应的用户已存在直接将该已存在用户跟openid绑定当用户输入的手机号对应的用户不存在新建一个用户,并跟openid绑定class QQAuthUserView(View):"""用户扫码登录的回调处理""…