Skip to main content

重定向应用

Django附带一个可选的重定向应用程序。它允许您在数据库中存储简单的重定向,并为您处理重定向。默认情况下,它使用HTTP响应状态代码 301 Moved Permanently

安装

要安装重定向应用,请按照下列步骤操作:

  1. 确保 django.contrib.sites 框架 安装

  2. 'django.contrib.redirects' 添加到您的 INSTALLED_APPS 设置。

  3. 'django.contrib.redirects.middleware.RedirectFallbackMiddleware' 添加到您的 MIDDLEWARE 设置。

  4. 运行命令 manage.py migrate

怎么运行的

manage.py migrate 在数据库中创建 django_redirect 表。这是一个有 site_idold_pathnew_path 字段的简单查找表。

RedirectFallbackMiddleware 做所有的工作。每次任何Django应用程序引发404错误,此中间件会检查重定向数据库中所请求的URL作为最后手段。具体来说,它检查具有对应于 SITE_ID 设置的站点ID的给定 old_path 的重定向。

  • 如果找到匹配项,且 new_path 不为空,则它会使用301(“Moved Permanently”)重定向重定向到 new_path。您可以将 RedirectFallbackMiddleware 子类化,并将 response_redirect_class 设置为 django.http.HttpResponseRedirect,以改为使用 302 Moved Temporarily 重定向。

  • 如果找到匹配,并且 new_path 为空,则它发送410(“Gone”)HTTP报头和空(无内容)响应。

  • 如果它没有找到匹配,请求继续照常处理。

中间件只会被激活为404s - 不是500s或任何其他状态代码的响应。

注意 MIDDLEWARE 的顺序很重要。一般来说,你可以把 RedirectFallbackMiddleware 放在列表的结尾,因为它是最后的手段。

有关中间件的更多信息,请阅读 中间件文档

如何添加,更改和删除重定向

通过管理界面

如果您已激活自动Django管理界面,您应该在管理索引页上看到一个“重定向”部分。在编辑系统中的任何其他对象时编辑重定向。

通过Python API

class models.Redirect

重定向由标准 Django模型 表示,其存在于 django/contrib/redirects/models.py 中。您可以通过 Django数据库API 访问重定向对象。

中间件

class middleware.RedirectFallbackMiddleware

您可以通过创建 RedirectFallbackMiddleware 的子类并覆盖 response_gone_class 和/或 response_redirect_class 来更改中间件使用的 HttpResponse 类。

response_gone_class

当找不到所请求路径的 Redirect 或具有空白 new_path 值时使用的 HttpResponse 类。

默认为 HttpResponseGone

response_redirect_class

处理重定向的 HttpResponse 类。

默认为 HttpResponsePermanentRedirect