python - 如何在 Django View 中检测重定向

标签 python django http-redirect

我有一个返回重定向的 View 。

return redirect(reverse('my-view-name'))

这是一种在 View 方法内检测重定向的方法吗?

我已搜索 request 对象属性,但找不到任何指示重定向的属性。

最佳答案

重定向只是意味着您返回 HttpResponseRedirect object [Django-doc]状态代码 302 和包含您重定向到的位置的 header Location。该响应没有什么特别之处,并且目标 View 不是由重定向响应本身触发的。

收到此类响应的浏览器可以通过访问该链接进行操作,然后它将触发您重定向到的 View 。但浏览器本身并不会这样做(您通常可以更改一些设置以使您的浏览器(不)遵循此类重定向)。

例如,您可以 implement your own middleware通过这样的重定向来执行一些操作:

def redirect_processing_middleware(get_response):

    def middleware(request):
        response = get_response(request)
        if <b>300 <= response.status_code < 400</b>:
            # the response is a redirect
            # ...
            pass

    return middleware

另一种方法是在 redirect(..) 调用上添加看门狗,但这可以通过简单地创建 HttpResponse 来规避,然后手动更改该响应将其转换为重定向响应。

您可以进行一些静态代码分析(自动或手动)。但由于Python的动态特性,不可能确定哪些 View 会触发重定向:可以通过使用代理函数等来混淆redirect调用,或者动态地alter/monkey修补代码,以便在不(显式)调用 redirect(..) 的情况下进行重定向。

关于python - 如何在 Django View 中检测重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57493253/

相关文章:

django - 我应该如何在 Ubuntu 20.04 LTS 上安装 Django

python - 将文件内容提交到 HTML 中的 Django View

c# - 如何在 ASP.net Core 1.1 MVC 中将用户重定向到新 URL

python - python中,如果os.chdir = 'path'已经实现,如何恢复os.chdir()的功能

Python Eve patch_internal设置etag

Python 导入 - 引用顶级模块而不是 "In-Level"模块

C# HttpClient 不处理 304/307 重定向

nginx - 如何替换 HTTP 请求 URI 中的特殊字符?

python - 一旦从 python 列表中的列表中删除了一个项目,我如何刷新列表

python - 单击确定后执行功能(QDialogBu​​ttonBox)