我正在寻找一种类似的方法:
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
但它没有用。出于某种原因我不明白,我没有得到任何内容
答案 0 :(得分:8)
它不起作用,因为你不能有也的403响应,好像它是302响应。
HTTP spec告诉浏览器如何处理某些状态代码,因此获得403的浏览器不会费心去查看是否存在与302相关的Location头。< / p>
如果您想将某人从X重定向到Y,因为他们不允许看到X,那么只需发出标准302,并执行类似设置消息(使用django.contrib.messages)的信息来通知用户为什么他们被重定向,或者将它们重定向到一个解释发生了什么的页面。
答案 1 :(得分:1)
你错过了HTTP状态代码背后的想法。正在使用HTTP代码301/302进行重定向。因此,您无法进行重定向并同时返回403。如果没有返回301/302代码,则根本不是重定向。
我不明白为什么你需要这个,但你总是可以做出如下的观点:
def my403view(request): # e.g. /403.html
return HttpResponseForbidden()
并使用以下方式进行重定向:
return HttpResponseRedirect(reverse("403.html"))
这会将(代码302)重定向到“my403view”,它将返回403.
答案 2 :(得分:1)
我找到了解决方法:
from app_name.views import my_view
....
retour = my_views(request)
return HttpResponseForbidden(retour)
实际上非常简单
所以我得到403错误+我要加载的页面