معاملات المسار ومعاملات الاستعلام وأجسام الطلبات
عرّف المعاملات ذات الأنواع ومخططات أجسام الطلبات باستخدام Pydantic
معاملات المسار ومعاملات الاستعلام وأجسام الطلبات درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
التحقق من معاملات المسار
أضف أدوات التحقق إلى معاملات المسار باستخدام Path()، وحدّد القيود ge وle وgt وlt.
from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/items/{item_id}")
def get_item(item_id: int = Path(ge=1, le=1000)):
return {"item_id": item_id}
# GET /items/0 → 422 (must be >= 1)التحقق من معاملات الاستعلام
استخدم Query() لإضافة التحقق والقيم الافتراضية والأسماء البديلة والأوصاف إلى معاملات الاستعلام.
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/search")
def search(
q: str = Query(min_length=2, max_length=50),
page: int = Query(default=1, ge=1),
):
return {"q": q, "page": page}معاملات الاستعلام الاختيارية
استخدم | None = None (في Python 3.10 فأحدث) أو Optional[str] = None لجعل معامل الاستعلام اختياريًا.
from fastapi import FastAPI
app = FastAPI()
@app.get("/users")
def list_users(
dept: str | None = None,
active: bool = True
):
return {"dept": dept, "active": active}
# GET /users → dept=None, active=True
# GET /users?dept=HR&active=falseقيم متعددة لمعامل استعلام واحد
اقبل قائمة من القيم لمعامل استعلام واحد باستخدام list[str] وQuery().
from fastapi import FastAPI, Query
from typing import Annotated
app = FastAPI()
@app.get("/filter")
def filter_items(tags: Annotated[list[str], Query()] = []):
return {"tags": tags}
# GET /filter?tags=python&tags=webأجسام الطلبات المتداخلة
يمكن تداخل نماذج Pydantic. وتتعامل FastAPI مع JSON المتداخل تلقائيًا.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Address(BaseModel):
street: str
city: str
class User(BaseModel):
name: str
address: Address
@app.post("/users")
def create_user(user: User):
return user.model_dump()قيود الحقول في Pydantic
استخدم Field() داخل نموذج لإضافة قيود وقيم افتراضية وأوصاف إلى الحقول الفردية.
from pydantic import BaseModel, Field
class Product(BaseModel):
name: str = Field(min_length=1, max_length=100)
price: float = Field(gt=0)
quantity: int = Field(ge=0, default=0, description="Items in stock")جسم الطلب والمسار والاستعلام معًا
يمكنك دمج أنواع المعاملات الثلاثة في نقطة نهاية واحدة. تميّز FastAPI بينها حسب موضعها: المسار في عنوان URL، والأنواع البسيطة كاستعلام، والنماذج كجسم.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class ItemUpdate(BaseModel):
name: str
price: float
@app.put("/shops/{shop_id}/items/{item_id}")
def update_item(
shop_id: int,
item_id: int,
item: ItemUpdate,
notify: bool = False,
):
return {"shop": shop_id, "item": item_id,
"data": item.model_dump(), "notify": notify}تحميل الملفات
استخدم UploadFile وFile() لقبول تحميلات الملفات. ويمكنك الوصول إلى المحتوى باستخدام await file.read().
from fastapi import FastAPI, UploadFile, File
app = FastAPI()
@app.post("/upload")
async def upload(file: UploadFile = File(...)):
content = await file.read()
return {"filename": file.filename, "size": len(content)}بيانات النموذج
استخدم Form() لقبول بيانات نماذج HTML (application/x-www-form-urlencoded أو multipart/form-data).
# pip install python-multipart
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login")
def login(username: str = Form(...), password: str = Form(...)):
return {"username": username}ملخص التحقق من الطلبات
تتحقق FastAPI تلقائيًا من جميع أنواع المعاملات. وتُرجع المدخلات غير الصالحة HTTP 422 مع خطأ مفصل قبل استدعاء المعالج.
# Auto-validated:
# - Path params: type coercion, Path() constraints
# - Query params: Query() constraints, type coercion
# - Request body: Pydantic model validation
# - All errors → HTTP 422 Unprocessable Entity
# - No manual validation neededالاسم البديل والإهمال
استخدم alias= في Query() أو Field() لقبول اسم مختلف في الطلب، واستخدم deprecated=True لوضع علامة على المعاملات القديمة.
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items")
def get_items(
q: str | None = Query(default=None, alias="search-query"),
old: str | None = Query(default=None, deprecated=True),
):
return {"q": q, "old": old}
# GET /items?search-query=pythonتحقق سريع
كيف تميّز FastAPI بين معامل المسار ومعامل الاستعلام وجسم الطلب؟
مراجعة
استخدم Path()/Query() لفرض قيود على المعاملات. وضمّن نماذج Pydantic لإنشاء أجسام معقدة. وادمج معاملات المسار والاستعلام والجسم بحرية. يتعامل UploadFile مع الملفات، بينما يتعامل Form() مع نماذج HTML. وتتحقق FastAPI من كل شيء قبل تشغيل المعالج.
الأسئلة الشائعة
هل درس «معاملات المسار ومعاملات الاستعلام وأجسام الطلبات» مجاني؟
نعم — نص درس «معاملات المسار ومعاملات الاستعلام وأجسام الطلبات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «معاملات المسار ومعاملات الاستعلام وأجسام الطلبات»؟
عرّف المعاملات ذات الأنواع ومخططات أجسام الطلبات باستخدام Pydantic تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «معاملات المسار ومعاملات الاستعلام وأجسام الطلبات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إعداد مشروع FastAPI ونقطة النهاية الأولى
- معاملات المسار ومعاملات الاستعلام وأجسام الطلبات
- حقن الاعتماديات والمصادقة
- نقاط النهاية غير المتزامنة وتكامل قواعد البيانات