DokumentasiPenangan dan kesalahan
Ketergantungan dan penjaga
Bagikan autentikasi, sesi database, dan pengaturan lainnya di seluruh rute dengan dependensi FastAPI. Mereka bekerja pada dua tingkat, dan tingkat direktori diwarisi seperti tata letak.
| Level | Dimana | Berlaku untuk |
|---|---|---|
| Direktori | dependencies.py |
setiap rute dalam direktori dan di bawahnya, termasuk halaman |
| Penangan | Depends, @UseGuard, @Middleware |
satu penangan |
Per direktori: dependencies.py
A dependencies.py mendeklarasikan dependencies daftar fungsi biasa. Nexy membungkus masing-masing di 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]Setiap rute di bawah src/routes/admin/ sekarang memerlukan header, penangan .py, dan halaman .nexy.
Warisan
Dependensi dikumpulkan dari root rute hingga ke direktori rute, terluar terlebih dahulu, persis seperti tata letak, dan penjaga handler dijalankan terakhir:
Untuk GET /admin/users urutannya adalah root, admin, users, fungsi @UseGuard dari handler, fungsi @Middleware-nya, lalu handlernya. Grup rute ((group)/) adalah direktori seperti direktori lainnya, jadi dependencies.py-nya ikut ambil bagian.
Per pawang
Gunakan Depends di tanda tangan, seperti di aplikasi FastAPI mana pun:
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}Penjaga dan middleware pada handler
@UseGuard dan @Middleware melampirkan dependensi FastAPI ke handler tanpa mengubah tanda tangannya. Keduanya merupakan dependensi, bukan 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}Untuk middleware ASGI yang sebenarnya (CORS, GZip, sesi, milik Anda sendiri) gunakan opsi useMiddlewares dan use* di Middleware dan keamanan.
Gagal dalam ketergantungan
Ketergantungan menolak permintaan dengan menaikkan. HTTPException menjawab dengan status yang Anda naikkan, sebagai JSON untuk klien API (Accept: application/json) dan sebagai halaman kesalahan untuk browser. Lihat Validasi dan kesalahan.