2010-08-10 71 views
5

我已經添加了這個裝飾,以我的觀點一個Django permission_required錯誤消息?

@permission_required('codename') 

當用戶訪問該網頁並沒有所需的權限,他將被重定向登錄頁面,但它並沒有真正告訴他爲什麼他被重定向到那裏。更糟的是,如果他登錄,並且仍然沒有權限,他將完全無法知道他爲什麼不能訪問該頁面!

是不是有一種方法可以利用消息框架並同時發佈錯誤?

+3

看起來像是重複的http://stackoverflow.com/questions/1251151/how-can-make-django-permission-required-decorator-not-to-redirect-already-logged – 2010-08-10 17:08:45

回答

1

可以敲入消息框架並提供錯誤消息。請參閱my answer以得到相同的問題。

2

您可以在此裝飾器中使用login_url參數重定向到其他頁面,而不是登錄頁面。或者你也可以根據從Django的代碼只需編寫自己的裝飾:

def permission_required(perm, login_url=None): 
    """ 
    Decorator for views that checks whether a user has a particular permission 
    enabled, redirecting to the log-in page if necessary. 
    """ 
    return user_passes_test(lambda u: u.has_perm(perm), login_url=login_url) 

簡單地改變login_url一些redirect_to,並不會造成任何混亂。

2

使用@permission_required_or_403('codename')

這將用戶重定向到一個403「權限被拒絕」的錯誤頁面。

+0

這個裝飾器沒有在Django文檔 – 2012-09-18 14:47:33

3

不知道你正在使用的,但在Django 1.4是什麼版本的Django的更高,你可以使用:

from django.contrib.auth.decorators import permission_required 

@permission_required('app.permission',raise_exception=True) 
def myView(request): 
    #your view code 

這將引發403例外,如果你的基地有一個403.html頁面你的模板文件夾,它將服務器了。

如果你正在使用基於類的觀點:

from django.views.generic.base import View 
from django.contrib.auth.decorators import permission_required 
from django.utils.decorators import method_decorator 

class MyView(View): 

    @method_decorator(permission_required('app.permission',raise_exception=True) 
    def get(self, request): 
     #your GET view 

希望這有助於。