0Pricing
Python Academy · درس

معاملات المسار ومعاملات الاستعلام وأجسام الطلبات

عرّف المعاملات ذات الأنواع ومخططات أجسام الطلبات باستخدام 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إعداد مشروع FastAPI ونقطة النهاية الأولى
  2. معاملات المسار ومعاملات الاستعلام وأجسام الطلبات
  3. حقن الاعتماديات والمصادقة
  4. نقاط النهاية غير المتزامنة وتكامل قواعد البيانات
← العودة إلى Python Academy