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

yipeiwu_com7年前Python基础

比如说你有匹配某个模式的一堆视图,以及一个并不匹配这个模式但视图逻辑是一样的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中使用百度音乐搜索的api下载指定歌曲的lrc歌词

这次这个真的是干货哦,昨晚弄了半晚上,,,,从8点吃完饭就开始写,一直到了快12点才弄好,,,新手,伤不起呀。。。。 先简单的说下吧,百度提供了一个音乐搜索的api,你想百度请求类似于...

使用pyhon绘图比较两个手机屏幕大小(实例代码)

使用pyhon绘图比较两个手机屏幕大小(实例代码)

背景:准备给长辈买个手机,有关手机大小,网购平台基本只有手机尺寸和分辨率的文本数据,因而对手机屏幕大小没有直观感受,虽然网上有比较手机大小的网站(百度搜索),但是只有知名的手机才有数据,...

利用Django提供的ModelForm增删改数据的方法

上一篇我们写了Django基于类如何增删改数据的方法,方法虽然简单,但新手可能对其原理不是很清楚,那么我们这次就用Django提供的ModelForm方法来实现增删改数据,这是一种基于现...

selenium+python实现自动化登录的方法

Selenium Python 提供了一个简单的API 便于我们使用 Selenium WebDriver编写 功能/验收测试。 通过Selenium Python的API,你可以直观地...

Python使用matplotlib填充图形指定区域代码示例

Python使用matplotlib填充图形指定区域代码示例

本文代码重点在于演示Python扩展库matplotlib.pyplot中fill_between()函数的用法。 import numpy as np import matplot...