如何使用 Flask-Marshmallow 处理文件上传验证?
How to handle file upload validations using Flask-Marshmallow?
我正在与 Flask-Marshmallow
合作,以验证 Flask app
中的 request
和 response
模式。当存在 Int
、Str
、Float
等简单字段时,我能够对 request.form
和 request.args
进行简单验证
我有一个案例需要使用表单字段上传文件 - file_field
。它应该包含文件内容。
如何验证此字段是否存在以及文件格式是什么等
Marshmallow
中是否有我可以像 fields.Int()
或 fields.Str()
这样使用的字段
我已经阅读了文档 here 但没有找到任何此类字段。
您可以使用 fields.Raw
:
import marshmallow
class CustomSchema(marshmallow.Schema):
file = marshmallow.fields.Raw(type='file')
如果您使用的是 Swagger,您会看到类似这样的内容:
然后在您的view
中您可以使用flask.request.files
访问文件内容。
有关完整示例和更高级的主题,请查看我的 project。
您可以使用 Field
或 Raw
字段来表示一般字段,然后为该字段设置正确的 OpenAPI 属性(即 type
和 format
) .
在 OpenAPI 3 中,您应该将 type
设置为 string
而不是 file
,然后将 format
设置为 binary
或 byte
根据您的文件内容:
from marshmallow import Schema, fields
class MySchema(Schema):
file = fields.Raw(metadata={'type': 'string', 'format': 'binary'})
有关详细信息,请参阅 docs。
顺便说一句,从 marshmallow 3.10.0 开始,使用关键字参数传递 OpenAPI 属性(description
、type
、example
等)已被弃用,并将在marshmallow 4,使用 metadata
字典来传递它们。
我正在与 Flask-Marshmallow
合作,以验证 Flask app
中的 request
和 response
模式。当存在 Int
、Str
、Float
等简单字段时,我能够对 request.form
和 request.args
进行简单验证
我有一个案例需要使用表单字段上传文件 - file_field
。它应该包含文件内容。
如何验证此字段是否存在以及文件格式是什么等
Marshmallow
中是否有我可以像 fields.Int()
或 fields.Str()
我已经阅读了文档 here 但没有找到任何此类字段。
您可以使用 fields.Raw
:
import marshmallow
class CustomSchema(marshmallow.Schema):
file = marshmallow.fields.Raw(type='file')
如果您使用的是 Swagger,您会看到类似这样的内容:
然后在您的view
中您可以使用flask.request.files
访问文件内容。
有关完整示例和更高级的主题,请查看我的 project。
您可以使用 Field
或 Raw
字段来表示一般字段,然后为该字段设置正确的 OpenAPI 属性(即 type
和 format
) .
在 OpenAPI 3 中,您应该将 type
设置为 string
而不是 file
,然后将 format
设置为 binary
或 byte
根据您的文件内容:
from marshmallow import Schema, fields
class MySchema(Schema):
file = fields.Raw(metadata={'type': 'string', 'format': 'binary'})
有关详细信息,请参阅 docs。
顺便说一句,从 marshmallow 3.10.0 开始,使用关键字参数传递 OpenAPI 属性(description
、type
、example
等)已被弃用,并将在marshmallow 4,使用 metadata
字典来传递它们。