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
    该花的钱要花,该吃的饭要吃。
  • 相关阅读:
    Fedora 18 Beta 天高地厚
    Action script 天高地厚
    DLL动态连接库 天高地厚
    VC下Debug和Release区别
    如何解决"应用程序无法启动,因为应用程序的并行配置不正确"问题
    GetWindowLong (hwnd, 0)
    windows文件关联、打开方式列表之修改注册表攻略
    小游戏开发流程
    常用CHM帮助文档集锦下载
    关于jsp页面传递中文参数乱码的解决
  • 原文地址:https://www.cnblogs.com/chao666/p/12187486.html
Copyright © 2011-2022 走看看