سلاسل الاستعلام
جزء من قسم أساسيات 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"] فسيؤدي إلى خطأ بدلًا من ذلك. تصل كل قيمة كنص، ويمكن لأي شخص كتابة أي شيء بعد ?، لذا تحقّق من القيمة قبل استخدامها. لقبول بعض القيم فقط، قارن القيمة بقائمة القيم المسموح بها واستخدم قيمة افتراضية لأي قيمة أخرى.
التحدي
سهلاجعل صفحة الطلب تقرأ الحجم من العنوان.
- في العرض
order، اقرأsizeمنrequest.GETحتى لا يتسبب غياب الحجم في حدوث خطأ. - عند استخدام
?size=large، أعدYou ordered a large coffee.أدرج الحجم في الجملة، كي يعمل الخيارانsmallوmediumأيضًا. - أي حجم آخر، أو عدم تحديد حجم، يعني طلب حجم متوسط.
افتح /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