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.
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:
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:
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:
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.