我有一个返回重定向的 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/