详解如何用django实现redirect的几种方法总结


Posted in Python onNovember 22, 2018

用django开发web应用, 经常会遇到从一个旧的url转向一个新的url。这种隐射也许有规则,也许没有。但都是为了实现业务的需要。总体说来,有如下几种方法实现 django的 redirect。

1. 在url 中配置 redirect_to 或者 RedirectView(django 1.3 版本以上)
2. 在view 中 通过 HttpResponseRedirect 实现 redirect
3. 利用 django 的 redirects app实现

1 在url 中配置 redirect_to 或者 RedirectView(django 1.3 版本以上)

from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
  (r'^one/$', redirect_to, {'url': '/another/'}),
)

from django.views.generic import RedirectView
urlpatterns = patterns('',
  (r'^one/$', RedirectView.as_view(url='/another/')),
)

2. 在view 中 通过 HttpResponseRedirect 实现 redirect

from django.http import HttpResponseRedirect
 
def myview(request):
  ...
  return HttpResponseRedirect("/path/")

3. 利用 django 的 redirects app实现

1. 在settings.py 中  增加 'django.contrib.redirects' 到你的 INSTALLED_APPS 设置.
2. 增加 'django.contrib.redirects.middleware.RedirectFallbackMiddleware' 到你的MIDDLEWARE_CLASSES 设置中.
3. 运行 manage.py syncdb. 创建 django_redirect 这个表,包含了 site_id, old_path and new_path 字段.

主要工作是 RedirectFallbackMiddleware  完成的,如果 django  发现了404 错误,这时候,就会进django_redirect 去查找,有没有匹配的URL 。如果有匹配且新的RUL不为空则自动转向新的URL,如果新的URL为空,则返回410. 如果没有匹配,仍然按原来的错误返回。

注意,这种仅仅处理 404 相关错误,而不是 500 错误的。

增加删除 django_redirect 表呢?

from django.db import models
from django.contrib.sites.models import Site
from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import python_2_unicode_compatible
 
@python_2_unicode_compatible
class Redirect(models.Model):
  site = models.ForeignKey(Site)
  old_path = models.CharField(_('redirect from'), max_length=200, db_index=True,
    help_text=_("This should be an absolute path, excluding the domain name. Example: '/events/search/'."))
  new_path = models.CharField(_('redirect to'), max_length=200, blank=True,
    help_text=_("This can be either an absolute path (as above) or a full URL starting with 'http://'."))
 
  class Meta:
    verbose_name = _('redirect')
    verbose_name_plural = _('redirects')
    db_table = 'django_redirect'
    unique_together=(('site', 'old_path'),)
    ordering = ('old_path',)
 
  def __str__(self):
    return "%s ---> %s" % (self.old_path, self.new_path)

采用类似如上的MODEL ,另外用DJANGO相关ORM 就可以实现save,delete了。

以上三种方法都可以实现 django redirect,其实最常用的,是第一种与第二种,第三种方法很少用。

Python 相关文章推荐
详解Python编程中time模块的使用
Nov 20 Python
python日志记录模块实例及改进
Feb 12 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
python中日志logging模块的性能及多进程详解
Jul 18 Python
Python中单、双下划线的区别总结
Dec 01 Python
利用Python将每日一句定时推送至微信的实现方法
Aug 13 Python
解决Python2.7中IDLE启动没有反应的问题
Nov 30 Python
python实现多层感知器
Jan 18 Python
python实现简单颜色识别程序
Feb 19 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
Mar 13 Python
python爬取招聘要求等信息实例
Nov 20 Python
PyGame贪吃蛇的实现代码示例
Nov 21 #Python
python+flask实现API的方法
Nov 21 #Python
python实现事件驱动
Nov 21 #Python
python事件驱动event实现详解
Nov 21 #Python
python程序封装为win32服务的方法
Mar 07 #Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 #Python
pygame游戏之旅 添加游戏暂停功能
Nov 21 #Python
You might like
php判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
JavaScript 调试器简介
2009/02/21 Javascript
jQuery autocomplete插件修改
2009/04/17 Javascript
Jquery iframe内部出滚动条
2010/02/11 Javascript
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
2013/05/08 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
Python做简单的字符串匹配详解
2017/03/21 Python
python3中int(整型)的使用教程
2017/03/23 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
django settings.py 配置文件及介绍
2019/07/15 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
采购主管工作职责
2013/12/12 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
工作鉴定评语
2014/05/04 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
健康状况证明模板
2014/10/23 职场文书
离婚律师函范本
2015/05/27 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
生日祝酒词大全
2015/08/10 职场文书
经典励志格言:每日一句,让你每天充满能量
2019/08/16 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL
Python代码实现双链表
2022/05/25 Python