详解如何用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 functools模块学习总结
May 09 Python
python编写简单爬虫资料汇总
Mar 22 Python
Python中functools模块函数解析
Mar 12 Python
python使用标准库根据进程名如何获取进程的pid详解
Oct 31 Python
python实现数独游戏 java简单实现数独游戏
Mar 30 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
python编辑用户登入界面的实现代码
Jul 16 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
Jan 08 Python
Python变量类型知识点总结
Feb 18 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
Jan 26 Python
Python读写Excel表格的方法
Mar 02 Python
用Python可视化新冠疫情数据
Jan 18 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结合飞信 免费天气预报短信
2009/05/07 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
laravel 数据验证规则详解
2019/10/23 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
Javascript this 的一些学习总结
2012/08/31 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
jquery不常用方法汇总
2015/07/26 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
ajax图片上传,图片异步上传,更新实例
2016/12/30 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
[49:29]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
详解python之配置日志的几种方式
2017/05/22 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
python内置模块collections知识点总结
2019/12/19 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
团队精神的演讲稿
2014/05/14 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
最美乡村教师观后感
2015/06/11 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
Golang jwt身份认证
2022/04/20 Golang