用django实现redirect的几种方法总结
用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,其实最常用的,是第一种与第二种,第三种方法很少用。
用django实现redirect的几种方法总结的更多相关文章
- django查询表记录的十三种方法
django查询表记录的十三种方法 all() 结果为queryset类型 >>> models.Book.objects.all() <QuerySet [<Book: ...
- Django内存管理的6种方法
一.django的缓存方式有6种: 1.开发者调试缓存 2.内存缓存 3.文件缓存 4.数据库缓存 5.Memcache缓存(使用python-memecached模块) 6.Memcache缓存(使 ...
- Django性能优化的几种方法
1.一次性取出你所需要的数据 单一动作,需要多次连接数据库里的时候,最好一次性取出所有需要的数据,减少连接数据库的次数.此类需求推荐使用QuerySet.select_related()和prefet ...
- Response.Redirect 打开新窗体的两种方法
普通情况下,Response.Redirect 方法是在server端进行转向,因此,除非使用 Response.Write("<script>window.location=' ...
- Response.Redirect 打开这两种方法的一种新形式
在一般情况下.Response.Redirect 该方法是在server年底转向,因此,除非 Response.Write("<script>window.location='h ...
- 三种方法让Response.Redirect在新窗口打开
通过设置form的target属性同样可以让Response.Rederect所指向的url在新的窗口打开,下面为大家介绍三种具体的实现方法 Response.Rederect在默认情况下是在本页跳转 ...
- django序列化单表的4种方法的介绍
这里主要是讲序列化单表的几种方法 先看下models中设计的表结构 from django.db import models # Create your models here. class Book ...
- [py]django表单不清空实现的2种方法
参考 参考: django实现内容不清空2种方法 django form的作用 1.生成html标签 2.验证输入内容 form生成表单 zhuji/forms.py - 实例化表单 - 定制form ...
- Response.Redirect 打开新窗口的两种方法
一般情况下,Response.Redirect 方法是在服务器端进行转向,因此,除非使用 Response.Write("<script>window.location='htt ...
随机推荐
- excel中多表汇总
excel中将多个表中的结果汇总到一张表格里,而且汇总表格的数据是随着其它表格的数据变化面变化 其实就是函数sumif的使用,sumif函数的结构: sumif函数语法 sumif(range,cri ...
- HDU2604 Queuing 矩阵初识
Queues and Priority Queues are data structures which are known to most computer scientists. The Queu ...
- ueditor使用小结【来源网络】
原文地址:http://www.cnblogs.com/janes/p/5072496.html ueditor是百度编辑器,官网地址:http://ueditor.baidu.com/website ...
- 获取web.config 内的值
获取 System.Configuration.ConfigurationManager.AppSettings[DrugPackageRegistrationName]//获取web.config ...
- matplotlib ----- 清空图片
关闭单个图: fig = plt.figure(0) # 新图 0 plt.savefig() # 保存 plt. close(0) # 关闭图 0 关闭所有图不用管 fig 号码 fig = p ...
- win10安装.net3.5 报错解决
在win10光盘里提取“microsoft-windows-netfx3-ondemand-package.cab”安装包 然后放在sxs目录 新建批处理...??Cls@ECHO OFFTITLE ...
- 原生 Javascript 编写五子棋
原文地址:原生 Javascript 编写五子棋 博客地址:http://www.extlight.com 一.背景 近一个月没写 Javascript 代码,有点生疏.正好浏览网页时弹出五子棋的游戏 ...
- 6.Python使用Pandas小案例
1.使用以下命令引入Pandas和xlrd,引入成功后在pycharm的setting导入即可使用(pip3是由于个人python版本为3.6)==在dos命令行输入以下信息 pip3 install ...
- Python2 和 Python3 的区别(待完善)
1.宏观上 python2 :源码不标准,混乱,重复代码太多 python3 :统一 标准,去除重复代码. 2. print python2 :括号可有可无 print(a) 或 print ap ...
- Ubuntu secuerCRT连接失败,The remote system refused the connection.
新安装的ubuntu系统,securtCRT连接失败,出现下面结果,这是因为ubuntu没有安装工具. The remote system refused the connection. 解决办法: ...