Я разработал какое-то приложение FastAPI и хочу настроить его редок-документацию. Ниже приведен код для него:
from fastapi import FastAPI
from typing import Optional
import uvicorn
app = FastAPI()
class User(BaseModel):
username: str
user_list = ["John", "Abrahim", "Kiana"]
#Get method to fetch some value
@app.get('/user/{id}/')
def users(id:int):
return user_list[id]
#Request Bodies
#Post Method
@app.post('/user')
def add_user(request:User):
return request.username
if __name__ == "__main__":
uvicorn.run(app, host = "127.0.0.1",port=8000)
На данный момент я получаю ответ ниже в моей документации по редоку:
Я хочу добавить больше кодов ответов в редок, как показано ниже, а также хочу настроить сообщения для каждого кода. Не знаю, как это сделать, поэтому, пожалуйста, помогите в этом.
200 - OK Everything worked as expected.
400 - Bad Request The request was unacceptable, often due to missing a required parameter.
401 - Unauthorized No valid API key provided.
402 - Request Failed The parameters were valid but the request failed.
403 - Forbidden The API key doesn't have permissions to perform the request.
404 - Not Found The requested resource doesn't exist.
409 - Conflict The request conflicts with another request (perhaps due to using the same idempotent key).
429 - Too Many Requests Too many requests hit the API too quickly. We recommend an exponential backoff of your requests.
500, 502, 503, 504 - Server Errors Something went wrong on Stripe's end. (These are rare.)
Отвечает ли это на ваш вопрос? Как настроить реакцию на ошибку в FastAPI?
Смотрите похожие ответы здесь , а также здесь и здесь
@Helen Поскольку мне нужно добавить несколько кодов состояния и настроить ответное сообщение, не могли бы вы помочь мне добавить несколько куплетов кода в приведенный выше пример?
Прямо из документации:
Вы можете захотеть иметь некоторые предопределенные ответы, которые применимы ко многим операции пути, но вы хотите объединить их с пользовательскими ответами, необходимыми для каждой операции пути.
В этих случаях вы можете использовать технику Python для «распаковки»
dict
с**dict_to_unpack
:json old_dict = { "old key": "old value", "second old key": "second old value", } new_dict = {**old_dict, "new key": "new value"}
Здесь
new_dict
будет содержать все пары ключ-значение изold_dict
плюс новая пара ключ-значение:json { "old key": "old value", "second old key": "second old value", "new key": "new value", }
Вы можете использовать эту технику для повторного использования некоторых предопределенных ответов в вашем операции пути и комбинировать их с дополнительными пользовательскими.
from typing import Union
from fastapi import FastAPI
from fastapi.responses import FileResponse
from pydantic import BaseModel
class Item(BaseModel):
id: str
value: str
responses = {
404: {"description": "Item not found"},
302: {"description": "The item was moved"},
403: {"description": "Not enough privileges"},
}
app = FastAPI()
@app.get(
"/items/{item_id}",
response_model=Item,
responses = {**responses, 200: {"content": {"image/png": {}}}},
)
async def read_item(item_id: str, img: Union[bool, None] = None):
if img:
return FileResponse("image.png", media_type = "image/png")
else:
return {"id": "foo", "value": "there goes my hero"}
спасибо за ответ, мне помогло. Я смог изменить код в соответствии с моим примером. Мне может понадобиться дополнительная помощь в этом. Я поставлю это в отдельный вопрос, если потребуется.
Я могу найти эти измененные ответы в редоке, но я не получаю эти измененные ответы в реальном приложении. Например, я не могу переопределить ответ внутренней ошибки сервера 500.
Объявление дополнительных responses
для появления в документах API не означает, что содержание таких ответов/исключений будет автоматически изменено на те, которые вы указали. Как описано в документации , «... для этих дополнительных ответов вы должны убедиться, что вы возвращаете Response
лайк JSONResponse
напрямую, с вашим кодом состояния и содержанием». Пожалуйста, ознакомьтесь со ссылками, представленными в разделе комментариев выше, а также этот ответ
Можем ли мы отредактировать или удалить панель образцов ответов справа.
Начните здесь: fastapi.tiangolo.com/advanced/additional-responses