详解如何用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专用方法与迭代机制实例分析
Sep 15 Python
Django Web开发中django-debug-toolbar的配置以及使用
May 06 Python
pandas筛选某列出现编码错误的解决方法
Nov 07 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
Nov 15 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
浅谈python标准库--functools.partial
Mar 13 Python
python中update的基本使用方法详解
Jul 17 Python
python UDP(udp)协议发送和接收的实例
Jul 22 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
Feb 07 Python
Django REST framwork的权限验证实例
Apr 02 Python
Python实现Excel自动分组合并单元格
Feb 22 Python
Python中的 No Module named ***问题及解决
Jul 23 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 AJAX实例根据邮编自动完成地址信息
2008/11/23 PHP
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
利用PHP实现短域名互转
2013/07/05 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
JS跨域代码片段
2012/08/30 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
超级好用的jQuery圆角插件 Corner速成
2014/08/31 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
Python translator使用实例
2008/09/06 Python
在python的类中动态添加属性与生成对象
2016/09/17 Python
python去除文件中重复的行实例
2018/06/29 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
Python argparse模块应用实例解析
2019/11/15 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
美国在线购买内衣网站:HerRoom
2020/02/22 全球购物
党员个人思想汇报
2013/12/28 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
甜品店创业计划书
2014/08/14 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis