重定向+ 403错误

时间:2012-07-04 08:06:29

标签: django redirect http-status-code-403 http-error

我正在寻找一种类似的方法:

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

但它没有用。出于某种原因我不明白,我没有得到任何内容

3 个答案:

答案 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错误+我要加载的页面