栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

fastapi表单数据与pytantic模型

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

fastapi表单数据与pytantic模型

我找到了一个可以帮助我们将FastAPI表单也用作pydantic的解决方案:)
我的代码:

class AnyForm(baseModel):    any_param: str    any_other_param: int = 1    @classmethod    def as_form(        cls,        any_param: str = Form(...),        any_other_param: int = Form(1)    ) -> AnyForm:        return cls(any_param=any_param, any_other_param=any_other_param)@router.post('')async def any_view(form_data: AnyForm = Depends(AnyForm.as_form)):        ...

它以
我通常认为的形式大张旗鼓地显示,可以写得更通用,也许我会返回并编辑答案。

[更新]

我已经把它写成装饰器了

import inspectfrom typing import Typefrom fastapi import Formfrom pydantic import baseModelfrom pydantic.fields import ModelFielddef as_form(cls: Type[baseModel]):    new_parameters = []    for field_name, model_field in cls.__fields__.items():        model_field: ModelField  # type: ignore        if not model_field.required: new_parameters.append(     inspect.Parameter(         model_field.alias,         inspect.Parameter.POSITIONAL_ONLY,         default=Form(model_field.default),         annotation=model_field.outer_type_,     ) )        else: new_parameters.append(     inspect.Parameter(         model_field.alias,         inspect.Parameter.POSITIONAL_ONLY,         default=Form(...),         annotation=model_field.outer_type_,     ) )    async def as_form_func(**data):        return cls(**data)    sig = inspect.signature(as_form_func)    sig = sig.replace(parameters=new_parameters)    as_form_func.__signature__ = sig  # type: ignore    setattr(cls, 'as_form', as_form_func)    return cls

用法看起来像

class Test1(baseModel):    a: str    b: int@as_formclass Test(baseModel):    param: str    test: List[Test1]    test1: Test1    b: int = 1    a: str = '2342'@router.post('/me', response_model=Test)async def me(request: Request, form: Test = Depends(Test.as_form)):    return form


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/645754.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号