重定向+ 403错误(Redirection + 403 error)

2019-06-26 01:27发布

我正在寻找一种方式来有类似的东西:

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

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

Answer 1:

这是行不通的,因为你不能有一个403的响应,它采取行动,就好像它是一个302响应。

在HTTP规范告诉浏览器如何处理某些状态代码,所以浏览器得到一个403不会刻意去看看是否有,它会以302的方式做一个Location头。

如果要重定向从X到Y的人,因为他们看不准X,然后就发布一个标准的302,以及做类似设置消息(使用django.contrib.messages)告知他们为什么”新用户已经被重定向,或将它们重定向到解释是怎么回事的页面。



Answer 2:

你错过了后面的HTTP状态代码的想法。 重定向正在用HTTP代码301/302制成。 所以,你不能让重定向,并在同一时间返回403。 这根本就不是一个重定向,如果没有返回301/302代码。

为什么你需要这个,我不明白这一点,但你总是可以做出这样一个观点:

def my403view(request): # e.g. /403.html
    return HttpResponseForbidden()

并做您的重定向有:

return HttpResponseRedirect(reverse("403.html"))

这将重定向(代码为302)为“my403view”,它会返回403。



Answer 3:

我找到了解决这个:

from app_name.views import my_view

....
    retour = my_views(request)
    return HttpResponseForbidden(retour)

事实上,这是很简单

所以我得到的403错误+的页面我想负荷



文章来源: Redirection + 403 error