DocsManipuladores e erros

Dependências e guardas

Compartilhe autenticação, sessões de banco de dados e outras configurações entre rotas com dependências FastAPI. Eles funcionam em dois níveis, e o nível do diretório é herdado como layouts.

Nível Onde se aplica a
Diretório dependencies.py todas as rotas no diretório e abaixo, páginas incluídas
Manipulador Depends, @UseGuard, @Middleware um manipulador

Por diretório: dependencies.py

Um dependencies.py declara uma lista dependencies de funções simples. Nexy envolve cada um em Depends.

src/routes/admin/dependencies.py
from nexy.http import Header, HTTPException  def require_admin(x_role: str = Header(...)) -> None:    if x_role != "admin":        raise HTTPException(status_code=403, detail="Admins only")  dependencies = [require_admin]

Cada rota em src/routes/admin/ agora requer o cabeçalho, .py manipuladores e .nexy páginas semelhantes.

Herança

As dependências são coletadas da raiz das rotas até o diretório da rota, mais externo primeiro, exatamente como os layouts, e os próprios guardas do manipulador são executados por último:

src/routes/
dependencies.py1. root
admin/
dependencies.py2. admin
users/
dependencies.py3. users
index.py4. handler guards, then the handler

Para GET /admin/users a ordem é root, admin, users, as funções @UseGuard do manipulador, suas funções @Middleware e depois o manipulador. Um grupo de rotas ((group)/) é um diretório como qualquer outro, então seu dependencies.py faz parte.

Por manipulador

Use Depends na assinatura, como em qualquer aplicativo FastAPI:

src/rotas/api/me.py
from nexy.http import Depends, Header, HTTPException  def current_user(authorization: str = Header(...)) -> str:    if authorization != "Bearer secret":        raise HTTPException(status_code=401, detail="Unauthorized")    return "ada"  async def GET(user: str = Depends(current_user)):    return {"user": user}

Guardas e middleware em um manipulador

@UseGuard e @Middleware anexam FastAPI dependências a um manipulador sem alterar sua assinatura. Ambos são dependências, não middleware ASGI:

src/routes/admin/users/index.py
from nexy.decorators import Middleware, UseGuard  def audit() -> None: ...  def must_be_staff(x_staff: str = Header(...)) -> None: ...  @UseGuard(must_be_staff)@Middleware(audit)async def GET():    return {"ok": True}

Para middleware ASGI real (CORS, GZip, sessões, suas próprias) use useMiddlewares e as opções use* em Middleware e segurança.

Falhando em uma dependência

Uma dependência rejeita uma solicitação aumentando. HTTPException responde com o status que você levantou, como JSON para clientes API (Accept: application/json) e como página de erro para navegadores. Consulte Validação e erros.

Próximas etapas

Editar no GitHub

Enter abre o resultado, Esc fecha.