Menu
CoddyTech

سلاسل الاستعلام

جزء من قسم أساسيات Django في رحلة Django على Coddy. الدرس 8 من 23.

تعرض صفحة الطلب دائمًا الحجم المتوسط. يمكن أن ينتقل الحجم الذي يختاره العميل في العنوان، بعد علامة استفهام: /order/?size=large.

هذا الجزء هو سلسلة الاستعلام: أزواج name=value موصولة بـ &. وهي ليست جزءًا من المسار، لذا فإن path("search/", ...) يطابق أيضًا /search/?q=cake. يقرأ العرض الأزواج من request.GET، الذي يعمل مثل القاموس:

def search(request):
    word = request.GET.get("q", "")
    if len(word) > 30:
        word = word[:30]
    return HttpResponse(f"Results for {word}")

تأخذ .get() قيمة افتراضية عند غياب الاسم؛ أما request.GET["q"] فسيؤدي إلى خطأ بدلًا من ذلك. تصل كل قيمة كنص، ويمكن لأي شخص كتابة أي شيء بعد ?، لذا تحقّق من القيمة قبل استخدامها. لقبول بعض القيم فقط، قارن القيمة بقائمة القيم المسموح بها واستخدم قيمة افتراضية لأي قيمة أخرى.

challenge icon

التحدي

سهل

اجعل صفحة الطلب تقرأ الحجم من العنوان.

  1. في العرض order، اقرأ size من request.GET حتى لا يتسبب غياب الحجم في حدوث خطأ.
  2. عند استخدام ?size=large، أعد You ordered a large coffee. أدرج الحجم في الجملة، كي يعمل الخياران small وmedium أيضًا.
  3. أي حجم آخر، أو عدم تحديد حجم، يعني طلب حجم متوسط.

افتح /order/?size=huge: سترى You ordered a medium coffee.

جرّب بنفسك

from django.http import HttpResponse

DRINKS = {
    "espresso": {"name": "Espresso", "price": 2.5, "description": "A short, strong shot of coffee."},
    "latte": {"name": "Latte", "price": 3.5, "description": "Espresso with lots of steamed milk."},
    "flat-white": {"name": "Flat White", "price": 3.75, "description": "Espresso with a thin layer of silky milk."},
    "hot-chocolate": {"name": "Hot Chocolate", "price": 3, "description": "Dark chocolate melted into warm milk."},
}


def home(request):
    return HttpResponse("<h1>Welcome to Corner Café</h1><p>Fresh coffee and cake every day.</p>")


def about(request):
    return HttpResponse("Corner Café opened in 2026.")


def hours(request):
    return HttpResponse("Open every day from 8:00 to 18:00.")


def contact(request):
    return HttpResponse("Write to us at hello@cornercafe.example.")


def table(request, number):
    return HttpResponse(f"<h1>Table {number}</h1>")


def drink(request, slug):
    item = DRINKS[slug]
    return HttpResponse(f"<h1>{item['name']}</h1><p>{item['description']}</p>")


def order(request):
    size = "medium"
    return HttpResponse(f"You ordered a {size} coffee.")

جميع دروس أساسيات Django

تدرّب بنفسك: Playground لـ Django