如何从pydantic模型自动创建html表单?



是否有办法从pydantic模型创建Html表单?

让我们从一个简单的例子开始。我有一个模型User:

from pydantic import BaseModel
class User(BaseModel):
id: int
name: str = 'Jane Doe'

和一些将User模型转换为以下形式的神奇函数:

<form>
<label for="id">ID:</label><br>
<input type="number" id="id" name="id"><br>
<label for="name">Name:</label><br>
<input type="text" id="name" name="name">
</form>

当然,这可以是任意复杂的,例如当你的模型有List时,它可能是一个下拉选择字段。

所以我很感兴趣,如果这在某种程度上已经可能了?我将在FastAPI的上下文中使用它。

您可以从Pydantic的模式输出生成表单。有几个选择,jsonforms似乎是最好的。

首先从你的模型生成json模式:

from pydantic import BaseModel, Field
class MyClass(BaseModel):
name: str 
# ... etc... 
json_schema = MyClass.schema() 

这个输出:

# -> {'title': 'MyClass', 'type': 'object', 'properties': {'name': {'title': 
# -> 'Name', #'type': 'string'}}, 'required': ["name"]}

你可以使用这个输出来自动创建一个jsonforms表单(参见主页上的例子)它可以很好地处理嵌套列表和对象,并且在前端有很多验证选项

对于一个更后端的解决方案,你可以使用像django forms这样的东西,并且有一个库用于使用jsonforms django-jsonforms它提供了一个JSONSchemaField,可以像这样使用:

class CustomForm(Form):    
first_name = JSONSchemaField(schema = schema_from_above)

这可以用于模板引擎,如Jinja的另一个答案指出…

您正在寻找一个模板引擎。一个很流行的是Jinja。

FastAPI文档中还有一整章是关于使用Jinja模板的。

这允许你指定包含python语法的html模板来构建你想要的东西。您可以传入任何数据模型并在模板中引用它。

相关内容

  • 没有找到相关文章