美多商城項目之用戶登陸頁面後端實現

首先,咱們須要進行業務邏輯分析。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
相關文章
相關標籤/搜索