django自定義實現登錄驗證-更新版


django自定義實現登錄驗證


  • django內置的登錄驗證必須讓開發者使用django內置的User模塊,這會讓開發者再某些方面被限制住
  • 下面的模塊是我自己自定義實現的django驗證,使用方式和django的一樣
  •  1 from django.http import HttpResponse
     2 from django.shortcuts import redirect
     3 from django.conf import settings
     4 from django.views import View
     5 
     6 
     7 class HttpResponseUnauthorized(HttpResponse):
     8     status_code = 401
     9 
    10 
    11 def login(request, user):
    12     request.session['login'] = user.id
    13 
    14 
    15 def logout(request):
    16     request.session.flush()
    17 
    18 
    19 def login_required(func):
    20     """
    21     對需要登錄的視圖函數進行驗證
    22     @login_required
    23     def your_view(request, *args, **kwargs):
    24         ''''''
    25     """
    26 
    27     def wrapper(*args, **kwargs):
    28         request = args[0]
    29         is_login = request.session.get('login')
    30 
    31         if not is_login:
    32             redirect_url = '%s?next=%s' % (settings.LOGIN_URL, request.path)
    33             return redirect(redirect_url)
    34         else:
    35             result = func(*args, **kwargs)
    36             return result
    37 
    38     return wrapper
    39 
    40 
    41 class LoginRequired(View):
    42     """
    43     對需要登錄的類視圖進行驗證
    44     class YouView(LoginRequired):
    45         ''''''
    46     """
    47 
    48     @classmethod
    49     def as_view(cls, **initkwargs):
    50         view = super(LoginRequired, cls).as_view()
    51         return login_required(view)

     

  • 當驗證用戶名密碼成功后,使用login登入一個用戶,將request,和登錄后的user對象(model的實例)傳進去, 即可記錄下當前用戶的登錄狀態
  • 退出用戶直接將session清除即可。
  • 對於函數視圖,用裝飾器對函數視圖進行裝飾:
    • 判斷當前的請求request里面的session有沒有被login生成一個key為'login'的值:
      • 如果沒有則跳轉到登錄頁面
      • 有則進行正常訪問
  • 類視圖調用的是as_view方法,可以在urls里面對該url對應的類視圖的as_view用login_required進行調用,這種方法比較繁瑣,代碼可讀性查
  • 對於類視圖,因為類視圖最后都要調用as_view方法,可以重新寫一個類來繼承View,重寫View的as_view方法。
    • 調用父類的as_view方法,將返回的view對象用login_required進行調用,最后實現了類方法的驗證

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM