首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据Python烧瓶或瓶子框架中的内容类型将传入的请求有效负载解锁为方法/函数参数

如何根据Python烧瓶或瓶子框架中的内容类型将传入的请求有效负载解锁为方法/函数参数
EN

Stack Overflow用户
提问于 2013-09-02 06:57:49
回答 2查看 447关注 0票数 1

是否可以将传入的请求有效负载作为方法/函数参数在瓶或瓶中取消?如果是这样的话,是怎么做的?

我想说,作为一个POST/PUT请求的请求有效负载,

代码语言:javascript
复制
{ 'foo': [ 'bar1', 'bar2'], 'spam': 2 }

把这个用在伪码里,

代码语言:javascript
复制
@route('/cheeseshop/<id>', method='PUT')
def cheeseShop(foo, spam):
    pass

可以自动查看这些框架中的内容类型吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-02 08:44:56

为了代码的可读性,在这样做时有一些警告,但可能的解决方案如下所示。

定义序列化方法。如果您需要与不同的客户工作,我建议JSON

创建一个装饰器,并将其放在functionroute之间

代码语言:javascript
复制
@route(...)
@expandargs
def foo(id, bar, baz):
    ...

在装饰器中,使用request.json() (如果它是JSON自动解码有效载荷)来扩展arg,然后使用原始args和新的**expandedargs调用包装函数(注意双星号会爆炸关键字)。

当混合位置和关键字args时会出现问题。

票数 2
EN

Stack Overflow用户

发布于 2018-07-26 10:12:45

这当然只是勾勒出Paolos的答案,但是为了帮助其他人寻找这个问题,下面是一个实现目标的解组装饰师的例子。

代码语言:javascript
复制
from functools import wraps
def unmarshal_payload(view):
    @wraps(view)
    def unmashalled_view(*args, **kwargs):
        return view(*args, **request.get_json(), **kwargs)
    return unmashalled_view 

然后将其用作:

代码语言:javascript
复制
@app.route(f'/<int:id>/', methods=['PUT'])
@unmarshal_payload
def view(id, foo, bar):
    print(id, foo, bar)
    return 'Success'

然后,根据您想要如何处理包含{'id': 'something'}的有效负载这样的事情,您可以更改它。就像在这个简单的实现中一样,Flask将返回一个内部服务器错误,因为python会因为一个函数接收相同关键字的多个关键字参数而抛出一个TypeError。另外,如果在视图中提供了未命名的have参数,则会得到带有意外关键字的Type错误。

因此,一个稍微宽松一些的定义是:

代码语言:javascript
复制
from functools import wraps
def unmarshal_payload(view):
    @wraps(view)
    def unmashalled_view(*args, **kwargs):
        return view(*args, **kwargs, **{k:v for k,v in request.get_json().items() if k not in kwargs})
    return unmashalled_view 

@app.route(f'/<int:id>/', methods=['PUT'])
@unmarshal_payload
def view(id, foo, bar, **kwargs):
    print(id, foo, bar)
    return 'Success'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18567267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档