详解如何用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学习笔记 下载
Feb 10 Python
使用python BeautifulSoup库抓取58手机维修信息
Nov 21 Python
Python操作列表的常用方法分享
Feb 13 Python
Python中动态获取对象的属性和方法的教程
Apr 09 Python
Python使用multiprocessing创建进程的方法
Jun 04 Python
Python使用matplotlib简单绘图示例
Feb 01 Python
python获取文件路径、文件名、后缀名的实例
Apr 23 Python
python 实现批量xls文件转csv文件的方法
Oct 23 Python
在python中用url_for构造URL的方法
Jul 25 Python
自定义django admin model表单提交的例子
Aug 23 Python
TensorFlow查看输入节点和输出节点名称方式
Jan 04 Python
小结Python的反射机制
Sep 28 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
收集的php编写大型网站问题集
2007/03/06 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
js查找父节点的简单方法
2008/06/28 Javascript
JavaScript库 开发规则
2009/01/31 Javascript
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
this和执行上下文实现代码
2010/07/01 Javascript
javascript下string.format函数补充
2010/08/24 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
原生JS检测CSS3动画是否结束的方法详解
2019/01/27 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
django认证系统 Authentication使用详解
2019/07/22 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
2020/04/14 Python
python 深度学习中的4种激活函数
2020/09/18 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
2021/03/04 Python
中国旅游网站:同程旅游
2016/09/11 全球购物
人事主管岗位职责
2014/01/30 职场文书
中学生操行评语
2014/04/24 职场文书
汽车专业求职信
2014/06/05 职场文书
大学推普周活动总结
2015/05/07 职场文书
李强感恩观后感
2015/06/17 职场文书
慰问信(范文3篇)
2019/10/23 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python