使用 Django 重定向和 HttpResponseRedirect 有啥区别?

Posted

技术标签:

【中文标题】使用 Django 重定向和 HttpResponseRedirect 有啥区别?【英文标题】:What the difference between using Django redirect and HttpResponseRedirect?使用 Django 重定向和 HttpResponseRedirect 有什么区别? 【发布时间】:2012-10-29 12:59:28 【问题描述】:

一般用哪个比较好?

https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#redirect

https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpResponseRedirect

写作有什么好处:

return redirect(my_url)

结束:

return HttpResponseRedirect(my_url)

还是直接别名?有什么区别吗?哪个更pythonic/django-nic?

【问题讨论】:

【参考方案1】:

两者是有区别的:

对于HttpResponseRedirect,第一个参数只能是url

redirect最终会返回一个HttpResponseRedirect,可以接受modelviewurl作为“to”参数。因此,它可以“重定向”到的内容更加灵活。

我也喜欢redirect 更短。所以我会使用redirect 而不是HttpResponseRedirect

虽然两者都可以使用。

【讨论】:

【参考方案2】:

来自文档 -

redirect(to[, permanent=False], *args, **kwargs) 返回一个 HttpResponseRedirect 指向传递参数的相应 URL。

从定义上看是一样的。这就是捷径的用途。两者都是一回事。

快捷方式通常写在实际 API 的上一层。所以redirect 用参数permanent=False 封装了HttpResponseRedirectHttpResponsePermanentRedirect

使用HttpResponseRedirect 而不是redirect 并没有太大的缺点。希望这可以清除它。

【讨论】:

以上是关于使用 Django 重定向和 HttpResponseRedirect 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

django:临时重定向和永久重定向有啥区别?

Django 自动注销和页面重定向

如何使用自定义 django 404 错误视图重定向?

使用 Django 和 AllAuth 登录后不重定向到我自己的视图

Django LogoutView 重定向到上一页

301 在 Django 中重定向 www 子域