Implementé un punto final en FastAPI y lo estoy probando desde Postman. Pero cada vez que envío una solicitud, aparece este error "Hubo un error al analizar el cuerpo", mientras buscaba el error, encontré una solución en algún lugar que necesito tener instalado python-multipart, este paquete ya está instalado pero todavía estoy enfrentando esto error. El siguiente es mi código:
@router.put('/user') def update_user(user_data: dict): from crain.uma import update_user user_id = user_data['id'] update_user(user_id, user_data) return {"message": "DONE"}El punto final, excepto un dictado como este:
user_data = { "username":"admin", "id":"2d06aa3b-c25a-4499-948a-86341ac4adc5", "email":null, "firstName":"admin", "lastName":"admin", "createdTimestamp":1638268009973 },en cartero, cambie a datos raw (actualmente está en form-data ).
luego inserte su carga útil deseada:
{ "username":"admin", "id":"2d06aa3b-c25a-4499-948a-86341ac4adc5", "email":null, "firstName":"admin", "lastName":"admin", "createdTimestamp":1638268009973 }y disparar la solicitud.
Por cierto, cuando dices
El punto final, excepto un dictado como este:
user_data = { "username":"admin", "id":"2d06aa3b-c25a-4499-948a-86341ac4adc5", "email":null, "firstName":"admin", "lastName":"admin", "createdTimestamp":1638268009973 }, en realidad quiere decir que el punto final espera solo la parte del diccionario, porque user_data es simplemente un nombre de variable en su código python, completamente sin relación con ninguna configuración de solicitud.
la razón por la que lo especifico es porque lo escribiste como una key para los form-data de solicitud del cartero (la imagen que subiste)
En resumen, su punto final espera datos JSON , pero su cliente envía form-data su lugar. Por lo tanto, al enviar la solicitud, seleccione datos raw en su lugar.
Además, recomendaría encarecidamente utilizar modelos Pydantic para enviar datos JSON, como se describe en la documentación . Así, puedes hacer uso de la validación de datos que ofrece Pydantic. Incluso puede usar el tipo EmailStr para validar las entradas de correo electrónico (requiere que se instale el validador de correo electrónico , como se describe en la documentación ). Ejemplo a continuación:
from pydantic import BaseModel, EmailStr from datetime import datetime class User(BaseModel): username: str id: str email: EmailStr = None firstName: str lastName: str createdTimestamp: datetime @app.put('/user') def update_user(user_data: User): from crain.uma import update_user user_data = user_data.dict() user_id = user_data['id'] update_user(user_id, user_data) return {"message": "DONE"}La carga útil de JSON debería verse así:
{ "username":"admin", "id":"2d06aa3b-c25a-4499-948a-86341ac4adc5", "email":null, "firstName":"admin", "lastName":"admin", "createdTimestamp":1638268009973 }