الوثائقالمعالجات والأخطاء
التبعيات والحراس
مشاركة المصادقة وجلسات قاعدة البيانات والإعدادات الأخرى عبر المسارات باستخدام تبعيات FastAPI. وهي تعمل على مستويين، ويتم توريث مستوى الدليل مثل التخطيطات.
| المستوى | حيث ينطبق | على |
|---|---|---|
| الدليل | dependencies.py |
كل طريق في الدليل وما دونه، الصفحات المتضمنة |
| معالج | Depends، @UseGuard، @Middleware |
معالج واحد |
لكل دليل: dependencies.py
يعلن dependencies.py عن قائمة dependencies من الوظائف البسيطة. Nexy يلف كل واحد في 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]يتطلب كل مسار ضمن src/routes/admin/ الآن الرأس ومعالجات .py والصفحات .nexy على حدٍ سواء.
الميراث
يتم جمع التبعيات من جذر المسارات وصولاً إلى دليل المسار، الأبعد أولاً، تمامًا مثل التخطيطات، ويتم تشغيل حراس المعالج أخيرًا:
بالنسبة لـ GET /admin/users الترتيب هو root، admin، users، وظائف المعالج @UseGuard، وظائفه @Middleware، ثم المعالج. مجموعة المسار ((group)/) هي دليل مثل أي دليل آخر، لذلك يشارك dependencies.py فيه.
لكل معالج
استخدم Depends في التوقيع، كما هو الحال في أي تطبيق 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}الحراس والوسيطة على معالج
@UseGuard و @Middleware يربطان FastAPI تبعيات بالمعالج دون تغيير توقيعه. كلاهما تبعيات، وليست برمجيات 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}بالنسبة للبرامج الوسيطة الحقيقية لـ ASGI (CORS وGZip والجلسات الخاصة بك) استخدم useMiddlewares وخيارات use* في البرامج الوسيطة والأمان.
فشل التبعية
التبعية ترفض الطلب عن طريق الرفع. HTTPException يجيب بالحالة التي قمت بإثارتها، مثل JSON لعملاء API (Accept: application/json) وكصفحة خطأ للمتصفحات. انظر التصديق والأخطاء.