FastAPI Flashcards

1
Q

Как создать проект с FastAPI?

A

pip install fastapi “uvicorn[standard]”

main.py
from fastapi import FastAPI

app = FastAPI()

@app.get(“/”)
def hello_endpoint():
return {
“message”: “Hello!!!”,
}

Запуск
uvicorn main:app

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Какая есть встроенная генерация есть в FastAPI?

A

/redoc
/docs

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Как сделать автоматический перезапуск при сохранении?

A

if __name__ == “__main__”:
uvicorn.ru(“main:app”, reload=True)
# Автозапуск работает, когда мы не завязаны на файл. <модуль>:<объект></объект></модуль>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Как сделать path параметризируемым и сразу добавить валидацию его типа?

A

@app.get(“/items/{item_id}/”)
def get_item_by_id(item_id: int):
return {
“item”: {
“id”: item_id,
}
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Как сделать post запрос с валидацией email?

A

from fastapi import Body
from pydantic import EmailStr

@app.post(“/users/”)
def create_user(email: EmailStr = Body()):
return {
“message”: “success”,
“email”: email
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Как работать с json в body?

A

from pydantic import BaseModel

class CreateUser(BaseModel):
email: EmailStr

@app.post(“/users/”)
def crate_user(user: CreateUser):
return {
“message”: “success”,
“email”: user.email
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Как скомбинировать различные правила для валидации поля?

A

старый подход
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,
}
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Как создать и добавить APIRouter?

A

В отдельном файле
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>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Для чего нужны views, schemas, crud?

A

views - описание API
schemas - классы, которые используются в API
crud - выполнения бизнес логики и уроках было обращение в БД

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Для чего нужны annotated types?

A

Используются для валидации нескольких условий
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)]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly