【问题标题】:Redirection + 403 error重定向 + 403 错误
【发布时间】:2012-07-04 17:04:04
【问题描述】:

我正在寻找一种方法来获得类似的东西:

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

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

【问题讨论】:

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


    【解决方案1】:

    它不起作用,因为您不能让 的 403 响应像 302 响应一样被执行。

    HTTP spec 告诉浏览器如何处理某些状态代码,因此获得 403 的浏览器不会像处理 302 那样费心查看是否有 Location 标头。

    如果您想将某人从 X 重定向到 Y,因为他们不允许看到 X,那么只需发出标准 302,并执行诸如设置消息(使用 django.contrib.messages)之类的操作以通知用户为什么他们被重定向,或将他们重定向到解释正在发生的事情的页面。

    【讨论】:

      【解决方案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。

      【讨论】:

        【解决方案3】:

        我找到了解决办法:

        from app_name.views import my_view
        
        ....
            retour = my_views(request)
            return HttpResponseForbidden(retour)
        

        其实很简单

        所以我得到了 403 错误 + 我要加载的页面

        【讨论】:

          猜你喜欢
          • 2011-07-23
          • 2018-05-02
          • 2012-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-22
          相关资源
          最近更新 更多