我是来自 Typescript 背景的 Python 新手。组合 Flask API 服务器并使用 Marshmallow 验证输入 DTO。
如何让 VSCode 从 Marshmallow Schema 加载中推断类型?
class PostInput:
myString = fields.Str(
required=True
)
@app.route('/foo', methods=['POST'])
def post_foo():
try:
data = PostInput().load(request.json)
except ValidationError as err:
return jsonify(err.messages), 400
myString = data.get("myString")
myString <== I want this to be known as a str
为 dict 键添加输入提示:
from marshmallow import fields, Schema
class PostInput(Schema):
myString = fields.Str(
required=True
)
json = '{"myString": "hello"}'
data = PostInput().loads(json, many=False)
myString:str = data.get("myString")
或将数据序列化到数据类中:
from marshmallow import fields, Schema, post_load
from dataclasses import dataclass
@dataclass
class InputClass:
myString: str
class PostInput(Schema):
myString = fields.Str(
required=True
)
@post_load
def make_user(self, data, **kwargs) -> InputClass:
return InputClass(**data)
json = '{"myString": "hello"}'
data: InputClass = PostInput().loads(json, many=False)
myString = data.myString
我建议使用 pydantic 进行验证和加载 json。它既验证数据又创建像继承属性类型的数据类一样的东西:
from pydantic import BaseModel, Field
class PostInput(BaseModel):
myString: str = Field(required=True)
json = '{"myString": "hello"}'
data = PostInput.model_validate_json(json)
myString = data.myString