重定向app

Django 原生自带一个可选的重定向应用。 它将简单的重定向保存到数据库中并处理重定向。 它默认使用HTTP 响应状态码301 Moved Permanently

安装¶ T0>

请依照下面的步骤安装重定向应用:

  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 表。 它是一张简单的查询表,具有new_pathold_pathsite_id 字段。

RedirectFallbackMiddleware 完成所有的工作。 每当Django 的应用引发一个404 错误,该中间件将到重定向数据库中检查请求的URL。 它会根据old_pathSITE_ID 设置的站点ID 查找重定向的路径。

  • 如果找到匹配的记录且new_path 不为空,它将使用301(“Moved Permanently”)重定向到new_path 你可以子类化RedirectFallbackMiddleware 并设置 response_redirect_classdjango.http.HttpResponseRedirect 来使用302 Moved Temporarily 重定向。
  • 如果找到匹配的记录而new_path 为空,它将发送一个410 (“Gone”) HTTP 头和空(没有内容的)响应。
  • 如果没有找到匹配的记录,请求将继续正常处理。

这个中间件只针对404 错误启用 —— 不能用于500 或其它状态码。

请注意,MIDDLEWARE的顺序很重要。 通常可以将RedirectFallbackMiddleware 放在列表的最后,因为它最后执行。

更多的信息可以阅读middleware docs

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

通过管理界面

如果你已经启用Django 自动生成的Admin 接口,你应该可以在Admin 的主页看到“Redirects”部分。 编辑这些重定向,就像编辑系统中的其它对象一样。

通过Python API

class models.Redirect

重定向通过一个标准的Django model表示,位于django/contrib/redirects/models.py 你可以通过Django database API 访问重定向对象。

中间件¶ T0>

class middleware.RedirectFallbackMiddleware

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

response_gone_class T0> ¶ T1>

HttpResponse 类,用于找不到请求路径的Redirect或找到的new_path 值为空的时候。

默认为HttpResponseGone

response_redirect_class T0> ¶ T1>

处理重定向的HttpResponse 类。

默认为HttpResponsePermanentRedirect