سؤال

مرحبا، أحاول تحديث صف المستخدم عند تسجيل الدخول في المستخدم. أريد ببساطة زيادة عدد مستخدمي المستخدمين من قبل واحد. هنا هو الرمز في طريقة وحدة التحكم post_login:

@expose()  
def post_login(self, came_from=url('/')):  
    """  
    Redirect the user to the initially requested page on successful  
    authentication or redirect her back to the login page if login failed.  
    """  
    if not request.identity:  
        login_counter = request.environ['repoze.who.logins'] + 1  
        redirect(url('/user/login', came_from=came_from, __logins=login_counter))  

    user_name = request.identity['repoze.who.userid']
    user = User.by_user_name(user_name)
    user.tll_num_logins += 1
    user.tll_last_login = datetime.now()
    redirect(came_from)

سجل المستخدم ببساطة ليس محدثا في قاعدة البيانات. تقول وثائق TG أن مدير المعاملات يجب أن يقوم بتسليم جميع المعاملات وتنفيذ جميع SQL غير المسددة تلقائيا ولكنه لا يبدو أنه يعمل مع التحديث. لقد حاولت وضع DBSession.Mit () بعد الالتزام يدويا ولكن الحصول على رسالة خطأ. وبالمثل، فإن إضافة DBSession.Flush () إلى طريقة وحدة التحكم غير محفرة غير محفرة ولكنها لا تقوم بالفعل بتحديث السجل أيضا.

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

المحلول

آسف كل شيء، اتضح أن مدير المعاملات TG2 كان يعمل بعد كل شيء. جاء الخطأ لأنني كنت أسمي وظيفة post_login خارج مدير المعاملة وبالتالي لم يتم مسح تحديث السجل. لست متأكدا من سبب عدم السماح لي بالارتكاب. لكنني نقلت وحدة تحكم post_login والآن الرمز المذكور أعلاه الذي حددته يعمل، فهو يعمل تلقائيا - لا حاجة حتى بالنسبة إلى dbsession.update (المستخدم).

نصائح أخرى

يجب عليك معرفة كائن الجلسة لتحديث الكائن:

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