Django附带了一个可选的重定向应用程序。它允许您在数据库中存储重定向并为您处理重定向。它使用HTTP响应状态代码 301 Moved Permanently
默认情况下。
要安装重定向应用程序,请执行以下步骤:
确保 django.contrib.sites
框架 is installed .
添加 '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
设置。
如果它找到一个匹配,并且 new_path
不是空的,它重定向到 new_path
使用301(“永久移动”)重定向。您可以子类 RedirectFallbackMiddleware
并设置 response_redirect_class
到 django.http.HttpResponseRedirect
使用A 302 Moved Temporarily
改为重定向。
如果它找到一个匹配,并且 new_path
为空,它发送410(“Gone”)HTTP头和空(无内容)响应。
如果找不到匹配项,则继续照常处理请求。
中间件只被激活404秒,而不是500秒或任何其他状态代码的响应。
注意以下顺序: MIDDLEWARE
事项。一般来说,你可以 RedirectFallbackMiddleware
在名单的最后,因为这是最后的手段。
有关中间件的更多信息,请阅读 middleware docs .
如果您已经激活了自动Django管理界面,那么您应该在管理索引页上看到一个“重定向”部分。在编辑系统中的任何其他对象时编辑重定向。
重定向由一个标准 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})
你可以改变 HttpResponse
中间件通过创建 RedirectFallbackMiddleware
压倒一切 response_gone_class
和/或 response_redirect_class
.
这个 HttpResponse
当a Redirect
找不到请求的路径或路径为空 new_path
价值。
默认为 HttpResponseGone
.
这个 HttpResponse
处理重定向的类。
12月 18, 2023