كيفية معالجة طلبات HTTP في جانغو

HTTP (بروتوكول نقل النص التشعبي) هو أساس الويب. هو بروتوكول يحدد كيفية تواصل العملاء (مثل متصفحات الويب) والخوادم مع بعضهم البعض لتبادل البيانات.

في Django، تتم معالجة طلبات HTTP من خلال العروض، وهي دوال تتعامل مع الطلبات وتعيد الاستجابات. و لفهم كيفية معالجة طلبات HTTP في Django، من المهم أن يكون لديك فهم أساسي لـ HTTP و كيفية عمله.

HTTP هو بروتوكول الاستجابة للطلب. هذا يعني أن العميل يرسل طلبًا إلى الخادم، ويستجيب الخادم بالإجابة. و يحتوي الطلب على معلومات حول نوع الإجراء الذي يريد العميل القيام به (مثل استرجاع صفحة ويب أو تقديم نموذج)، ويحتوي الرد على البيانات التي طلبها العميل أو بعض المعلومات الأخرى.

تتكون طلبات واستجابات HTTP من عدة أجزاء، بما في ذلك الرأس والنص. يحتوي الرأس على بيانات تعريف حول الطلب أو الاستجابة، مثل طريقة HTTP ( GET وPOST) ونوع المحتوى ومعلومات أخرى. يحتوي الجسم على البيانات الفعلية التي يتم تبادلها.

في Django، تكون العروض مسؤولة عن معالجة طلبات HTTP وإرجاع الاستجابات المناسبة. في هذا الدرس سنر كيفية تحديد العروض وتعيينها إلى عناوين URL، والتعامل مع أنواع مختلفة من الطلبات، والوصول إلى بيانات الطلب وإرسال الردود .

إنشاء مشروع جانغو

للبدء مع Django، ستحتاج إلى إعداد مشروع Django جديد. مشروع Django عبارة عن مجموعة من الإعدادات والملفات والتطبيقات التي تشكل تطبيق ويب كاملاً.

لإنشاء مشروع Django جديد، ستحتاج إلى تثبيت Django على جهازك. يمكنك تثبيت Django باستخدام pip:

pip install django

بمجرد تثبيت Django، يمكنك إنشاء مشروع جديد باستخدام الأمر التالي:

django-admin startproject myproject

سيؤدي هذا إلى إنشاء دليل جديد يسمى “myproject” بالبنية التالية:

myproject/
    manage.py
    myproject/
        __init__.py
        asgi.py
        settings.py
        urls.py
        wsgi.py

يتم استخدام البرنامج النصي “manage.py” لتعيين بيئة Django الصحيحة وتشغيل الأداة المساعدة لسطر الأوامر. كما يحتوي الملف “settings.py” على إعدادات المشروع، مثل إعداد قاعدة البيانات والتطبيقات المثبتة. اما ملف “urls.py” فهو يحدد أنماط عنوان URL للمشروع.

بمجرد إنشاء مشروع Django جديد، يمكنك البدء في إنشاء التطبيقات داخله. التطبيق عبارة عن وحدة قائمة بذاتها من التعليمات البرمجية تؤدي وظيفة محددة ضمن مشروع Django. يمكنك إنشاء تطبيق جديد باستخدام الأمر التالي:

python manage.py startapp myapp

سيؤدي هذا إلى إنشاء دليل جديد يسمى “myapp” بالبنية التالية:

myapp/
    __init__.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py

ملف “views.py” هو المكان الذي ستحدد فيه العروض التي تتعامل مع طلبات HTTP وتعيد الاستجابات. يمكنك بعد ذلك تعيين العروض إلى عناوين URL باستخدام ملف “urls.py”.

مع إعداد مشروع وتطبيق Django، أنت جاهز لبدء معالجة طلبات HTTP.

إنشاء دالة العرض

في Django، العرض هو دالة تعالج طلب HTTP وترجع استجابة HTTP. لتحديد دالة عرض في Django، ستحتاج إلى إنشاء دالة في ملف “views.py” الخاص بتطبيقك و زخرفتها باستخدام مصمم المزخرفات @require_http_methods.

تحدد المزخرفات أساليب HTTP التي يجب أن تتعامل معها وظيفة العرض (مثل GET، POST، DELETE).

و فيما يلي مثال لدالة عرض بسيطة تتعامل مع طلبات GET:

from django.http import HttpResponse
from django.views.decorators.http import require_http_methods

@require_http_methods(["GET"])
def my_view(request):
    return HttpResponse("Hello, world!")

في هذا المثال، تأخذ دالة العرض وسيطة واحدة، وهي الطلب، وهو مثيل لفئة HttpRequest. يحتوي هذا الكائن على معلومات حول الطلب، مثل أسلوب HTTP وعنوان URL والرؤوس.

بعد ذلك تقوم دالة العرض بإرجاع كائن HttpResponse، وهو فئة Django التي تمثل استجابة HTTP. تأخذ فئة HttpResponse سلسلة كوسيطة لها، وهي محتوى الاستجابة.

بعد الإنتهاء من تحديد دالة العرض، ستحتاج إلى تعيينها إلى عنوان URL حتى يتمكن الزوار من الوصول إليها.

ربط العروض بعناوين URL

لجعل دالة العرض في متناول الزوار، ستحتاج إلى تعيينها إلى عنوان URL. في Django، يتم ذلك باستخدام قائمة urlpatterns في ملف “urls.py” الخاص بتطبيقك.

لتعيين عنوان URL لدالة العرض، ستحتاج إلى استخدام دالة path وتحديد نمط عنوان URL و دالة العرض. فيما يلي مثال لكيفية تعيين عنوان URL لدالة عرض:

from django.urls import path
from . import views

urlpatterns = [
    path('my-url/', views.my_view, name='my_view'),
]

في هذا المثال، نمط عنوان URL هو "my-url/" و دالة العرض هي view.my_view. أما الاسم فهو اختياري ويتم استخدامه لإعطاء نمط عنوان URL اسمًا فريدًا يمكن استخدامه للإشارة إليه من مكان آخر في الكود.

بمجرد تعيين عنوان URL لدالة العرض، يمكنك الوصول إلى العرض عن طريق زيارة عنوان URL في متصفح الويب. على سبيل المثال، إذا كان نمط عنوان URL هو “my-url/” وكان مشروع Django الخاص بك يعمل على http://localhost:8000، فيمكنك الوصول إلى العرض عن طريق زيارة http://localhost:8000/my-url/.

التعامل مع طلبات GET وPOST

في Django، يمكنك استخدام المزخرف @require_http_methods لتحديد أساليب HTTP التي يجب أن تتعامل معها دالة العرض. على سبيل المثال، للتعامل مع طلبات GET وPOST، يمكنك استخدام المزخرف التالي:

@require_http_methods(["GET", "POST"])
def my_view(request):
    # التعامل مع طلبات GET وPOST

يمكنك بعد ذلك استخدام سمة request.method لتحديد طريقة HTTP للطلب وتنفيذ إجراءات مختلفة بناءً على الطريقة. على سبيل المثال:

@require_http_methods(["GET", "POST"])
def my_view(request):
    if request.method == 'GET':
        # التعامل مع طلبات GET
    elif request.method == 'POST':
        # التعامل مع طلبات POST

تُستخدم طلبات GET لاسترداد البيانات من الخادم، بينما تُستخدم طلبات POST لإرسال البيانات إلى الخادم .

من الممكن أيضًا التعامل مع طرق HTTP الأخرى، مثل PUT وDELETE وHEAD.

الوصول إلى بيانات الطلب

يمكنك الوصول إلى أجزاء مختلفة من البيانات من طلب HTTP باستخدام كائن الطلب. كائن الطلب هو مثيل لفئة HttpRequest ويتم تمريره كوسيط لدوال العرض.

فيما يلي بعض الأمثلة لكيفية الوصول إلى بيانات الطلب في Django:

للوصول إلى معلمات سلسلة الاستعلام لطلب GET، يمكنك استخدام سمة request.GET، وهي كائن يشبه القاموس يحتوي على معلمات سلسلة الاستعلام:

def my_view(request):
    name = request.GET.get('name')
    # افعل شيئًا باستخدام معلمة الاسم

للوصول إلى بيانات النموذج لطلب POST، يمكنك استخدام سمة request.POST، وهي كائن يشبه القاموس يحتوي على بيانات النموذج:

def my_view(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        # افعل شيئًا بحقل الاسم

و حتى نصل إلى نص الطلب، يمكنك استخدام سمة request.body، وهو كائن بايت يحتوي على نص الطلب الخام:

def my_view(request):
    body = request.body
    # افعل شيئًا باستخدام نص الطلب

للوصول إلى رؤوس الطلب، يمكنك استخدام سمة request.headers، وهو كائن يشبه القاموس يحتوي على رؤوس الطلب:

def my_view(request):
    user_agent = request.headers['User-Agent']
    # افعل شيئًا مع وكيل المستخدم

إرسال الردود

في Django، يمكنك إرسال استجابات HTTP باستخدام فئة HttpResponse. حيث تأخذ هذه الأخيرة سلسلة كوسيطة لها وتمثل استجابة HTTP مع هذا المحتوى.

فيما يلي مثال لكيفية استخدام فئة HttpResponse لإرسال استجابة بسيطة:

from django.http import HttpResponse

def my_view(request):
    return HttpResponse("Hello, world!")

يمكنك أيضًا تحديد نوع محتوى الاستجابة عن طريق إستخدام content_type

from django.http import HttpResponse

def my_view(request):
    return HttpResponse("<h1>Hello, world!</h1>", content_type='text/html')

بالإضافة إلى فئة HttpResponse، يوفر Django أيضًا عدة فئات أخرى لإرسال أنواع مختلفة من الاستجابات، مثل JsonResponse لإرسال بيانات JSON وHttpResponseRedirect لإعادة توجيه العميل إلى عنوان URL مختلف.


اكتشاف المزيد من بايثون العربي

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Scroll to Top

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading