الفرق بين المراجعتين ل"Python/wsgiref"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
 
(6 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة)
سطر 5: سطر 5:
 
إن كنت ترغب في إنشاء مخدّم ويب أو إطار عمل برمجي فيتحتّم عليك حينئذ أن تحيط بكلّ تفاصيل WSGI، ولكن إن كنت ترغب في تثبيت أحد التطبيقات التي تدعم WSGI أو كتابة تطبيق ويب باستخدام إحدى أطر العمل المتوفّرة فلن تكون بحاجة حينئذٍ إلى استيعاب كل تلك التفاصيل.
 
إن كنت ترغب في إنشاء مخدّم ويب أو إطار عمل برمجي فيتحتّم عليك حينئذ أن تحيط بكلّ تفاصيل WSGI، ولكن إن كنت ترغب في تثبيت أحد التطبيقات التي تدعم WSGI أو كتابة تطبيق ويب باستخدام إحدى أطر العمل المتوفّرة فلن تكون بحاجة حينئذٍ إلى استيعاب كل تلك التفاصيل.
  
تعدّ الوحدة <code>wsgiref</code> وسيلة لتطبيق معايير WSGI ويمكن استخدامها لإضافة دعم WSGI إلى مخدّمات الويب وأطر العمل. البرمجية. تقدّم هذه الوحدة أدوات لمعالجة متغيرات البيئة في WSGI وترويسات الإجابة response headers، وتقدّم أصنافًا اساسية لاستخدام مخدّمات WSGI، ومخدّم HTTP عام والذي يخدم تطبيقات WSIG، وأداة للتحقق من توافق مخدّمات وتطبيقات WSIG مع معايير WSGI‏ ([https://www.python.org/dev/peps/pep-3333 PEP 3333]).
+
تعدّ الوحدة <code>wsgiref</code> وسيلة لتطبيق معايير WSGI ويمكن استخدامها لإضافة دعم WSGI إلى مخدّمات الويب وأطر العمل. البرمجية. تقدّم هذه الوحدة أدوات لمعالجة متغيرات البيئة في WSGI وترويسات الإجابة response headers، وتقدّم أصنافًا اساسية لاستخدام مخدّمات WSGI، ومخدّم HTTP عام والذي يخدم تطبيقات WSIG، وأداة للتحقق من توافق مخدّمات وتطبيقات WSGI مع معايير WSGI‏ ([https://www.python.org/dev/peps/pep-3333 PEP 3333]).
  
 
راجع [https://wsgi.readthedocs.io/ wsgi.readthedocs.io] للاطلاع على المزيد من المعلومات حول WSGI، والوصول إلى بعض الروابط الخاصّة بالدروس التعليمية والمصادر المتعلّقة بهذا الشأن.
 
راجع [https://wsgi.readthedocs.io/ wsgi.readthedocs.io] للاطلاع على المزيد من المعلومات حول WSGI، والوصول إلى بعض الروابط الخاصّة بالدروس التعليمية والمصادر المتعلّقة بهذا الشأن.
  
== الوحدة <code>wsgiref.util</code> ==
+
== الوحدة <code>[[Python/wsgiref/util|wsgiref.util]]</code> ==
تقدّم هذه الوحدة مجموعة متنوعة من الدوال التي تساعد في التعامل مع بيئات WSGI. بيئة WSGI هي [[Python/dict|قاموس]] يتضمّن متغيرات طلب HTTP وبحسب ما هو موصوف في [https://www.python.org/dev/peps/pep-3333 PEP 3333]. تتوقع جميع الدوال التي تأخذ المعامل <code>environ</code> تزويدها [[Python/dict|بقاموس]] متوافق مع WSGI. يمكن مراجعة [https://www.python.org/dev/peps/pep-3333 PEP 3333] للاطلاع على المزيد من التفاصيل.
+
تقدّم هذه الوحدة مجموعة متنوعة من الدوال التي تساعد في التعامل مع بيئات WSGI. بيئة WSGI هي [[Python/dict|قاموس]] يتضمّن متغيرات طلب HTTP وبحسب ما هو موصوف في [https://www.python.org/dev/peps/pep-3333 PEP 3333]. تأخذ  جميع الدوال المعامل <code>environ</code> وهو عبارة عن [[Python/dict|قاموس]] متوافق مع WSGI. يمكن مراجعة [https://www.python.org/dev/peps/pep-3333 PEP 3333] للاطلاع على المزيد من التفاصيل.
  
== الوحدة <code>wsgiref.headers</code> ==
+
== الوحدة <code>[[Python/wsgiref/headers|wsgiref.headers]]</code> ==
تقدّم هذه الوحدة الصنف Headers والذي يُستخدم لمعالجة ترويسات الاستجابة response headers في WSGI وذلك باستخدام طريقة مشابهة للقواميس.
+
تقدّم هذه الوحدة الصنف <code>[[Python/Headers|Headers]]</code> والذي يُستخدم لمعالجة ترويسات الاستجابة response headers في WSGI وذلك باستخدام طريقة مشابهة [[Python/dict|للقواميس]].
  
== الوحدة <code>wsgiref.simple_server</code> ==
+
== الوحدة <code>[[Python/wsgiref/simple server|wsgiref.simple_server]]</code> ==
 +
تستخدم هذه الوحدة مخدّم HTTP بسيط (بالاستناد على http.server) وظيفته تخديم تطبيقات WSGI. تخدّم كل نسخة من المخدّم تطبيق WSGI واحد على مضيف host ومنفذ port معين. إن كنت ترغب في تخديم تطبيقات متعددة على مضيف ومنفذ واحد، فيجب عليك إنشاء تطبيق WSGI يفسّر قيمة المتغير <code>PATH_INFO</code> لاختيار التطبيق الذي سينفّذ مع كلّ طلب. (يمكن مثلًا استخدام الدالة <code>[[Python/wsgiref/util/shift path info|shift_path_info()‎]]</code> من وحدة <code>[[Python/wsgiref/util|wsgiref.util]]</code>).
  
== الوحدة <code>wsgiref.validate</code> ==
+
== الوحدة <code>[[Python/wsgiref/validate|wsgiref.validate]]</code> ==
 +
تقدّم هذه الوحدة دالة تُنشئ كائن تطبيق WSGI وتتحقّق من تواصله مع مخدّم أو بوابة WSGI لضمان مطابقة الجانبين للبروتوكول.
  
== الوحدة <code>wsgiref.handlers</code> ==
+
== الوحدة <code>[[Python/wsgiref/handlers|wsgiref.handlers]]</code> ==
 +
تقدّم هذه الوحدة أصناف معالجة أساسية لاستخدام مخدّمات وبوابات WSGI. تعالج هذه الأصناف الجزء الأكبر من عملية التواصل مع تطبيق WSGI ما دامت في بيئة مشابهة لبيئة CGI وإلى جانب تدفّقات المدخلات والمخرجات والأخطاء.
 +
 
 +
== أمثلة ==
 +
يجب أن تتضمّن جميع تطبيقات WSGI كائن تطبيق وهو كائن قابل للاستدعاء يستقبل وسيطين اثنين. ولهذا الغرض يستخدم المثال التالي دالة (استخدام الدالة ليس أمرًا إلزاميًا، إذ يمكن استخدام صنف على سبيل المثال). الوسيط الأوّل في الدالة عبارة عن قاموس يتضمّن متغيرات بيئة بنمط CGI، والوسيط الثاني هو كائن قابل للاستداء (راجع PEP3333).
 +
 
 +
يعرض المثال التالي تطبيق WSGI بسيطًا:<syntaxhighlight lang="python3">
 +
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()
 +
</syntaxhighlight>
  
 
== مصادر ==
 
== مصادر ==

المراجعة الحالية بتاريخ 16:51، 27 ديسمبر 2018


تعدّ واجهة بوابة مخدّم الويب 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()

مصادر