Django附带一个可选的重定向应用程序。它允许您将重定向存储在数据库中并为您处理重定向。它使用HTTP响应状态代码 301 Moved Permanently 默认情况下。
要安装重定向应用程序,请执行以下步骤:
确保 django.contrib.sites 框架 is installed .
添加 'django.contrib.redirects' 对你 INSTALLED_APPS 设置。
添加 'django.contrib.redirects.middleware.RedirectFallbackMiddleware' 对你 MIDDLEWARE 设置。
运行命令 manage.py migrate .
manage.py migrate 创建一个 django_redirect 您的数据库中的表格。这是一个查找表, site_id , old_path 和 new_path 菲尔兹。
这个 RedirectFallbackMiddleware 做所有的工作。每次Django应用程序引发404错误时,此中间件都会检查重定向数据库中请求的URL作为最后的手段。具体来说,它检查给定的 old_path 具有与 SITE_ID 设置。
如果它找到一个匹配,并且 new_path 不是空的,它重定向到 new_path 使用301(“永久移动”)重定向。您可以子类 RedirectFallbackMiddleware 并设置 response_redirect_class 到 django.http.HttpResponseRedirect 使用A 302 Moved Temporarily 改为重定向。
如果它找到一个匹配,并且 new_path 为空,它发送410(“Gone”)HTTP头和空(无内容)响应。
如果找不到匹配项,则继续照常处理请求。
中间件只被激活404秒,而不是500秒或任何其他状态代码的响应。
注意以下顺序: MIDDLEWARE 事项。一般来说,你可以 RedirectFallbackMiddleware 在名单的最后,因为这是最后的手段。
有关中间件的更多信息,请阅读 middleware docs .
如果您已经激活了自动Django管理界面,那么您应该在管理索引页上看到一个“重定向”部分。在编辑系统中的任何其他对象时编辑重定向。
重定向由一个标准 Django model ,它住在 django/contrib/redirects/models.py 。可以通过以下方式访问重定向对象 Django database API 。例如:
>>> from django.conf import settings
>>> from django.contrib.redirects.models import Redirect
>>> # Add a new redirect.
>>> redirect = Redirect.objects.create(
... site_id=1,
... old_path="/contact-us/",
... new_path="/contact/",
... )
>>> # Change a redirect.
>>> redirect.new_path = "/contact-details/"
>>> redirect.save()
>>> redirect
<Redirect: /contact-us/ ---> /contact-details/>
>>> # Delete a redirect.
>>> Redirect.objects.filter(site_id=1, old_path="/contact-us/").delete()
(1, {'redirects.Redirect': 1})
你可以改变 HttpResponse 中间件通过创建 RedirectFallbackMiddleware 压倒一切 response_gone_class 和/或 response_redirect_class .
这个 HttpResponse 当a Redirect 找不到请求的路径或路径为空 new_path 价值。
默认为 HttpResponseGone .
这个 HttpResponse 处理重定向的类。
5月 28, 2025