Django使用裝飾器限制對視圖的訪問及實現原理

Django使用裝飾器限制對視圖的訪問

1.登錄鑒權裝飾器

除瞭可以在視圖處理中校驗用戶身份以及驗證用戶權限之外,Django還提供瞭便捷的裝飾器來完成這兩類校驗。@login_required裝飾器用來驗證用戶是否登錄,隻有登錄的用戶才可以訪問視圖,並獲得響應,否則可以重定向到登錄頁引導用戶登錄。@permission_required裝飾器用來校驗用戶是否具有特定的權限,隻有校驗通過的用戶才可以訪問視圖。下面介紹這兩個裝飾器的使用方法與實現原理

2.@login_required

使用@login_required可以傳遞兩個參數

  • login_url:匿名用戶訪問時重定向的URL,通常都會跳轉到登錄頁。默認的登錄頁由settings.LOGIN_URL指定,需要設置為系統中定義的登錄頁URL
  • redirect_field_name:默認值為next,作為GET請求的參數。這個參數可以用於登錄後直接跳回到原先訪問的視圖

3.@permission_required

使用@permission_required可以傳遞三個參數:

  • perm:需要校驗的權限,可以是列表、元組或字符串。如果是列表或元組則需要用戶同時擁有這些權限
  • login_url:沒有指定權限的用戶訪問時重定向的URL,與@login_required中的login_url參數含義相同
  • raise_exception:默認為False,如果設置為True,則當沒有權限的用戶訪問時將直接返回403

由於Python支持給函數配置多個裝飾器,所以,校驗登錄和校驗權限的裝飾器可以同時使用。例如:

在這裡插入圖片描述

這樣,訪問Topic詳情視圖時,不僅需要當前用戶是已登錄用戶,還需要其同時擁有can_view_topic和add_topic兩個權限

到此這篇關於Django使用裝飾器限制對視圖的訪問的文章就介紹到這瞭,更多相關Django裝飾器限制視圖訪問內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: