是否有办法从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模板来构建你想要的东西。您可以传入任何数据模型并在模板中引用它。