详解如何用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 相关文章推荐
windows系统中python使用rar命令压缩多个文件夹示例
May 06 Python
详细介绍Python中的偏函数
Apr 27 Python
Python 通配符删除文件的实例
Apr 24 Python
Python用for循环实现九九乘法表
May 31 Python
python numpy 一维数组转变为多维数组的实例
Jul 02 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
查看python安装路径及pip安装的包列表及路径
Apr 03 Python
Python实现制度转换(货币,温度,长度)
Jul 14 Python
Python多线程多进程实例对比解析
Mar 12 Python
python实现腾讯滑块验证码识别
Apr 27 Python
Django使用channels + websocket打造在线聊天室
May 20 Python
Python OpenCV之常用滤波器使用详解
Apr 07 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
BBS(php & mysql)完整版(六)
2006/10/09 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
python矩阵的转置和逆转实例
2018/12/12 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
会计专业大学生职业生涯规划书
2014/02/11 职场文书
中学生运动会入场词
2014/02/12 职场文书
运动会稿件100字
2014/02/21 职场文书
初中英语演讲稿
2014/04/29 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
2015年党性分析材料
2014/12/19 职场文书
单位介绍信格式范文
2015/05/04 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
运动会班级前导词
2015/07/20 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏