返回介绍

重定向

发布于 2019-11-13 06:14:56 字数 6219 浏览 904 评论 0 收藏 0

Django 原生自带一个可选的重定向应用。它将简单的重定向保存到数据库中并处理重定向。它默认使用HTTP 响应状态码301 Moved Permanently

安装

请依照下面的步骤安装重定向应用:

  1. 确保django.contrib.sites 框架已经安装。
  2. 添加'django.contrib.redirects' 到 INSTALLED_APPS 设置中。
  3. 添加'django.contrib.redirects.middleware.RedirectFallbackMiddleware' 到MIDDLEWARE_CLASSES 设置中。
  4. 运行命令manage.py migrate

它是如何工作的

manage.py migrate 在数据库中创建一张django_redirect 表。它是一张简单的查询表,具有site_idold_pathnew_path 字段。

RedirectFallbackMiddleware 完成所有的工作。每当Django 的应用引发一个404 错误,该中间件将到重定向数据库中检查请求的URL。它会根据old_pathSITE_ID 设置的站点ID 查找重定向的路径。

  • 如果找到匹配的记录且new_path不为空,它将使用301(“Moved Permanently”)重定向到new_path 。你可以子类化RedirectFallbackMiddleware 并设置 response_redirect_classdjango.http.HttpResponseRedirect 来使用302 Moved Temporarily 重定向。
  • 如果找到匹配的记录而new_path 为空,它将发送一个410 (“Gone”) HTTP 头和空(没有内容的)响应。
  • 如果没有找到匹配的记录,请求将继续正常处理。

这个中间件只针对404 错误启用 —— 不能用于500 或其它状态码。

注意MIDDLEWARE_CLASSES 的顺序很重要。通常可以将RedirectFallbackMiddleware 放在列表的最后,因为它最后执行。

更多的信息可以阅读中间件的文档

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

通过Admin 接口

如果你已经启用Django 自动生成的Admin 接口,你应该可以在Admin 的主页看到“Redirects”部分。编辑这些重定向,就像编辑系统中的其它对象一样。

通过Python API

class models.Redirect

重定向通过一个标准的Django 模型表示,位于django/contrib/redirects/models.py。你可以通过Django 的数据库API 访问重定向对象。

中间件

class middleware.RedirectFallbackMiddleware

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

response_gone_class

New in Django 1.7.

HttpResponse 类,用于找不到请求路径的Redirect或找到的new_path 值为空的时候。

默认为HttpResponseGone

response_redirect_class

New in Django 1.7.

处理重定向的HttpResponse 类。

默认为HttpResponsePermanentRedirect

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文