FastAPI Flashcards
Как создать проект с FastAPI?
pip install fastapi “uvicorn[standard]”
main.py
from fastapi import FastAPI
app = FastAPI()
@app.get(“/”)
def hello_endpoint():
return {
“message”: “Hello!!!”,
}
Запуск
uvicorn main:app
Какая есть встроенная генерация есть в FastAPI?
/redoc
/docs
Как сделать автоматический перезапуск при сохранении?
if __name__ == “__main__”:
uvicorn.ru(“main:app”, reload=True)
# Автозапуск работает, когда мы не завязаны на файл. <модуль>:<объект></объект></модуль>
Как сделать path параметризируемым и сразу добавить валидацию его типа?
@app.get(“/items/{item_id}/”)
def get_item_by_id(item_id: int):
return {
“item”: {
“id”: item_id,
}
}
Как сделать post запрос с валидацией email?
from fastapi import Body
from pydantic import EmailStr
@app.post(“/users/”)
def create_user(email: EmailStr = Body()):
return {
“message”: “success”,
“email”: email
}
Как работать с json в body?
from pydantic import BaseModel
class CreateUser(BaseModel):
email: EmailStr
@app.post(“/users/”)
def crate_user(user: CreateUser):
return {
“message”: “success”,
“email”: user.email
}
Как скомбинировать различные правила для валидации поля?
старый подход
from fastapi import Path
def get_item_by_id(item_id: int = Path(…, gt=0))
# … - указание, что объект обязательный
# gt=0 - больше 0
from typing import Annotated
from fastapi import Path
@app.get(“/items/{item_id}/”)
def get_item_by_id(item_id: Annotated[int, Path(ge=1, lt=1_000_000)]):
return {
“item”: {
“id”: item_id,
}
}
Как создать и добавить APIRouter?
В отдельном файле
from fastapi import APIRouter
router = APIRouter(prefix=”/items”, tags=[“Items”]) # tags позволяют создать группу в swagger
@router.get(“/”)
def list_items():
…
В основном файле
from <package> import router as items_router
app = FastAPI()
app.inclue_router(items_router) # Можно как параметр переопределить prefix=""</package>
Для чего нужны views, schemas, crud?
views - описание API
schemas - классы, которые используются в API
crud - выполнения бизнес логики и уроках было обращение в БД
Для чего нужны annotated types?
Используются для валидации нескольких условий
from typing import Annotated
from annotated_types import MinLen, MaxLen
from pydantic import Field, BaseModel
class CreateUser(BaseModel):
# Старый подход
# username: str = Field(…, min_length=3, max_length=20)
username: Annotated[str, MinLen(3), MaxLen(20)]