1. 程式人生 > >用戶登陸

用戶登陸

表示 有效期 self cnblogs 頁面 登錄 obj auth light

在ueser應用中的urls中定義登陸的url

url(r‘^login$‘, views.LoginView.as_view(), name="login"),

在視圖函數views中定義處理的請求函數:

class LoginView(View):
    """登錄"""
    def get(self, request):
        """提供登錄頁面"""
        return render(request, "login.html")

    def post(self, request):
        """處理登錄的數據"""
        # 獲取參數
        user_name = request.POST.get("username")
        password = request.POST.get("pwd")
        remembered = request.POST.get("remembered")  # 記住用戶名的參數

        # 參數校驗
        if not all([user_name, password]):
            # 參數不完整
            return render(request, "login.html")

        # 登錄業務邏輯處理
        # try:
        #     password = sha256(password)
        #     User.objects.get(username=user_name, password=password)
        # except User.DoesNotExist:
        #     return HttpResponse("用戶名或密碼錯誤")

        # 使用django的認證系統進行用戶密碼的校驗
        user = authenticate(username=user_name, password=password)
        if user is None:
            # 用戶的登錄信息有誤
            return render(request, "login.html", {"errmsg": "用戶名或密碼錯誤!"})

        # 判斷用戶的激活狀態
        if user.is_active is False:
            return render(request, "login.html", {"errmsg": "用戶尚未激活!"})

        # 保存用戶的登錄狀態
        # 使用django的login函數保存用戶的session數據
        login(request, user)
        # 根據用戶勾選的記住用戶名選項,設置session數據的有效期(django幫助我們完成cookie有效期的設置)
        if remembered != "on":
            # 表示用戶沒有勾選
            request.session.set_expiry(0)  # 設置為臨時會話
        else:
            # 表示用戶勾選
            request.session.set_expiry(None)  # 采用django的默認設置有效期

        # 登錄成功,
        # 判斷頁面url中是否有next參數,
        next = request.GET.get("next")
        # 如果有,則跳轉到next的url
        if next:
            return redirect(next)
        else:
            # 如果沒有,跳轉到主頁
            return redirect(reverse("goods:index"))

  這裏我存的session為臨時回話,如下圖:

技術分享

退出登陸

使用django的認證系統提供的logout函數,清除session數據

在users中的urls中定義退出的請求路徑
url(r‘^logout$‘, views.LogoutView.as_view(), name="logout"),

  在users中的views中定義退出的請求處理函數

from django.contrib.auth import authenticate, login, logout

class LogoutView(View):
    """退出"""
    def get(self, request):
        # 使用django的認證系統提供的logout函數,清除session數據
        logout(request)
        # 跳轉到主頁
        return redirect(reverse("goods:index"))

  在應用模塊中的users中的uels中定義一個用戶只有登陸過認證才可以訪問自己的地址信息的請求路徑:

   url(r‘^address$‘, views.AddressView.as_view(), name="address"),  

在配置文件中配置用戶沒有通過認證的登陸網址

# 登錄的網址
LOGIN_URL = ‘/users/login‘

  

定義請求的處理函數;

  

用戶登陸