بعض الشكوك حول تنفيذ صفحات الأخطاء المخصصة في Web2Py

StackOverflow https://stackoverflow.com/questions/2391297

  •  25-09-2019
  •  | 
  •  

سؤال

أحاول تنفيذ ديكور لصفحات الأخطاء المخصصة في Web2Py وفقًا لأحد Haiti Todos. المرجع -http://web2py.com/alterego/default/show/75

أحاول الاحتفاظ بها كوحدة نمطية في /الوحدات النمطية حتى أتمكن من استيرادها إلى وحدات التحكم ووضع الديكور بشكل مناسب.

لقد حافظت على الأخطاء في التعامل مع الديكور كـ /modules/onerror.py

وأنا أستوردها مثل هذا من وحدة تحكم يقول (أو.)-

exec('from applications.%s.modules.onerror import onerror as onerror'
                                                       % request.application)

كائن HTTP لم يكن متاحًا في onerror.py لذا فعلت -

from gluon.http import *

ولكن بعد ذلك قرأت أن كائن الطلب غير متوفر أيضًا للديكور كما في السطر -

filename=os.path.join(request.folder,'views/errors/error%i.html'%status)

لدي بعض الشكوك -

  1. هل /دليل الوحدات النمطية مكان جيد للحفاظ على هذا المكون القابل لإعادة الاستخدام؟

  2. هل يتم تحميل الوحدات النمطية في دليل /الوحدات تلقائيًا كحالة Web2Py جديدة؟ إذا كان الأمر كذلك ، فكيف يمكنني الوصول إليها في وحدة تحكم؟

  3. هل هناك طريقة يمكنني من خلالها تمرير كائن الطلب إلى هذا الديكور من وحدة التحكم الخاصة بي؟ تلميحات مرحب بها.

بلدي onerror.py الحالي - http://paste.pocoo.org/show/186165/الطريقة التي أحاول استخدامها في وحدة تحكم - http://paste.pocoo.org/show/186167/

اسمحوا لي أن أعرف إذا كنت أفعل ذلك بطريقة غير شديدة.

هل كانت مفيدة؟

المحلول

تم حلها من خلال القائمة البريدية لمستخدمي Web2Py.

يمكنك أيضًا استخدام: onerror = load_import ('onerror'). onerror

كائن HTTP لم يكن متاحًا في onerror.py لذا فعلت - من gluon.http import *

وحدات Python هي وحدات بيثون طبيعية في Web2Py أيضًا. إنهم يرون فقط الكلمات الرئيسية Python إلا إذا قمت باستيرادها. يحتوي Web2Py على 5 كائنات خاصة (طلب ، استجابة ، جلسة ، ذاكرة التخزين المؤقت ، T) وتطبيقك لديه آخرين (DB ، Auth ، CRUD). نظرًا لأنها تم إنشاء مثيل لها في كل طلب ، لا يمكنهم استيرادها حسب الوحدة ، يجب نقلها بشكل صريح إلى الوظائف في الوحدة النمطية. ضع في اعتبارك أنه على الرغم من أن هذا أمر محرج ، فهذا ما تطلبه الأطر الأخرى للقيام به طوال الوقت لجميع الوظائف. Web2Py يوفر لك هذا للنماذج ووحدات التحكم.

ولكن بعد ذلك أدركت أن كائن الطلب غير متوفر أيضًا للديكور كما هو الحال في السطر - filename = os.path.join (طلب. - 1. هل يتم تحميل الوحدات النمطية في دليل /الوحدات النمطية تلقائيًا كحالة Web2Py جديدة؟ إذا كان الأمر كذلك ، فكيف يمكنني الوصول إليهم؟

لا. إنها وحدات بيثون طبيعية. عليك استيرادها لاستخدامها.

  1. هل هناك طريقة يمكنني من خلالها تمرير كائن الطلب إلى هذا الديكور من وحدة التحكم الخاصة بي؟ تلميحات مرحب بها.

أنت بحاجة إلى meta decorator def meta_decoration (شيء ما): def actual_decorator (f ، شيء ما = شيء): do_whever_you_want () return f () return decorator @meta_decorator (request) def function_to_be_becorated (): return dict () على أي حال لا تحتاج إلى هذا ديكور. ابحث في Routes.examples.py for Roines_Onerror. هناك طريقة بسيطة للقيام بما تريد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top