码迷,mamicode.com
首页 > 其他好文 > 详细

美多商城项目之用户登录页面后端实现

时间:2020-01-13 22:14:22      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:mysql   dex   none   div   exp   登录界面   传参   password   传递   

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

技术图片

 

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

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

美多商城项目之用户登录页面后端实现

标签:mysql   dex   none   div   exp   登录界面   传参   password   传递   

原文地址:https://www.cnblogs.com/chao666/p/12187486.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!