重定向应用¶
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。具体来说,它会检查具有给定 old_path
和与 SITE_ID
设置相对应的站点 ID 的重定向。
如果找到匹配项,并且
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¶
- class models.Redirect¶
重定向由一个标准的 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})
中间件¶
- class middleware.RedirectFallbackMiddleware¶
您可以通过创建
RedirectFallbackMiddleware
的子类并覆盖response_gone_class
和/或response_redirect_class
来更改中间件使用的HttpResponse
类。- response_gone_class¶
当未找到请求路径的
Redirect
或其new_path
值为空时使用的HttpResponse
类。默认为
HttpResponseGone
。
- response_redirect_class¶
处理重定向的
HttpResponse
类。