用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 ...
随机推荐
- HDU1003 Max Sum
解题思路:最大连续和,此题多了记录的下标,具体见代码. #include<cstdio> #include<algorithm> using namespace std; #d ...
- EM算法定义及推导
EM算法是一种迭代算法,传说中的上帝算法,俗人可望不可及.用以含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计 EM算法定义 输入:观测变量数据X,隐变量数据Z,联合分布\(P(X,Z|\t ...
- WPF中Grid实现网格,表格样式通用类(转)
/// <summary> /// 给Grid添加边框线 /// </summary> /// <param name="grid"></ ...
- modsecurity3.0 nginx 安装
备注: 使用的是modsecurity 3.0 的版本,也是nginx 官方推荐使用的,同时使用的是nginx 的dynamic module 1. 环境准备 https://github.com/S ...
- nginx fastcgi 优化
fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m; fastcgi ...
- 基于Oracle的EntityFramework的WEBAPI2的实现(四)——自动生成在线帮助文档
打开我们项目中的Area文件夹,正常情况下,我们会发现已经有了一个名字叫做[HelpPage]的区域(Area),这个区域是vs帮助我们自动建立的,它是一个mvc(不是webapi),它有普通的Con ...
- 1、Java通过JDBC操作Hive
0.概述 使用的都是CLI或者hive –e的方式仅允许使用HiveQL执行查询.更新等操作.然而Hive也提供客户端的实现,通过HiveServer或者HiveServer2,客户端可以在不启动CL ...
- 数据结构与算法JavaScript描述——链表
1.数组的缺点 数组不总是组织数据的最佳数据结构,原因如下. 在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非常困难. 在数组中,添加和删除元素也很麻烦,因为需要 ...
- H5测试 有空了解下里面没有用过的东西
- SpringMVC之五:自定义DispatcherServlet配置及配置额外的 servlets 和 filters
相关文章 <Servlet3.0之四:动态注册和Servlet容器初始化> <SpringBoot中通过SpringBootServletInitializer如何实现组件加载> ...