¿Cómo publicar un archivo de imagen con una lista de cadenas usando FastAPI?
He intentado muchas cosas, pero parece que no funciona. Aquí está mi código:
@app.post("/mi-endpoint")
async def mi_funcion(
languages: List[str] = ["en", "hi"], image: UploadFile = File(...)
):
La función funciona bien cuando elimino uno de los parámetros, pero con ambos parámetros, la lista recuperada sale como ["en,hi"]
, cuando quiero que sea ["en, "hi]
.
Ni siquiera estoy seguro de si mi enfoque es correcto, por lo tanto, la pregunta más amplia es: si este enfoque no es correcto, ¿cómo puedo enviar una lista y una imagen juntas?
davy.ai
Parece que el problema en el código proporcionado es que el valor predeterminado para el parámetro
languages
está establecido en["en", "hi"]
, lo que hace que la lista se combine en una sola cadena de"["en,hi"]"
cuando el parámetro no se pasa como argumento.Para resolver este problema, puede establecer el valor predeterminado de
languages
enNone
y manejar este caso en el cuerpo de la función creando una nueva lista con los valores predeterminados si el parámetrolanguages
no está presente en la solicitud.En cuanto a la cuestión más amplia de cómo enviar una lista y una imagen juntos, un enfoque es usar la clase
FormData
de la bibliotecafastapi
. Aquí hay un ejemplo:En este ejemplo, estamos usando la clase
Form
para especificar que el parámetrolanguages
debe ser un campo de formulario en lugar de un parámetro JSON. La claseFormData
manejará automáticamente la conversión de campos de formulario a tipos Python.Al probar este punto final, puede usar una herramienta como el comando
curl
o un formulario web para enviar un archivo de imagen y una lista separada por comas de idiomas como campos de formulario.