الفرق بين المراجعتين لصفحة: «Python/BaseHandler»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الصنف <code>wsgiref.handlers.BaseHandler</code> في بايثون}}</noinclude> هذا الصنف هو صنف أساسي مجرّد...' |
|||
(1 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 5: | سطر 5: | ||
== توابع الصنف BaseHandler == | == توابع الصنف BaseHandler == | ||
تمتلك نسخ BaseHandler تابعًا واحدًا فقط وهو معدّ للاستخدام الخارجي: | تمتلك نسخ <code>BaseHandler</code> تابعًا واحدًا فقط وهو معدّ للاستخدام الخارجي: | ||
=== التابع run() === | === التابع <code>run()</code> === | ||
يشغّل التابع تطبيق WSGI المعطى. | يشغّل التابع تطبيق WSGI المعطى. | ||
تنفّذ جميع توابع BaseHandler الأخرى بواسطة هذا التابع أثناء عملية تشغيل التطبيق؛ لذا فإنّ الهدف الرئيسي من هذا التابع هو إتاحة القدرة على تخصيص هذه العملية. | تنفّذ جميع توابع <code>BaseHandler</code> الأخرى بواسطة هذا التابع أثناء عملية تشغيل التطبيق؛ لذا فإنّ الهدف الرئيسي من هذا التابع هو إتاحة القدرة على تخصيص هذه العملية. | ||
يجب إعادة تعريف التوابع التالية في صنف فرعي: | يجب إعادة تعريف التوابع التالية في صنف فرعي: | ||
=== التابع <code>_write(data)</code> === | |||
يخزّن التابع البيانات المعطاة لغرض نقلها إلى العميل؛ لا مشكلة في أن ينقل هذا التابع البيانات؛ إذ يفصل الصنف <code>BaseHandler</code> بين عملية الكتابة والمسح flush لزيادة الكفاءة وذلك عندما يميّز النظام الداخلي بين هاتين العمليتين. | |||
=== التابع <code>_flush()</code> === | |||
ينقل التابع البيانات المخزّنة إلى العميل. لا مشكلة إن لم يؤدّ هذا التابع أي وظيفة (أي عندما يرسل التابع <code>_write()</code> البيانات). | |||
=== | === <code>get_stdin()</code> === | ||
يعيد التابع كائن تدفق مدخلات والذي يكون ملائمًا لاستخدامه كتدفق مدخلات <code>wsgi.input</code> للطلب الذي تجري معالجته. | |||
=== | === <code>get_stderr()</code> === | ||
يعيد التابع كائن تدفق مخرجات والذي يكون ملائمًا لاستخدامه كتدفق مخرجات <code>wsgi.output</code> للطلب الذي تجري معالجته. | |||
=== <code>add_cgi_vars()</code> === | |||
يدرج التابع متغير CGI للطب الحالي في الخاصية <code>environ</code>. | |||
يدرج التابع متغير CGI للطب الحالي في الخاصية environ. | |||
== الخصائص والتوابع التي تستخدم لتخصيص بيئة WSGI == | == الخصائص والتوابع التي تستخدم لتخصيص بيئة WSGI == | ||
فيما يلي بعض التوابع والخصائص التي قد ترغب في إعادة تعريفها، ويجدر التنبيه هنا إلى أنّه هذه ليست قائمة كاملة بالتوابع التي يمكن إعادة تعريفها. يجب عليك مراجعة سلاسل التوثيق النصية والشيفرة المصدرية للحصول على المزيد من المعلومات قبل محاولة إنشاء صنف مخصّص ومتفرّع من الصنف BaseHandler. | فيما يلي بعض التوابع والخصائص التي قد ترغب في إعادة تعريفها، ويجدر التنبيه هنا إلى أنّه هذه ليست قائمة كاملة بالتوابع التي يمكن إعادة تعريفها. يجب عليك مراجعة سلاسل التوثيق النصية والشيفرة المصدرية للحصول على المزيد من المعلومات قبل محاولة إنشاء صنف مخصّص ومتفرّع من الصنف <code>BaseHandler</code>. | ||
=== wsgi_multithread === | === <code>wsgi_multithread</code> === | ||
تحمل هذه الخاصية القيمة التي تُستخدم لمتغير البيئة wsgi.multirthread. تأخذ هذه الخاصية القيمة True كقيمة افتراضية في الصنف | تحمل هذه الخاصية القيمة التي تُستخدم لمتغير البيئة <code>wsgi.multirthread</code>. تأخذ هذه الخاصية القيمة <code>True</code> كقيمة افتراضية في الصنف <code>BaseHandler</code>، ولكن يمكن أن تأخذ قيمة افتراضية مختلفة في الأصناف الفرعية الأخرى، ويمكن تعيين قيمة الخاصية في الدالة البانية. | ||
=== wsgi_multiprocess === | === <code>wsgi_multiprocess</code> === | ||
تحمل هذه الخاصية القيمة التي تُستخدم لمتغير البيئة wsgi.multiprocess. تأخذ هذه الخاصية القيمة True كقيمة افتراضية في الصنف | تحمل هذه الخاصية القيمة التي تُستخدم لمتغير البيئة <code>wsgi.multiprocess</code>. تأخذ هذه الخاصية القيمة <code>True</code> كقيمة افتراضية في الصنف <code>BaseHandler</code>، ولكن يمكن أن تأخذ قيمة افتراضية مختلفة في الأصناف الفرعية الأخرى، ويمكن تعيين قيمة الخاصية في الدالة البانية. | ||
=== wsgi_run_once === | === <code>wsgi_run_once</code> === | ||
تحمل هذه الخاصية القيمة التي تُستخدم لمتغير البيئة wsgi.run_once. تأخذ هذه الخاصية القيمة False كقيمة افتراضية في الصنف | تحمل هذه الخاصية القيمة التي تُستخدم لمتغير البيئة <code>wsgi.run_once</code>. تأخذ هذه الخاصية القيمة <code>False</code> كقيمة افتراضية في الصنف <code>BaseHandler</code>، ولكنّها تأخذ القيمة <code>True</code> كقيمة افتراضية في الصنف <code>[[Python/CGIHandler|CGIHandler]]</code>. | ||
=== os_environ === | === <code>os_environ</code> === | ||
متغيرات البيئة الافتراضية التي ستضمّن في كل طلب في بيئة WSGI. تكون هذه الخاصية -افتراضيًا- نسخة من الخاصية os. | متغيرات البيئة الافتراضية التي ستضمّن في كل طلب في بيئة WSGI. تكون هذه الخاصية -افتراضيًا- نسخة من الخاصية <code>os.environ</code> لحظة استيراد الوحدة <code>[[Python/wsgiref/handlers|wsgiref.handlers]]</code>، ولكن يمكن للأصناف الفرعية أن تنشئ نسخًا خاصّة بها على مستوى الصنف أو نسخة الصنف. | ||
يجدر الانتباه إلى أنّ القاموس يجب أن يكون للقراءة فقط؛ ذلك لأنّ القيمة الافتراضية تكون مشتركة بين أصناف ونسخ أصناف متعددة. | يجدر الانتباه إلى أنّ القاموس يجب أن يكون للقراءة فقط؛ ذلك لأنّ القيمة الافتراضية تكون مشتركة بين أصناف ونسخ أصناف متعددة. | ||
=== server_software === | === <code>server_software</code> === | ||
إن جرى تعيين قيمة للخاصية origin_server فإنّ قيمة هذه الخاصية ستستخدم لتعيين قيمة لمتغير بيئة WSGI الافتراضي | إن جرى تعيين قيمة للخاصية <code>origin_server</code> فإنّ قيمة هذه الخاصية ستستخدم لتعيين قيمة لمتغير بيئة WSGI الافتراضي <code>SERVER_SOFWARE</code>، ولتحديد مخدّم افتراضي: <code>header</code> في استجابات HTTP. تتجاهل معالجات الطلبات التي لا تكون من نوع HTTP (مثل <code>[[Python/BaseCGIHandler|BaseCGIHandler]]</code> و <code>[[Python/CGIHandler|CGIHandler]]</code>) هذه الخاصية. | ||
ملاحظة: استبدلت الكلمة "Python" بنوع اللغة المستخدم مثل "CPython" و "Jython" ... الخ، في الإصدار 3.3 من بايثون. | ملاحظة: استبدلت الكلمة "Python" بنوع اللغة المستخدم مثل "CPython" و "Jython" ... الخ، في الإصدار 3.3 من بايثون. | ||
=== get_scheme() | === التابع<code>get_scheme()</code> === | ||
يعيد هذا التابع مخطط URL المستخدم للطلب الحالي. تُستخدم الدالة <code>[[Python/wsgiref/util/guess scheme|guess_scheme()]]</code> من الوحدة <code>wsgiref.util</code> افتراضيًا لتخمين ما إذا كان المخطط <code>"http"</code> أو <code>"https"</code> وذلك بالاعتماد على متغيرات <code>environ</code> في الطلب الحالي. | |||
=== التابع <code>setup_environ()</code> === | |||
يعين التابع بيئة WSGI مهيئة بالكامل إلى الخاصية <code>environ</code>. تُستخدم جميع التوابع والخصائص أعلاه افتراضيًا، إضافة إلى التوابع <code>get_stdin()</code> و <code>get_stderr()</code> و <code>add_cgi_vars()</code> وخاصية <code>wsgi_file_wrapper</code>. كذلك يُدرج المفتاح <code>SERVER_SOFTWARE</code> إن لم يكن موجودًا وما دامت الخاصية <code>origin_server</code> تحمل قيمة صحيحة وما دامت الخاصية <code>server_software</code> معيّنة. | |||
== توابع وخصائص تستخدم لتخصيص عملية معالجة الاستثناءات == | == توابع وخصائص تستخدم لتخصيص عملية معالجة الاستثناءات == | ||
=== log_exception(exc_info) === | === التابع <code>log_exception(exc_info)</code> === | ||
يسجّل التابع الصفّ exc_info في سجلّ المخدّم، ويأخذ هذا الصف الصيغة (type, value, traceback). يُكتب الخطأ traceback افتراضيًا في تدفق أخطاء wsgi في الخاصية wsgi.errors ثم يجري التخلّص منه. يمكن للأصناف الفرعية أن تعيد تعريف هذا التابع لتغيير الصيغة أو لإعادة توجيه المخرجات، أو إرسال الأخطاء برسالة إلكترونية إلى مدير النظام، أو اتخاذ الإجراء المناسب. | يسجّل التابع [[Python/tuples|الصفّ]] <code>exc_info</code> في سجلّ المخدّم، ويأخذ هذا الصف الصيغة <code>(type, value, traceback)</code>. يُكتب الخطأ <code>traceback</code> افتراضيًا في تدفق أخطاء wsgi في الخاصية <code>wsgi.errors</code> ثم يجري التخلّص منه. يمكن للأصناف الفرعية أن تعيد تعريف هذا التابع لتغيير الصيغة أو لإعادة توجيه المخرجات، أو إرسال الأخطاء برسالة إلكترونية إلى مدير النظام، أو اتخاذ الإجراء المناسب. | ||
=== <code>traceback_limit</code> === | |||
تمثّل هذه الخاصية أقصى عدد ممكن من الإطارات frames المضمّنة في مخرجات الأخطاء tracebacks بواسطة التابع الافتراضي <code>log_excetion()</code>. إن كانت قيمة هذه الخاصية هي None فستُضمَّن جميع الإطارات. | |||
=== traceback_limit === | === التابع <code>error_output(environ, start_response)</code> === | ||
تمثّل هذه الخاصية أقصى عدد ممكن من الإطارات frames المضمّنة في مخرجات الأخطاء tracebacks بواسطة التابع الافتراضي log_excetion(). إن كانت قيمة هذه الخاصية هي None فستُضمَّن جميع الإطارات. | |||
=== error_output(environ, start_response) === | |||
هذا التابع هو تطبيق WSGI وظيفته إنتاج صفحة خطأ للمستخدمين، ويُنفّذ هذا التابع فقط عند حدوث خطأ قبل إرسال الترويسات إلى طرف العميل. | هذا التابع هو تطبيق WSGI وظيفته إنتاج صفحة خطأ للمستخدمين، ويُنفّذ هذا التابع فقط عند حدوث خطأ قبل إرسال الترويسات إلى طرف العميل. | ||
يمكن لهذا التابع الوصول إلى معلومات الخطأ الحالي باستخدام الدالة sys.exc_info() | يمكن لهذا التابع الوصول إلى معلومات الخطأ الحالي باستخدام الدالة <code>[[Python/sys/exc info|sys.exc_info()]]</code>، ويجب أن يمرّر التابع المعلومات إلى الخاصية <code>start_response</code> عند استدعائه (بحسب ما هو موصوف في قسم "Error Handling" في [https://www.python.org/dev/peps/pep-3333 PEP 3333]). | ||
يستخدم التابع افتراضيًا الخصائص error_status و error_headers و error_body لإنتاج صفحة مخرجات، ويمكن للأصناف الفرعية أن تعيد تعريف هذا السلوك وذلك لإنتاج مخرجات أخطاء بخصائص ومميّزات مختلفة. | يستخدم التابع افتراضيًا الخصائص <code>error_status</code> و <code>error_headers</code> و <code>error_body</code> لإنتاج صفحة مخرجات، ويمكن للأصناف الفرعية أن تعيد تعريف هذا السلوك وذلك لإنتاج مخرجات أخطاء بخصائص ومميّزات مختلفة. | ||
ولكن ومن الناحية الأمنية لا يُنصح بعرض تشخيصات الأخطاء diagnostics على المستخدمين القدماء؛ بل يجب أن يكون هناك بعض الإجراءات الخاصة التي يجب اتخاذها ليتمكن المستخدم من عرض مخرجات تشخيص الأخطاء، ولهذا لا يتضمّن التابع هذا السلوك افتراضيًا. | ولكن ومن الناحية الأمنية لا يُنصح بعرض تشخيصات الأخطاء diagnostics على المستخدمين القدماء؛ بل يجب أن يكون هناك بعض الإجراءات الخاصة التي يجب اتخاذها ليتمكن المستخدم من عرض مخرجات تشخيص الأخطاء، ولهذا لا يتضمّن التابع هذا السلوك افتراضيًا. | ||
=== error_status === | === <code>error_status</code> === | ||
حالة HTTP المستخدمة لاستجابات الأخطاء. يجب أن تكون الخاصية سلسلة حالة نصية كما هو معرّف في PEP | حالة HTTP المستخدمة لاستجابات الأخطاء. يجب أن تكون الخاصية سلسلة حالة نصية كما هو معرّف في [https://www.python.org/dev/peps/pep-3333 PEP 3333]، والقيمة الافتراضية لهذه الخاصية هي الكود والرسالة 500. | ||
=== error_headers === | === <code>error_headers</code> === | ||
ترويسة HTTP المستخدم في استجابات الأخطاء. يجب أن تكون قيمة هذه الخاصية قائمة تتضمّن ترويسات استجابات WSGI والتي تكون صفًّا يأخذ الصيغة (name, value)، وكما هو موصوف في PEP 3333. تعيّن القائمة الافتراضية المحتوى إلى text/plain. | ترويسة HTTP المستخدم في استجابات الأخطاء. يجب أن تكون قيمة هذه الخاصية قائمة تتضمّن ترويسات استجابات WSGI والتي تكون صفًّا يأخذ الصيغة <code>(name, value)</code>، وكما هو موصوف في [https://www.python.org/dev/peps/pep-3333 PEP 3333]. تعيّن القائمة الافتراضية المحتوى إلى text/plain. | ||
=== <code>error_body</code> === | |||
تمثّل هذه الخاصية متن استجابة الخطأ. يجب أن تكون قيمة الخاصية من نوع <code>bytestring</code> تحتوي على متن استجابة HTTP. القيمة الافتراضية لهذه الخاصية هي <code>"A server error occurred. Please contact the administrator"</code>. | |||
== | == الخصائص والتوابع الخاصّة بـالقسم "Optional Platform-Specific File Handling" في المعيار [https://www.python.org/dev/peps/pep-3333 PEP 3333] == | ||
=== <code>wsgi_file_wrapper</code> === | |||
تأخذ هذه الخاصية القيمة <code>None</code> أو دالة تولّد الصنف <code>wsgi.file_wrapper</code>. القيمة الافتراضية لهذه الخاصية هي الصنف <code>wsgiref.util.FileWrapper</code>. | |||
=== | === التابع <code>sendfile()</code> === | ||
أعد تعريف هذا التابع لاستخدام عملية نقل ملفّات خاصّة بالمنصّة المستخدمة platform-specific file transmission. يُستدعى هذا التابع عندما تكون القيمة المعادة من التطبيق نسخة من الصنف المعيّن في الخاصية <code>wsgi_file_wrapper</code> فقط. يجب أن يعيد التابع قيمة صحيحة إن تمكن من نقل الملف بنجاح، وبهذا لن تنّفذ عملية النقل الافتراضية. يعيد التابع افتراضيًا القيمة خاطئة. | |||
أعد تعريف هذا التابع لاستخدام عملية نقل ملفّات خاصّة بالمنصّة المستخدمة platform-specific file transmission. يُستدعى هذا التابع عندما تكون القيمة المعادة من التطبيق نسخة من الصنف المعيّن في الخاصية wsgi_file_wrapper فقط. يجب أن يعيد التابع قيمة صحيحة إن تمكن من نقل الملف بنجاح، وبهذا لن تنّفذ عملية النقل الافتراضية. يعيد التابع افتراضيًا القيمة خاطئة. | |||
== انظر أيضًا == | == انظر أيضًا == | ||
* الصنف <code>[[Python/BaseCGIHandler|BaseCGIHandler]]</code>: هذا الصنف مشابه للصنف <code>CGIHandler</code>، ولكن عوضًا عن استخدام الوحدتين <code>sys</code> و <nowiki/>[[Python/os|<code>os</code>]]، فإنّ بيئة CGI و تدفقات المدخلات والمخرجات تحدّد من قبل المستخدم. | * الصنف <code>[[Python/CGIHandler|CGIHandler]]</code>: يمكن الاستفادة من هذا الصنف عند الحاجة إلى تشغيل تطبيق WSGI كشيفرة CGI. | ||
* الصنف <code>[[Python/ | * الصنف <code>[[Python/IISCGIHandler|IISCGIHandler]]</code>: هذا الصنف هو بديل خاص للصنف <code>[[Python/CGIHandler|CGIHandler]]</code>، ويستخدم لنشر التطبيقات على مخدّم الويب IIS الخاص بمايكروسوفت. | ||
* الصنف <code>[[Python/BaseCGIHandler|BaseCGIHandler]]</code>: هذا الصنف مشابه للصنف <code>[[Python/CGIHandler|CGIHandler]]</code>، ولكن عوضًا عن استخدام الوحدتين <code>sys</code> و <nowiki/>[[Python/os|<code>os</code>]]، فإنّ بيئة CGI و تدفقات المدخلات والمخرجات تحدّد من قبل المستخدم. | |||
* الصنف <code>[[Python/SimpleHandler|SimpleHandler]]</code>: هذا الصنف مشابه للصنف <code>[[Python/BaseCGIHandler|BaseCGIHandler]]</code>، ولكنّه مصمّم للاستخدام مع المخدمّات من نوع HTTP. | |||
== مصادر == | == مصادر == | ||
* [https://docs.python.org/3/library/wsgiref.html#wsgiref.handlers.BaseHandler قسم server/gateway base classes في صفحة WSGI Utilities and Reference Implementation في توثيق بايثون الرسمي.] | * [https://docs.python.org/3/library/wsgiref.html#wsgiref.handlers.BaseHandler قسم server/gateway base classes في صفحة WSGI Utilities and Reference Implementation في توثيق بايثون الرسمي.] |
المراجعة الحالية بتاريخ 16:19، 27 ديسمبر 2018
هذا الصنف هو صنف أساسي مجرّد يستخدم لتشغيل تطبيقات WSGI. تعالج كل نسخة من هذا الصنف طلب HTTP منفردًا، ولكن يمكن إنشاء صنف فرعي بمقدوره التعامل مع طلبات متعددة.
توابع الصنف BaseHandler
تمتلك نسخ BaseHandler
تابعًا واحدًا فقط وهو معدّ للاستخدام الخارجي:
التابع run()
يشغّل التابع تطبيق WSGI المعطى.
تنفّذ جميع توابع BaseHandler
الأخرى بواسطة هذا التابع أثناء عملية تشغيل التطبيق؛ لذا فإنّ الهدف الرئيسي من هذا التابع هو إتاحة القدرة على تخصيص هذه العملية.
يجب إعادة تعريف التوابع التالية في صنف فرعي:
التابع _write(data)
يخزّن التابع البيانات المعطاة لغرض نقلها إلى العميل؛ لا مشكلة في أن ينقل هذا التابع البيانات؛ إذ يفصل الصنف BaseHandler
بين عملية الكتابة والمسح flush لزيادة الكفاءة وذلك عندما يميّز النظام الداخلي بين هاتين العمليتين.
التابع _flush()
ينقل التابع البيانات المخزّنة إلى العميل. لا مشكلة إن لم يؤدّ هذا التابع أي وظيفة (أي عندما يرسل التابع _write()
البيانات).
get_stdin()
يعيد التابع كائن تدفق مدخلات والذي يكون ملائمًا لاستخدامه كتدفق مدخلات wsgi.input
للطلب الذي تجري معالجته.
get_stderr()
يعيد التابع كائن تدفق مخرجات والذي يكون ملائمًا لاستخدامه كتدفق مخرجات wsgi.output
للطلب الذي تجري معالجته.
add_cgi_vars()
يدرج التابع متغير CGI للطب الحالي في الخاصية environ
.
الخصائص والتوابع التي تستخدم لتخصيص بيئة WSGI
فيما يلي بعض التوابع والخصائص التي قد ترغب في إعادة تعريفها، ويجدر التنبيه هنا إلى أنّه هذه ليست قائمة كاملة بالتوابع التي يمكن إعادة تعريفها. يجب عليك مراجعة سلاسل التوثيق النصية والشيفرة المصدرية للحصول على المزيد من المعلومات قبل محاولة إنشاء صنف مخصّص ومتفرّع من الصنف BaseHandler
.
wsgi_multithread
تحمل هذه الخاصية القيمة التي تُستخدم لمتغير البيئة wsgi.multirthread
. تأخذ هذه الخاصية القيمة True
كقيمة افتراضية في الصنف BaseHandler
، ولكن يمكن أن تأخذ قيمة افتراضية مختلفة في الأصناف الفرعية الأخرى، ويمكن تعيين قيمة الخاصية في الدالة البانية.
wsgi_multiprocess
تحمل هذه الخاصية القيمة التي تُستخدم لمتغير البيئة wsgi.multiprocess
. تأخذ هذه الخاصية القيمة True
كقيمة افتراضية في الصنف BaseHandler
، ولكن يمكن أن تأخذ قيمة افتراضية مختلفة في الأصناف الفرعية الأخرى، ويمكن تعيين قيمة الخاصية في الدالة البانية.
wsgi_run_once
تحمل هذه الخاصية القيمة التي تُستخدم لمتغير البيئة wsgi.run_once
. تأخذ هذه الخاصية القيمة False
كقيمة افتراضية في الصنف BaseHandler
، ولكنّها تأخذ القيمة True
كقيمة افتراضية في الصنف CGIHandler
.
os_environ
متغيرات البيئة الافتراضية التي ستضمّن في كل طلب في بيئة WSGI. تكون هذه الخاصية -افتراضيًا- نسخة من الخاصية os.environ
لحظة استيراد الوحدة wsgiref.handlers
، ولكن يمكن للأصناف الفرعية أن تنشئ نسخًا خاصّة بها على مستوى الصنف أو نسخة الصنف.
يجدر الانتباه إلى أنّ القاموس يجب أن يكون للقراءة فقط؛ ذلك لأنّ القيمة الافتراضية تكون مشتركة بين أصناف ونسخ أصناف متعددة.
server_software
إن جرى تعيين قيمة للخاصية origin_server
فإنّ قيمة هذه الخاصية ستستخدم لتعيين قيمة لمتغير بيئة WSGI الافتراضي SERVER_SOFWARE
، ولتحديد مخدّم افتراضي: header
في استجابات HTTP. تتجاهل معالجات الطلبات التي لا تكون من نوع HTTP (مثل BaseCGIHandler
و CGIHandler
) هذه الخاصية.
ملاحظة: استبدلت الكلمة "Python" بنوع اللغة المستخدم مثل "CPython" و "Jython" ... الخ، في الإصدار 3.3 من بايثون.
التابعget_scheme()
يعيد هذا التابع مخطط URL المستخدم للطلب الحالي. تُستخدم الدالة guess_scheme()
من الوحدة wsgiref.util
افتراضيًا لتخمين ما إذا كان المخطط "http"
أو "https"
وذلك بالاعتماد على متغيرات environ
في الطلب الحالي.
التابع setup_environ()
يعين التابع بيئة WSGI مهيئة بالكامل إلى الخاصية environ
. تُستخدم جميع التوابع والخصائص أعلاه افتراضيًا، إضافة إلى التوابع get_stdin()
و get_stderr()
و add_cgi_vars()
وخاصية wsgi_file_wrapper
. كذلك يُدرج المفتاح SERVER_SOFTWARE
إن لم يكن موجودًا وما دامت الخاصية origin_server
تحمل قيمة صحيحة وما دامت الخاصية server_software
معيّنة.
توابع وخصائص تستخدم لتخصيص عملية معالجة الاستثناءات
التابع log_exception(exc_info)
يسجّل التابع الصفّ exc_info
في سجلّ المخدّم، ويأخذ هذا الصف الصيغة (type, value, traceback)
. يُكتب الخطأ traceback
افتراضيًا في تدفق أخطاء wsgi في الخاصية wsgi.errors
ثم يجري التخلّص منه. يمكن للأصناف الفرعية أن تعيد تعريف هذا التابع لتغيير الصيغة أو لإعادة توجيه المخرجات، أو إرسال الأخطاء برسالة إلكترونية إلى مدير النظام، أو اتخاذ الإجراء المناسب.
traceback_limit
تمثّل هذه الخاصية أقصى عدد ممكن من الإطارات frames المضمّنة في مخرجات الأخطاء tracebacks بواسطة التابع الافتراضي log_excetion()
. إن كانت قيمة هذه الخاصية هي None فستُضمَّن جميع الإطارات.
التابع error_output(environ, start_response)
هذا التابع هو تطبيق WSGI وظيفته إنتاج صفحة خطأ للمستخدمين، ويُنفّذ هذا التابع فقط عند حدوث خطأ قبل إرسال الترويسات إلى طرف العميل.
يمكن لهذا التابع الوصول إلى معلومات الخطأ الحالي باستخدام الدالة sys.exc_info()
، ويجب أن يمرّر التابع المعلومات إلى الخاصية start_response
عند استدعائه (بحسب ما هو موصوف في قسم "Error Handling" في PEP 3333).
يستخدم التابع افتراضيًا الخصائص error_status
و error_headers
و error_body
لإنتاج صفحة مخرجات، ويمكن للأصناف الفرعية أن تعيد تعريف هذا السلوك وذلك لإنتاج مخرجات أخطاء بخصائص ومميّزات مختلفة.
ولكن ومن الناحية الأمنية لا يُنصح بعرض تشخيصات الأخطاء diagnostics على المستخدمين القدماء؛ بل يجب أن يكون هناك بعض الإجراءات الخاصة التي يجب اتخاذها ليتمكن المستخدم من عرض مخرجات تشخيص الأخطاء، ولهذا لا يتضمّن التابع هذا السلوك افتراضيًا.
error_status
حالة HTTP المستخدمة لاستجابات الأخطاء. يجب أن تكون الخاصية سلسلة حالة نصية كما هو معرّف في PEP 3333، والقيمة الافتراضية لهذه الخاصية هي الكود والرسالة 500.
error_headers
ترويسة HTTP المستخدم في استجابات الأخطاء. يجب أن تكون قيمة هذه الخاصية قائمة تتضمّن ترويسات استجابات WSGI والتي تكون صفًّا يأخذ الصيغة (name, value)
، وكما هو موصوف في PEP 3333. تعيّن القائمة الافتراضية المحتوى إلى text/plain.
error_body
تمثّل هذه الخاصية متن استجابة الخطأ. يجب أن تكون قيمة الخاصية من نوع bytestring
تحتوي على متن استجابة HTTP. القيمة الافتراضية لهذه الخاصية هي "A server error occurred. Please contact the administrator"
.
الخصائص والتوابع الخاصّة بـالقسم "Optional Platform-Specific File Handling" في المعيار PEP 3333
wsgi_file_wrapper
تأخذ هذه الخاصية القيمة None
أو دالة تولّد الصنف wsgi.file_wrapper
. القيمة الافتراضية لهذه الخاصية هي الصنف wsgiref.util.FileWrapper
.
التابع sendfile()
أعد تعريف هذا التابع لاستخدام عملية نقل ملفّات خاصّة بالمنصّة المستخدمة platform-specific file transmission. يُستدعى هذا التابع عندما تكون القيمة المعادة من التطبيق نسخة من الصنف المعيّن في الخاصية wsgi_file_wrapper
فقط. يجب أن يعيد التابع قيمة صحيحة إن تمكن من نقل الملف بنجاح، وبهذا لن تنّفذ عملية النقل الافتراضية. يعيد التابع افتراضيًا القيمة خاطئة.
انظر أيضًا
- الصنف
CGIHandler
: يمكن الاستفادة من هذا الصنف عند الحاجة إلى تشغيل تطبيق WSGI كشيفرة CGI. - الصنف
IISCGIHandler
: هذا الصنف هو بديل خاص للصنفCGIHandler
، ويستخدم لنشر التطبيقات على مخدّم الويب IIS الخاص بمايكروسوفت. - الصنف
BaseCGIHandler
: هذا الصنف مشابه للصنفCGIHandler
، ولكن عوضًا عن استخدام الوحدتينsys
وos
، فإنّ بيئة CGI و تدفقات المدخلات والمخرجات تحدّد من قبل المستخدم. - الصنف
SimpleHandler
: هذا الصنف مشابه للصنفBaseCGIHandler
، ولكنّه مصمّم للاستخدام مع المخدمّات من نوع HTTP.