سؤال

وأنا أحب API CherryPy للجلسات، إلا لمزيد من التفاصيل واحدة. بدلا من أن تقول cherrypy.session["spam"] أود أن يكون قادرا على أن أقول session["spam"].

ولسوء الحظ، لا أستطيع ببساطة يملك from cherrypy import session العالمية في واحدة من وحدات بلدي، لأنه لم يتم إنشاء الكائن cherrypy.session حتى أول مرة يتم طلب الصفحة. هل هناك طريقة للحصول على CherryPy تهيئة كائن جلسة على الفور بدلا من طلب الصفحة الأولى؟

ولقد اثنين من البدائل القبيحة إذا كان الجواب بالنفي:

أولا، أستطيع أن أفعل شيئا من هذا القبيل

def import_session():
    global session
    while not hasattr(cherrypy, "session"):
        sleep(0.1)
    session = cherrypy.session

Thread(target=import_session).start()

وهذا يبدو وكأنه حل مشكلة كبيرة، ولكن أنا حقا أكره الكتابة cherrypy.session["spam"] في كل مرة، لذلك بالنسبة لي انه يستحق ذلك.

وبلدي الحل الثاني هو أن تفعل شيئا من هذا القبيل

class SessionKludge:
    def __getitem__(self, name):
        return cherrypy.session[name]
    def __setitem__(self, name, val):
        cherrypy.session[name] = val

session = SessionKludge()

ولكن هذا يشعر وكأنه حل مشكلة اكبر وكنت بحاجة إلى بذل المزيد من العمل لتنفيذ مهام القاموس أخرى مثل .get

وهكذا سيكون بالتأكيد أفضل طريقة بسيطة لتهيئة الكائن نفسي. لا أحد يعرف كيفية القيام بذلك؟

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

المحلول

لCherryPy 3.1، وكنت بحاجة للعثور على فئة فرعية الصحيحة من الدورة، تشغيل في "الإعداد" classmethod، ثم قم بتعيين cherrypy.session إلى ThreadLocalProxy. يحدث كل ذلك في cherrypy.lib.sessions.init، في أجزاء التالية:

# Find the storage class and call setup (first time only).
storage_class = storage_type.title() + 'Session'
storage_class = globals()[storage_class]
if not hasattr(cherrypy, "session"):
    if hasattr(storage_class, "setup"):
        storage_class.setup(**kwargs)

# Create cherrypy.session which will proxy to cherrypy.serving.session
if not hasattr(cherrypy, "session"):
    cherrypy.session = cherrypy._ThreadLocalProxy('session')

وتخفيض (استبدال FileSession مع فئة فرعية تريد):

FileSession.setup(**kwargs)
cherrypy.session = cherrypy._ThreadLocalProxy('session')

وو"kwargs" تتكون من "المهلة"، "clean_freq"، وأي إدخالات فرعية محددة من tools.sessions. * التكوين.

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