重定向应用程序¶
Django 带有一个可选的重定向应用程序。它允许你将重定向存储在数据库中,并为你处理重定向。它默认使用 HTTP 响应状态代码 301 Moved Permanently
。
安装¶
要安装重定向应用程序,请遵循以下步骤
- 确保
django.contrib.sites
框架 已安装。 - 将
'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。具体来说,它会使用与 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
类处理重定向。
-