zoukankan      html  css  js  c++  java
  • 美多商城项目之用户登录页面后端实现

    首先,我们需要进行业务逻辑分析。

     通过上图,我们可以知道,用户登录界面的后端流程,如下:

    1. 接收前端传递的参数

    2. 校验参数

    3. 核心逻辑

    4. 返回响应结果

    其核心逻辑主要为:

    判断前端传递的手机号或用户名是否存在MySQL数据库中,

       1. 如果存在,则校验密码是否正确、

        1.1 如果密码正确,则设置状态保持。

        1.2 如果密码不正确,则响应用户名或密码错误

       2. 如果不存在,则响应账号不存在

    既然我们明确了核心的逻辑,那么接下来我们就用代码说话吧。

    class LoginView(View):
    
        def get(self, request):
            """提供用户登录页面"""
            return render(request, 'login.html')
    
        def post(self, request):
            """实现用户登录逻辑"""
            # 接收参数
            username = request.POST.get('username')
            password = request.POST.get('password')
            remembered = request.POST.get('remembered')
    
            # 校验参数
            # 判断参数是否齐全,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(request, username=username, password=password)
            if not user:
                return render(request, 'login.html', {'account_errmsg': '账号或密码错误'})
    
            # 状态保持
            login(request, user)
            # 根据用户是否记住登录来设置状态保持的生命周期
            if remembered != 'on':
                # 不记住登录:浏览器会话结束后状态保持销毁,设置session的有效期为0秒
                request.session.set_expiry(0)
            else:
                # 记住登录:状态保持为两周,如果传入None,默认两周
                request.session.set_expiry(None)
    
            # 登录成功后重定向到其他页面
            next = request.GET.get('next')
            if next:
                # 跳转到next对应的页面
                response = redirect(next)
            else:
                # # 跳转到首页
                response = redirect(reverse('contents:index'))
    
            # 登录成功之后,响应之前,用户名写入到cookie
            response.set_cookie('username', user.username, max_age=3600*24*7)
    
            # 响应结果
            return response
    该花的钱要花,该吃的饭要吃。
  • 相关阅读:
    使用PhantomJS报warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '解决方法
    案例:执行 JavaScript 语句
    案例:网站模拟登录
    爬虫中Selenium和PhantomJS
    爬虫中采集动态HTML介绍
    Oracle系列十五 控制用户权限
    Oracle系列十四 序列、索引和同义词
    Oracle系列十三 视图
    多线程爬虫案例
    CentOS7静默安装Oracle 18g数据库(无图形化界面)
  • 原文地址:https://www.cnblogs.com/chao666/p/12187486.html
Copyright © 2011-2022 走看看