限制訪問可以基於某種許可權,某些檢查或者為login檢視提供不同的位置,這些實現方式大致相同。
一般的方法是直接在檢視的 request.user 上執行檢查。 例如,下面檢視確認使用者登入並是否有 polls.can_vote許可權:
並且django有乙個稱為 user_passes_test 的簡潔方式。它接受引數然後為你指定的情況生成裝飾器。
def user_can_vote(user):
return user.is_authenticated() www.cppcns.comand user.has_perm("polls.can_vote")
@user_passes_test(user_can_vote, login_url="/login/")
def vote(request):
# code here can assume a logged-in user with the correct permission.
...user_passes_test 使用乙個必需的引數: 乙個可呼叫的方法,當存在 user 物件並當此使用者允許檢視該頁面時返回 true 。 注意 user_passes_test 不會自動檢查 user
是否認證,你應該自己做這件事。
例子中我們也展示了第二個可選的引數 login_url ,它讓你指定你的登入頁面的url(預設為 /accounts/login/ )。 如果使用者沒有通過測試,那麼user_passes_test將把使用者重定向到login_url
既然檢查使用者是否有乙個特殊許可權是相對常見的任務,django為這種情形提供了乙個捷徑: permission_required() 裝飾器。 使用這個裝飾器,前面的例程式設計客棧子可以改寫為:
from django.contrib.auth.decorators程式設計客棧 import permission_required
@permission_required('polls.can_vote' login_url="/login/")
def vote(request):
# ...
注意, permission_required() 也有乙個可選的 login_url 引數,www.cppcns.com 這個引數預設為 '/accounts/login/' 。
限制通用檢視的訪問
在django使用者郵件列表中問到最多的問題是關於對通用檢視的限制性訪問。 為實現這個功能,你需要自己包裝檢視,並且在urlconf中,將你自己的版本替換通用檢視:
from django.contrib.auth.decorators import login_required
from django.views.generic.date_based import object_detail
@login_required
def limited_object_detail(*args, **kwargs):
return object_detail(*args, **kwargs)
當然, 你可以用任何其他限定修飾符來替換 login_required 。
本文標題: django中對通過測試的使用者進行限制訪問的方法
本文位址:
django中的使用者認證
在開發的時候,一般我都是用的django 的auth方法進行的使用者登陸時候的認證,但是如果是有乙個鏈結,這個時候不能每次都去登陸,那麼認證的資訊存放在 一般是放在session中,但是session中有一些弊端,這個時候就jwt就出來了。引用參考 這個好處多多,以後也算標配了。但是有乙個問題,這個...
Django中的使用者認證系統
auth模組是django提供的標準許可權管 系統,可以提供使用者身份認證,使用者組和許可權管 django 內建了user模型,包含了username,password,email等字段資訊。但是實際使用時,可能會包含一些其他的字段資訊,例如手機號,頭像,簽名資訊等。此時需要在系統的user模型上...
九 django通過forms對頁面資料校驗
以乙個student學生表為例子class student models.model name models.charfield verbose name 名稱 max length 10 phone models.charfield max length 11,unique true,verbos...