FastAPI使用Form Data时如何将OpenAPI输入框设置为大尺寸textarea?
实现方案
你可以通过给Form字段添加额外的OpenAPI Schema配置,让FastAPI默认的Swagger UI文档将对应参数的输入控件渲染为多行textarea,具体实现分两种场景:
场景1:直接通过Form定义参数
在Form参数中添加openapi_extra配置,指定字符串格式为textarea即可:
from fastapi import FastAPI, Form from typing import Annotated app = FastAPI() @app.post("/submit") async def submit( long_content: Annotated[str, Form( openapi_extra={ "schema": { "type": "string", "format": "textarea" } } )] ): return {"content": long_content}
场景2:通过Pydantic模型接收Form数据
如果使用Pydantic模型统一管理Form参数,可以在对应字段的Field配置中添加json_schema_extra配置:
from fastapi import FastAPI, Form, Depends from pydantic import BaseModel, Field app = FastAPI() class ContentForm(BaseModel): long_content: str = Field( ..., description="长文本输入字段", json_schema_extra={"format": "textarea"} ) # FastAPI 0.110以下版本需要手动实现as_form方法,0.110+版本及以上可省略该方法,直接声明form_data: ContentForm = Form()即可 @classmethod def as_form(cls, long_content: str = Form(...)): return cls(long_content=long_content) @app.post("/submit") async def submit(form_data: ContentForm = Depends(ContentForm.as_form)): return {"content": form_data.long_content}
调整前的单行输入框样式如下:
配置完成后会自动替换为高度更大的多行textarea,支持输入长文本内容。
注意:该配置仅修改OpenAPI文档的控件展示样式,不会影响接口本身的参数接收逻辑,接口依然可以正常接收Form格式的字符串参数。
内容的提问来源于stack exchange,提问作者Mohamad Aiman
相关产品推荐
相关产品推荐

