Django2.1通過中間件session驗證實現登錄驗證功能

Django2.1通過中間件session驗證實現登錄驗證功能

Django內置權限管理

Django是有內置的權限管理模塊的,喜歡內置模塊的同學可以使用內置的Auth模塊,官方文檔上有教程的。
Auth需要使用內置的User model,用起來總覺得有點彆扭。不過我們可以參考Auth的源碼,打造一個自定義的登錄驗證模塊,按需定製。

自定義登錄驗證

思路

  1. 自建User模型
  2. 編寫登錄函數,登錄成功則存入session
  3. 編寫中間件,在中間件中驗證session,如不存在session則重定向到登錄頁面

栗子

  1. 建立 User模型,這個自己隨意,愛咋咋,別給username和password漏了就行。

  2. 編寫登錄函數

     這個登錄函數僅僅是示例,想要更多內容還是自己添加吧。
    
# 用戶登錄函數
def login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        md5 = hashlib.md5()
        md5.update(password.encode())
        password = md5.hexdigest()

        info = models.Users.objects.filter(username=username, password=password)
        if info:
            # 存入session
            request.session['key'] = username
            return redirect(reverse('登錄成功後要跳轉的頁面'))
        else:
            return HttpResponse(
                "<script>alert('賬號或密碼錯誤,回去吧!');window.location.href='" + reverse('登錄頁別名') + "'</script>")

    if request.method == 'GET':
        return render(request, '登錄頁')
  1. 中間件

     玩具版中間件
    
from django.shortcuts import HttpResponseRedirect
from django.utils.deprecation import MiddlewareMixin

# 自定義中間件類
class UsersAuthMiddleWare(MiddlewareMixin):
    
    def process_request(self, request):
        # 獲取session內用戶的登錄標識
        key = request.session.get('key', 0)
        # 判斷用戶是否登錄,訪問路徑是不是登錄頁面
        if key == 0 and request.path != '/login':
            # 未登錄,重定向到登錄頁面
            return HttpResponseRedirect('/login')
  • 定義好中間件別忘了註冊

總結

通過session完成登錄驗證。
數據庫查詢成功則存入正確的session,在中間件中過濾掉非法session。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章