问题标签 [webargs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3460 浏览

python - 处理带有 URL 编码参数的请求的 Flask 问题

我有一个奇怪的问题;我正在运行 Flask,并且我有一个 API 函数来取消会员资格。该 URL 还包含一个用于设置取消原因的参数。这是一个短文本,它可以包含扩展字符,因此该字符串由主叫方进行 URL 编码。

然而,在某些情况下,Flask 甚至在到达我自己的处理代码之前就返回了 400 错误。例如,以下 URL:

给我一个 400 错误:浏览器(或代理)发送了一个该服务器无法理解的请求。尽管它似乎是一个完全有效的 URL。当我捕获错误时,基础错误数据是:

当我从 URL 字符串中删除编码的扩展字符á (%C3%A1)时,我发现一切都很好。

我也可以通过将我在其他地方找到的解决方法添加到我的应用程序来解决它。初始化()

我知道这个语句强制 Python 解释器默认使用 UTF-8 来解码字节串,而不是 ASCII。
这给了我解决问题的方法,但感觉过于复杂和不必要。

所以,真正的问题是,我在这里错过了什么?Flask 中是否有我不知道的设置可以解决这个问题,或者 Flask 是否真的无法处理特定的 URL 编码字符串?我希望 Flask 能够自行处理 URL 编码参数,而无需在非库代码中使用解决方法......

我没有回溯,因为 Flask 会捕获它并将其作为 HTTP 错误处理并返回 400 HTTP 状态代码。

编辑:异常的起源在 Flask 代码的这一部分(site-packages\flask\app.py):

代码跳到 except: 并返回 400 错误。

感谢您能给我的任何指示。

0 投票
1 回答
1420 浏览

flask - Flask 错误处理程序无法处理断言错误

我正在使用 Flask-RESTful 构建 REST api 和 webargs 进行解析。

在定义资源时,我希望参数存在,所以我写了required=True

例如:

现在,

在对 API 执行单元测试时,明确未指定条目,它返回断言错误

当我检查时, exc_value 是

并且 e 是

现在,

我有这些方法来处理这个异常@app.errorhandler(500)

@app.errorhandler(验证错误)

@app.errorhandler(类型错误)

@app.errorhandler(UnprocessableEntity)

@app.errorhandler(422)

@app.errorhandler(异常)

我不知道为什么即使这也不起作用

@app.errorhandler(AssertionError)

参考这个: 链接 但无法解决

我正在使用 Flask(0.10.1) Flask-Restful(0.3.5) webargs(1.2.0)

0 投票
1 回答
552 浏览

python - 如何在没有http调用的情况下直接从代码将参数传递给webargs方法?

我有通过 HTTP 完美运行的 Flask 方法:

api.add_resource(PricePerPeriod, '/price/<int:identifier_id>/')

像这样的电话http://localhost:8080/price/21/?period=1&duration=60

但是,如果我尝试从代码中调用此类方法:

它在 webargs 检查参数时失败。

我只能假设 @use_kwargs(args) 期望 args 被填写,在直接调用的情况下为空,因为参数直接传递给函数。

如何调用用@use_kwargs(args)代码装饰的方法并将参数正确传递给它?

0 投票
1 回答
1028 浏览

python - 是否可以将 SQLalchemy 中的 PhoneNumberType 存储为空?

我正在使用 webargs 和 python 创建一个 API,并且我的条件是用户必须提供电话号码或电子邮件地址。如果用户仅提供电子邮件地址,那么当 sqlalchemy 尝试实例化 PhoneNumberType 时,我会收到预期的错误:

sqlalchemy_utils.types.phone_number.PhoneNumberParseException: (1) (1) 提供的电话号码为无。

我的问题是如何使这个数据库字段能够接受一个空电话号码并保持该条目为空?

这是我的用户模型的一部分:

由于其他原因需要国家代码,但有没有办法说... _Phone null ??

0 投票
1 回答
58 浏览

python - 在 Datashader Dashboard 上为其他图形添加回调标志

我正在尝试基于替代聚合向数据着色器仪表板示例添加其他数字。例如,连同地理NYC_Taxi纬度、经度PUDO聚合,我想包括第二个面板,其中包含同一仪表板中的行程距离/小费数据。

我在布局中设置了第二个图形,我可以从第一个图像镜像数据着色器层。 带有两个镜像的仪表板

我真的认为我需要通过

以及在每个图像的服务 url 中添加一个名称字段。

name字段是用于创建正确聚合的标志。我已经明白其中service_url包含 URL 请求的适当字段,但我不明白如何为图形命名或特定标签并将传递返回给类GetDataset(),以便我可以开始从聚合创建的假设 self.models.specific_figure.featurelist

0 投票
1 回答
1256 浏览

python - Python Flask Flasgger (Swagger) webargs - HTTP PUT 正文中的字符串列表

我使用flask、flasgger(由yml文件定义的swagger)和webargs创建了一个python web API:


put_community_sets.yml:


作为测试,我运行我的烧瓶应用程序并发送 HTTP PUT-

标头 = 内容类型,应用程序/json

正文 = [“test1”、“test2”、“test3”]

我得到:422 Unprocessable Entity 该请求格式正确,但由于语义错误而无法遵循。

我猜测 yml 文件中的 swagger 定义、@use_kwargs 参数或我的测试 PUT 有问题。

0 投票
2 回答
1574 浏览

python - Python 中的 webargs / Marshmallow 可以修改字段,而不仅仅是验证它吗?

我将 Flask 与 flask-restful 和webargs 一起使用(它使用Marshmallow作为其后端)。目前,我可以通过以下方式提取我想要的字段:

到目前为止,一切都很好。但我真正想做的是确保args['name']在各种方法(“post”、“get”等)中已经去除了空格,所以我不必每次都手动处理每个变量。(去除空白只是一个例子——它可能是其他一些简单或复杂的转换)

有没有办法(通过覆盖 String 字段、定义我自己的字段或其他方式)允许args在它们到达类方法之前进行预处理?

0 投票
1 回答
1702 浏览

python - 使用 Flask 的 url_for 在 URL 中生成列表

我正在使用 webargs 从request.argsMarshmallow 中解析参数并将它们作为参数传递给 Flask 视图。我的客户使用逗号分隔的列表来表示一个键的多个值:

为了解析这个,我使用 Marshmallow 的DelimitedList字段。

但是,如果我使用 Flask's 生成 URL url_for,它会为每个值生成重复的键:

DelimitedList字段解析它只会捕获第一个值。更改为List正确的字段会再次捕获值。所以要么我的 Flask URL 失败,要么我的客户端 URL 失败。

我无法更改客户端生成 URL 的方式,所以我想坚持使用DelimitedField. 我怎样才能url_for生成相同的样式?

0 投票
1 回答
9169 浏览

python - flask-marshmallow:仅当方法为 PUT 时如何将所有字段标记为可选

我正在制作一个烧瓶 restful api,我遇到的问题是 marshmallow-sqlalchemy 和 webargs

简而言之,这是我的 sqlalchemy 模型:

这是我的架构

以及我使用 flask-classful 和 webargs 的路线示例:

问题: 正如您在我的 sqlalchemy 模型中看到的,某些字段不可为空,因此我的 marshmallow schemda 将它们标记为必需。我getindex,deletepost方法都可以完美运行。但我将帖子包括在内有一个原因:

例如,当我尝试发布一个没有姓名的新用户时,会引发一个 422 http 代码,因为name该字段是必需的,这是我想要的,并且做得很完美。

但是当使用请求编辑字段时put,我希望我的架构中的所有内容都成为可选的.. 现在如果我想更新用户,我不仅必须提供 id.. 而且默认情况下需要的所有其他信息,即使我没有改变他们在所有。

简而言之,当方法为“put”时,如何将所有字段标记为“可选”?

编辑:就像@Mekicha 提供的解决方案一样,我做了以下更改:

更改架构以使我的模型中的必填字段接受值无。像这样:

从此更改我的 put 和 post 方法条件:

对此:

0 投票
1 回答
2654 浏览

python - 使用 Webargs Flaskparser 验证 URL 路径和查询参数中的变量参数

我正在尝试验证发送到我的 api 的所有数据。我的 url 结构中包含一个变量/api/v2/users/<string:username>/collections/,以及实际的查询字符串参数,所有这些都需要通过验证。

完整的网址如下所示: https://127.0.0.1:5000/api/v2/users/<string:username>/collections/?page=5&per_page=10

需要验证的两个变量是:username pageper_page。简单的解决方案是更改我的 url 结构,但我想知道是否有可能完成我所需要的并保持我目前拥有的简单性,而无需在我的资源类中添加额外的验证。如果有可能,你是怎么做到的?

当我运行代码时,我收到一个验证错误,username因为它在 args 中不存在。