重定向应用程序

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(“永久移动”)重定向重定向到 new_path。您可以对 RedirectFallbackMiddleware 进行子类化,并将 response_redirect_class 设置为 django.http.HttpResponseRedirect 以使用 302 Moved Temporarily 重定向。
  • 如果找到匹配项,并且 new_path 为空,它将发送 410(“已删除”)HTTP 标头和空(无内容)响应。
  • 如果找不到匹配项,请求将继续按常规进行处理。

该中间件仅针对 404 激活,不针对 500 或任何其他状态代码的响应。

请注意,MIDDLEWARE 的顺序很重要。通常,您可以将 RedirectFallbackMiddleware 放在列表末尾,因为它是一种最后手段。

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

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

通过管理界面

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

通过 Python API

models.重定向

重定向由标准 Django 模型 表示,该模型位于 django/contrib/redirects/models.py 中。您可以通过 Django 数据库 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})

中间件

中间件。重定向回退中间件

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

response_gone_class

重定向 在请求的路径中找不到或具有空白 new_path 值时使用的 HttpResponse 类。

默认为 HttpResponseGone

response_redirect_class

HttpResponse 类处理重定向。

默认为 HttpResponsePermanentRedirect

返回顶部