我正在寻找一种方式来有类似的东西:
return HttpResponseForbiddenRedirect(reverse("view_name"))
其重定向到一个视图(其名称),但仍是一个HttpResponse抛出一个403错误
我试图做这样的事情:
class HttpResponseForbiddenRedirect(HttpResponse):
def __init__(self, redirect_to):
super(HttpResponseForbiddenRedirect, self).__init__()
self['Location'] = iri_to_uri(redirect_to)
self.status_code = 403
但它没有工作。 出于某种原因,我不明白,我没有得到任何内容
这是行不通的,因为你不能有一个403的响应,它也采取行动,就好像它是一个302响应。
在HTTP规范告诉浏览器如何处理某些状态代码,所以浏览器得到一个403不会刻意去看看是否有,它会以302的方式做一个Location头。
如果要重定向从X到Y的人,因为他们看不准X,然后就发布一个标准的302,以及做类似设置消息(使用django.contrib.messages)告知他们为什么”新用户已经被重定向,或将它们重定向到解释是怎么回事的页面。
你错过了后面的HTTP状态代码的想法。 重定向正在用HTTP代码301/302制成。 所以,你不能让重定向,并在同一时间返回403。 这根本就不是一个重定向,如果没有返回301/302代码。
为什么你需要这个,我不明白这一点,但你总是可以做出这样一个观点:
def my403view(request): # e.g. /403.html
return HttpResponseForbidden()
并做您的重定向有:
return HttpResponseRedirect(reverse("403.html"))
这将重定向(代码为302)为“my403view”,它会返回403。
我找到了解决这个:
from app_name.views import my_view
....
retour = my_views(request)
return HttpResponseForbidden(retour)
事实上,这是很简单
所以我得到的403错误+的页面我想负荷