在Django框架中伪造捕捉到的URLconf值的方法


Posted in Python onJuly 18, 2015

比如说你有匹配某个模式的一堆视图,以及一个并不匹配这个模式但视图逻辑是一样的URL。 这种情况下,你可以通过向同一个视图传递额外URLconf参数来伪造URL值的捕捉。

例如,你可能有一个显示某一个特定日子的某些数据的应用,URL类似这样的:

/mydata/jan/01/
/mydata/jan/02/
/mydata/jan/03/
# ...
/mydata/dec/30/
/mydata/dec/31/

这太简单了,你可以在一个URLconf中捕捉这些值,像这样(使用命名组的方法):

urlpatterns = patterns('',
  (r'^mydata/(?P<month>\w{3})/(?P<day>\d\d)/$', views.my_view),
)

然后视图函数的原型看起来会是:

def my_view(request, month, day):
  # ....

这种解决方案很直接,没有用到什么你没见过的技术。 当你想添加另外一个使用 my_view 视图但不包含month和/或者day的URL时,问题就出现了。

比如你可能会想增加这样一个URL, /mydata/birthday/ , 这个URL等价于 /mydata/jan/06/ 。这时你可以这样利用额外URLconf参数:

urlpatterns = patterns('',
  (r'^mydata/birthday/$', views.my_view, {'month': 'jan', 'day': '06'}),
  (r'^mydata/(?P<month>\w{3})/(?P<day>\d\d)/$', views.my_view),
)

在这里最帅的地方莫过于你根本不用改变你的视图函数。 视图函数只会关心它 获得 了 参数,它不会去管这些参数到底是捕捉回来的还是被额外提供的。month和day

Python 相关文章推荐
在Python中操作字符串之replace()方法的使用
May 19 Python
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 Python
如何利用python查找电脑文件
Apr 27 Python
Python合并多个Excel数据的方法
Jul 16 Python
python将txt文件读取为字典的示例
Dec 22 Python
Python反爬虫技术之防止IP地址被封杀的讲解
Jan 09 Python
Opencv实现抠图背景图替换功能
May 21 Python
Python使用百度api做人脸对比的方法
Aug 28 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
基于Pytorch SSD模型分析
Feb 18 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 Python
Django中传递参数到URLconf的视图函数中的方法
Jul 18 #Python
在Django的URLconf中使用命名组的方法
Jul 18 #Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 #Python
在Django的URLconf中进行函数导入的方法
Jul 18 #Python
在Django的form中使用CSS进行设计的方法
Jul 18 #Python
在Django的视图中使用form对象的方法
Jul 18 #Python
详解Django中的form库的使用
Jul 18 #Python
You might like
php隐藏实际地址的文件下载方法
2015/04/18 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
日期 时间js控件
2009/05/07 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
d3.js实现图形缩放平移
2019/12/19 Javascript
Python列表(list)常用操作方法小结
2015/02/02 Python
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
python和ruby,我选谁?
2017/09/13 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
利用python计算时间差(返回天数)
2019/09/07 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
python数据抓取3种方法总结
2021/02/07 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
Urban Decay官方网站:美国化妆品品牌
2020/06/04 全球购物
Linux文件操作命令都有哪些
2016/07/23 面试题
公司授权委托书样本
2014/09/15 职场文书
公司更名通知函
2015/04/24 职场文书
KTV员工管理制度
2015/08/06 职场文书
JavaScript ES6的函数拓展
2022/01/18 Javascript
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android