不一致的参数传递到金字塔视图功能取决于包装签名

杰罗姆:

我试图理解传递给金字塔视图函数的参数。

下面的例子演示包裹着两个不同的wrapppers的功能。只有在两个容器之间的区别是签名。在第一个包装物,所述第一位置参数(obj)是显式的。在第二个,它包括在*args

import functools
from pyramid.config import Configurator
import webtest

def decorator_1(func):
    @functools.wraps(func)
    def wrapper(obj, *args, **kwargs):  # <- obj
        print('decorator_1')
        print(type(obj), obj)
        print(args)
        print(kwargs)
        return func(obj, *args, **kwargs)  # <- obj
    wrapper.__wrapped__ = func
    return wrapper

def decorator_2(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print('decorator_2')
        print(args)
        print(kwargs)
        return func(*args, **kwargs)
    wrapper.__wrapped__ = func
    return wrapper

@decorator_1
def func_1(request):
    return {'func': 'func_1'}

@decorator_2
def func_2(request):
    return {'func': 'func_2'}

我希望双方wrapepd方法有同样的表现。

decorator_1,我希望obj成为一个请求对象,的确是。

decorator_2,我希望args[0]是相同的请求对象,但事实并非如此。它出现一个附加第一位置参数被请求对象之前通过。

def add_route(config, route, view, renderer="json"):
    """Helper for adding a new route-view pair."""
    route_name = view.__name__
    config.add_route(route_name, route)
    config.add_view(view, route_name=route_name, renderer=renderer)

config = Configurator()
add_route(config, "/func_1", func_1)
add_route(config, "/func_2", func_2)

app = config.make_wsgi_app()

testapp = webtest.TestApp(app)

testapp.get("/func_1")
testapp.get("/func_2")

输出:

decorator_1
<class 'pyramid.request.Request'> GET /func_1 HTTP/1.0
Host: localhost:80
()
{}
decorator_2
(<pyramid.traversal.DefaultRootFactory object at 0x7f981da2ee48>, <Request at 0x7f981da2ea20 GET http://localhost/func_2>)
{}

因此,func_2崩溃,因为它接受一个DefaultRootFactory对象时,它并不期望。

我想了解这种差异。怎么来的什么金字塔传递到打包的功能包装的变化签名?

这里关系到一个机制,我不明白,我怀疑这可能是在金字塔的逻辑。

sirosen:

我分享我的研究结果webargs发出这个地方过来,但以防万一有人遇到这样的位置:

金字塔让你写一个视图的功能与这两种签名

def view(request):
    ...
def view(context, request):
    ...

第二调用约定是原单,而首先是新的。所以,即使是所谓的“备用” 金字塔文档,它是默认的。

他们使用inspect.getfullargspec,以查看是否认为需要一个位置参数,如果是的话,把它包装到第二约定相匹配。如果视图没有在第一惯例匹配,则假定该第二惯例(在这种情况下,假)相匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Dev

结果与并发功能不一致?

安倍·米斯勒(Abe Miessler):我正在尝试处理

50
来自分类Linux

固定功能的行为不一致

user10102398:我有一个非常简单的功能,例如

150
来自分类Dev

MySQL到JSON不一致提取

Rtsne42:我有一个带有6个表的MySQL数据库

40
来自分类Java

Executor服务不一致

Kihats:我正在测试HashIds是否存在冲突。她的

150
来自分类Java

EventQueue的ID不一致

Tovi7:以下示例出现问题

60
来自分类Dev

属性定义不一致

Em Ae:我有以下正在使用的模板

30
来自分类Java

什么是“不一致同步”?

yegor256:这是我的Java 1.6类:public clas

60
来自分类Dev

解组不一致的JSON

tau:我有JSON(我无法控制),例如

40
来自分类Java

不一致的同步冲突

迈克尔·内斯特连科(Michael Nesterenko)我在退货时遇到了这种违规情况

00
来自分类Dev

环境不一致,请仔细检查包装图

Angel Salazar:我尝试更新或安装新的

10
来自分类Java

Java 8方法签名中的不一致

Paul Boddington:Java 8为我们提供了新方法

150
来自分类Python

用numpy.rint()舍入到最接近的int与.5不一致

本:numpy的round int似乎不是一个问题

80
来自分类Java

同时访问公共领域。为什么可以观察到不一致的状态?

圣安东尼奥:我正在阅读B. Goetz Java Concurrenc

190
来自分类Java

SpringBoot urlencodes加上查询参数标志不一致的方式

罗马Puchkovskiy:我有一个简单的回声控制研究

160
来自分类Java

Java通用方法:从参数类型推断返回类型的上限时不一致

u137:考虑以下问题:class Col <T> {} c

80
来自分类Dev

可访问性不一致:参数类型比方法更难访问

我正在尝试传递一个对象(参考

10
来自分类Java

Java反射与方法声明不一致

山姆:对不起,这个问题的长度。一世'

40
来自分类Dev

dplyr函数内部行为不一致

马里奥而不是使用时会发生此问题

20
来自分类Dev

iOS 7 UIDatePicker高度不一致?

安德鲁我在使用时遇到了奇怪的事情

00

TOP 榜单

热门标签

归档