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

首先,咱们须要进行业务逻辑分析。html

 

 经过上图,咱们能够知道,用户登陆界面的后端流程,以下:前端

1. 接收前端传递的参数数据库

2. 校验参数后端

3. 核心逻辑浏览器

4. 返回响应结果cookie

其核心逻辑主要为:session

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

   1. 若是存在,则校验密码是否正确、spa

    1.1 若是密码正确,则设置状态保持。code

    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
相关文章
相关标签/搜索