重定向应用程序

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

安装

要安装重定向应用程序,请执行以下步骤:

  1. 确保 django.contrib.sites 框架 is installed .

  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作为最后的手段。具体来说,它检查给定的 old_path 具有与 SITE_ID 设置。

  • 如果它找到一个匹配,并且 new_path 不是空的,它重定向到 new_path 使用301(“永久移动”)重定向。您可以子类 RedirectFallbackMiddleware 并设置 response_redirect_classdjango.http.HttpResponseRedirect 使用A 302 Moved Temporarily 改为重定向。

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

  • 如果找不到匹配项,则继续照常处理请求。

中间件只被激活404秒,而不是500秒或任何其他状态代码的响应。

注意以下顺序: MIDDLEWARE 事项。一般来说,你可以 RedirectFallbackMiddleware 在名单的最后,因为这是最后的手段。

有关中间件的更多信息,请阅读 middleware docs .

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

通过管理界面

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

通过python API

class models.Redirect

重定向由一个标准 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})

中间件

class middleware.RedirectFallbackMiddleware

你可以改变 HttpResponse 中间件通过创建 RedirectFallbackMiddleware 压倒一切 response_gone_class 和/或 response_redirect_class .

response_gone_class

这个 HttpResponse 当a Redirect 找不到请求的路径或路径为空 new_path 价值。

默认为 HttpResponseGone .

response_redirect_class

这个 HttpResponse 处理重定向的类。

默认为 HttpResponsePermanentRedirect .