django 1.8 官方文档翻译: 14-4-1 重定向应用

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

重定向应用

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

译者:Django 文档协作翻译小组,原文:Redirects

本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。

Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。

相关文章
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
334 1
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
828 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
API 数据安全/隐私保护 网络架构
在django3中配置应用的权限
【6月更文挑战第9天】该文档介绍了Django REST Framework的权限管理。总结来说,本文介绍如何设置严格项目权限和如何通过自定义权限控制对特定资源的访问。
183 10
在django3中配置应用的权限
|
存储 JSON API
在django3应用中使用现代的JWT鉴权
【6月更文挑战第8天】本文介绍流行的鉴权方式,JSON Web Tokens (JWT) 是一种验证JSON数据所有者的机制,它是一个编码的、安全的字符串,包含可信任的数据且能加密签名。无状态的令牌认证允许客户端存储令牌并将其在每次请求。
254 8
在django3应用中使用现代的JWT鉴权
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
1038 0
|
存储 开发框架 JSON
【查漏补缺】Django模型字段类型及其应用
【查漏补缺】Django模型字段类型及其应用
190 0
|
存储 安全 UED
GitHub OAuth认证的Django应用
GitHub OAuth认证的Django应用
193 0
|
存储 安全 API
在django中创建项目时应用基础鉴权
【6月更文挑战第7天】本文探讨了在django中的API权限管理,即用户认证的两种方法:基础认证和会话认证。Django REST Framework默认使用会话认证,但也提供基础、令牌和JWT等其他选项。根据项目需求,应谨慎选择适合的认证方案。
189 3
在django中创建项目时应用基础鉴权
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
687 6
|
安全 开发者 Python
告别迷茫,Django/Flask深入应用指南,让你的Web梦想照进现实!
【7月更文挑战第13天】在Python Web开发中,Django和Flask框架各具特色。Django适合快速构建企业级应用,提供ORM、模板引擎等全面功能;而Flask轻量灵活,适用于小项目和原型开发。通过实例,了解如何启动Django和Flask的基本应用,从创建项目到运行服务器。选择框架应考虑项目需求和个人偏好,不断学习与实践将助你实现Web梦想。
175 1