Конфигурация / Зависимость с использованием многофайлового приложения в FastAPI - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь выяснить, как сделать конфигурацию / синглтон доступным для другого модуля. Возможно, есть стандартный Python способ сделать это, которого я пока не знаю. Поэтому я создаю конфигурационный синглтон, который имеет все конфигурации приложения и хочу «поделиться» со всеми модулями. Тот же вариант использования будет применяться для совместного использования подключения к БД.

main.py

app = FastApi()
config = some_config_object_from_somewhere()

app.include_router(
        collection.router,
        prefix='/api/collection'
    )

api / collection.py

router = APIRouter()
@router.post("/", status_code=201)
async def collect():
    # I want to use config that is created/defined in main.py
    # HOW?  I thought dependency injection that is built into FastAPI would
    # help, but can't seem to define something in a different module and have it
    # available in the 'router' module

1 Ответ

1 голос
/ 24 марта 2020

В целом, относительно структуры проекта, базовая c структура приложения FastAPI такая же, как Flask, см. здесь :

Это время начать кодирование! Создайте каталог flaskr и добавьте файл __init__.py. __init__.py выполняет двойную функцию: он содержит фабрику приложений и сообщает Python, что каталог flaskr следует рассматривать как пакет

FastAPI (а также Flask и другие функции -style Framework) определяет доступ к базе данных в терминах функций, использующих сеансы, см. здесь .

Ниже на этой странице документации:

# Dependency
def get_db():
    try:
        db = SessionLocal()
        yield db
    finally:
        db.close()


@app.post("/users/", response_model=schemas.User)
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):  # <<< injected here
    db_user = crud.get_user_by_email(db, email=user.email)
    if db_user:
        raise HTTPException(status_code=400, detail="Email already registered")
    return crud.create_user(db=db, user=user)
...