الوحدة wsgiref في بايثون

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث


تعدّ واجهة بوابة مخدّم الويب Web Server Gateway Interface وتختصر إلى (WSGI) واجهة معيارية بين برنامج مخدّم الويب وتطبيقات الويب المكتوبة بلغة بايثون. إن وجود واجهة معيارية يسهّل من استخدام التطبيقات التي تدعم WSGI مع العديد من مخدّمات الويب المختلفة.

إن كنت ترغب في إنشاء مخدّم ويب أو إطار عمل برمجي فيتحتّم عليك حينئذ أن تحيط بكلّ تفاصيل WSGI، ولكن إن كنت ترغب في تثبيت أحد التطبيقات التي تدعم WSGI أو كتابة تطبيق ويب باستخدام إحدى أطر العمل المتوفّرة فلن تكون بحاجة حينئذٍ إلى استيعاب كل تلك التفاصيل.

تعدّ الوحدة wsgiref وسيلة لتطبيق معايير WSGI ويمكن استخدامها لإضافة دعم WSGI إلى مخدّمات الويب وأطر العمل. البرمجية. تقدّم هذه الوحدة أدوات لمعالجة متغيرات البيئة في WSGI وترويسات الإجابة response headers، وتقدّم أصنافًا اساسية لاستخدام مخدّمات WSGI، ومخدّم HTTP عام والذي يخدم تطبيقات WSIG، وأداة للتحقق من توافق مخدّمات وتطبيقات WSGI مع معايير WSGI‏ (PEP 3333).

راجع wsgi.readthedocs.io للاطلاع على المزيد من المعلومات حول WSGI، والوصول إلى بعض الروابط الخاصّة بالدروس التعليمية والمصادر المتعلّقة بهذا الشأن.

الوحدة wsgiref.util

تقدّم هذه الوحدة مجموعة متنوعة من الدوال التي تساعد في التعامل مع بيئات WSGI. بيئة WSGI هي قاموس يتضمّن متغيرات طلب HTTP وبحسب ما هو موصوف في PEP 3333. تأخذ جميع الدوال المعامل environ وهو عبارة عن قاموس متوافق مع WSGI. يمكن مراجعة PEP 3333 للاطلاع على المزيد من التفاصيل.

الوحدة wsgiref.headers

تقدّم هذه الوحدة الصنف Headers والذي يُستخدم لمعالجة ترويسات الاستجابة response headers في WSGI وذلك باستخدام طريقة مشابهة للقواميس.

الوحدة wsgiref.simple_server

تستخدم هذه الوحدة مخدّم HTTP بسيط (بالاستناد على http.server) وظيفته تخديم تطبيقات WSGI. تخدّم كل نسخة من المخدّم تطبيق WSGI واحد على مضيف host ومنفذ port معين. إن كنت ترغب في تخديم تطبيقات متعددة على مضيف ومنفذ واحد، فيجب عليك إنشاء تطبيق WSGI يفسّر قيمة المتغير PATH_INFO لاختيار التطبيق الذي سينفّذ مع كلّ طلب. (يمكن مثلًا استخدام الدالة shift_path_info()‎ من وحدة wsgiref.util).

الوحدة wsgiref.validate

تقدّم هذه الوحدة دالة تُنشئ كائن تطبيق WSGI وتتحقّق من تواصله مع مخدّم أو بوابة WSGI لضمان مطابقة الجانبين للبروتوكول.

الوحدة wsgiref.handlers

تقدّم هذه الوحدة أصناف معالجة أساسية لاستخدام مخدّمات وبوابات WSGI. تعالج هذه الأصناف الجزء الأكبر من عملية التواصل مع تطبيق WSGI ما دامت في بيئة مشابهة لبيئة CGI وإلى جانب تدفّقات المدخلات والمخرجات والأخطاء.

أمثلة

يجب أن تتضمّن جميع تطبيقات WSGI كائن تطبيق وهو كائن قابل للاستدعاء يستقبل وسيطين اثنين. ولهذا الغرض يستخدم المثال التالي دالة (استخدام الدالة ليس أمرًا إلزاميًا، إذ يمكن استخدام صنف على سبيل المثال). الوسيط الأوّل في الدالة عبارة عن قاموس يتضمّن متغيرات بيئة بنمط CGI، والوسيط الثاني هو كائن قابل للاستداء (راجع PEP3333).

يعرض المثال التالي تطبيق WSGI بسيطًا:

from wsgiref.simple_server import make_server


def hello_world_app(environ, start_response):
    status = '200 OK'  # HTTP حالة 
    headers = [('Content-type', 'text/plain; charset=utf-8')]  # HTTP ترويسات 
    start_response(status, headers)

    # سيُطبع الكائن المعاد من هذه الدالة لاحقًا
    return [b"Hello World"]

with make_server('', 8000, hello_world_app) as httpd:
    print("Serving on port 8000...")

    # سيعمل المخدّم إلى حين إيقاف العملية
    httpd.serve_forever()

مصادر