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

比如说你有匹配某个模式的一堆视图,以及一个并不匹配这个模式但视图逻辑是一样的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

(0)

相关推荐

  • 在Django的URLconf中使用多个视图前缀的方法

    在实践中,如果你使用字符串技术,特别是当你的 URLconf 中没有一个公共前缀时,你最终可能混合视图. 然而,你仍然可以利用视图前缀的简便方式来减少重复. 只要增加多个 patterns() 对象,象这样: 旧的: from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^hello/$', 'mysite.views.hello'), (r'^time/$', 'mysite.views.current_da

  • Django的URLconf中使用缺省视图参数的方法

    一个方便的特性是你可以给一个视图指定默认的参数. 这样,当没有给这个参数赋值的时候将会使用默认的值. 例子: # urls.py from django.conf.urls.defaults import * from mysite import views urlpatterns = patterns('', (r'^blog/$', views.page), (r'^blog/page(?P<num>\d+)/$', views.page), ) # views.py def page(r

  • Django框架中处理URLconf中特定的URL的方法

    有时你有一个模式来处理在你的URLconf中的一系列URL,但是有时候需要特别处理其中的某个URL. 在这种情况下,要使用将URLconf中把特殊情况放在首位的线性处理方式 . 比方说,你可以考虑通过下面这个URLpattern所描述的方式来向Django的管理站点添加一个目标页面 urlpatterns = patterns('', # ... ('^([^/]+)/([^/]+)/add/$', views.add_stage), # ... ) 这将匹配像 /myblog/entries/

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

    比如说你有匹配某个模式的一堆视图,以及一个并不匹配这个模式但视图逻辑是一样的URL. 这种情况下,你可以通过向同一个视图传递额外URLconf参数来伪造URL值的捕捉. 例如,你可能有一个显示某一个特定日子的某些数据的应用,URL类似这样的: /mydata/jan/01/ /mydata/jan/02/ /mydata/jan/03/ # ... /mydata/dec/30/ /mydata/dec/31/ 这太简单了,你可以在一个URLconf中捕捉这些值,像这样(使用命名组的方法): u

  • django框架中ajax的使用及避开CSRF 验证的方式详解

    本文实例讲述了django框架中ajax的使用及避开CSRF 验证的方式.分享给大家供大家参考,具体如下: ajax(Asynchronous Javascript And Xml) 异步javascript和XML ajax的优点 使用javascript技术向服务器发送异步请求 ajax无须刷新整个页面: 由于ajax响应的是局部页面,因此性能要高 当以get的方式向服务器发送请求: views.py def user_valid(request): name=request.GET.get

  • python中django框架通过正则搜索页面上email地址的方法

    本文实例讲述了python中django框架通过正则搜索页面上email地址的方法.分享给大家供大家参考.具体实现方法如下: import re from django.shortcuts import render from pattern.web import URL, DOM, abs, find_urls def index(request): """ find email addresses in requested url or contact page &quo

  • Flask和Django框架中自定义模型类的表名、父类相关问题分析

    本文实例分析了Flask和Django框架中自定义模型类的表名.父类相关问题.分享给大家供大家参考,具体如下: 一. Flask和Django中定义表名(执行迁移后生成)的方式和flask是不同的: 1. Django中表名的定义方式,以代码为例说明 class User(AbstractUser): # 继承自认证系统模型类 """用户模型类""" mobile = modles.CharField(max_length=11, mix_len

  • python django框架中使用FastDFS分布式文件系统的安装方法

    一.安装FastDFS 1-1:执行docker命令安装 # 安装tracker docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs youkou1/fastdfs tracker # 安装storage docker run -dti --network=host --name storage -e TRACKER_SERVER=IP地址:22122 -v /var/fdfs/storage:

  • Django框架中序列化和反序列化的例子

    1.序列化 DRF的核心 就是 前后端分离的核心 前后端分离开发的核心: 将模型转换为json 称之为 序列化 将json转换为模型 称之为 反序列化 1.序列化器的字段 Serializer 序列化器 为了得到模型里的字段,序列化器中的字段应与模型类中的字段名一致 ''' serializers.py ''' class BookInfoSerializer(serializers.Serializer): # read_only=True 只能读 不能修改 id = serializers.

  • Django框架中视图的用法

    视图层 一个视图函数,简称视图,是一个简单的 Python 函数,它接受 Web 请求并且返回 Web 响应. 响应可以是一个 HTML 页面.一个 404 错误页面.重定向页面.XML 文档.或者一张图片... 无论视图本身包含什么逻辑,都要返回响应.代码写在哪里都可以,只要在 Python 目录下面,一般放在项目的 views.py 文件中. 每个视图函数都负责返回一个 HttpResponse 对象,对象中包含生成的响应. 视图层中有两个重要的对象:请求对象(request)与响应对象(H

  • thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析

    本文实例讲述了thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法.分享给大家供大家参考,具体如下: tp5.1中引入了容器(Container)和门面(Facade)这两个新的类 官方文档已经给出了定义: 容器(Container)实现类的统一管理,确保对象实例的唯一性. 门面(Facade)为容器(Container)中的类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个facade类. 深入

  • Django model 中设置联合约束和联合索引的方法

    在Django model中对一张表的几个字段进行联合约束和联合索引,例如在购物车表中,登录的用户和商品两个字段在一起表示唯一记录. 举个栗子: Django model中购物车表 class Cart(models.Model): user = models.ForeignKey( MyUser, verbose_name="用户" ) goods = models.ForeignKey( Goods, verbose_name="商品" ) num = mode

  • YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例

    本文实例讲述了YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用.分享给大家供大家参考,具体如下: 在使用YII2中自带的RBAC时,需要先配置config/web.php: return [ // ... 'components' => [ 'authManager' => [ 'class' => 'yii\rbac\DbManager', ], // ... ], ]; 如果你需要运行yii migrate来创建表,那么config/console.php也需要同

随机推荐