首页 > 编程 > Python > 正文

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

2020-01-04 18:02:19
字体:
来源:转载
供稿:网友

这篇文章主要介绍了在Django框架中伪造捕捉到的URLconf值的方法,Django是Python各色人气框架中最为著名的一个,需要的朋友可以参考下
比如说你有匹配某个模式的一堆视图,以及一个并不匹配这个模式但视图逻辑是一样的URL。 这种情况下,你可以通过向同一个视图传递额外URLconf参数来伪造URL值的捕捉。
例如,你可能有一个显示某一个特定日子的某些数据的应用,URL类似这样的:
 

  1. /mydata/jan/01/ 
  2. /mydata/jan/02/ 
  3. /mydata/jan/03/ 
  4. # ... 
  5. /mydata/dec/30/ 
  6. /mydata/dec/31/ 



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

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



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

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



这种解决方案很直接,没有用到什么你没见过的技术。 当你想添加另外一个使用 my_view 视图但不包含month和/或者day的URL时,问题就出现了。
比如你可能会想增加这样一个URL, /mydata/birthday/ , 这个URL等价于 /mydata/jan/06/ 。这时你可以这样利用额外URLconf参数:
 

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



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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表