我有一個測試類,測試所有頁面訪問不同的用戶。如何測試403錯誤?
這些訪問由裝飾器在我的每個視圖中定義。
views.py:
@login_required
def afficher(request):
...
...
@creation_permission_required
def ajouter(request):
...
...
一些裝飾都是由我定義。
decorators.py:
def creation_permission_required(function):
@wraps(function)
@login_required
def decorateur(request, *k, **a):
user = get_object_or_404(User, username__iexact=request.user.username)
if user.is_superuser or user.get_profile().creation:
return function(request, *k, **a)
else:
return HttpResponseRedirect(reverse("non_autorise"))# <--- PROBLEM
return decorateur
return function
當我測試他們,我用的是STATUS_CODE屬性,以驗證用戶可以訪問或無法在網頁
test.py:
c = Client()
c.login(username='aucun', password='aucun')
for url in self.url_aucun:
r = c.get(reverse(url['url'], args=url['args']))
self.assertEqual(r.status_code, 200)
for url in self.url_creation:
r = c.get(reverse(url['url'], args=url['args']))
self.assertEqual(r.status_code, 302) # <--- SECOND PROBLEM
當用戶沒有訪問頁面的權限時,頁面應該返回403錯誤或(禁止)。我怎樣才能測試403而不是302?
編輯:我試圖使用HttpResponseForbidden(反向(「non_autorise」)),但無法獲得任何內容。於是我試圖讓自己的HttpResponse這是完全相同的副本HttpResponseRedirect但與其他STATUS_CODE(403)仍然沒有得到任何內容...
decorators.py:
class HttpResponseTest(HttpResponse):
def __init__(self, redirect_to):
super(HttpResponseTest, self).__init__()
self['Location'] = iri_to_uri(redirect_to)
self.status_code = 403
def creation_permission_required(function):
@wraps(function)
@login_required
def decorateur(request, *k, **a):
user = get_object_or_404(User, username__iexact=request.user.username)
if user.is_superuser or user.get_profile().creation:
return function(request, *k, **a)
else:
return HttpResponseTest(reverse("non_autorise"))# <--- PROBLEM
return decorateur
return function
你想重定向到「non_autorise」視圖嗎?還是你想要一個狀態碼302?你不能擁有兩個。 –
我不能?因爲這正是我想要的:403代碼+重定向 – BlueMagma
問題不再是關於我問的問題了,所以我開始一個新的問題,它更精確地關於我想要的:http://stackoverflow.com/questions/11324909/重定向-403-錯誤 – BlueMagma