اذهب إلى المحتوى
  • 0

إستخدام مزخرفات التحقق validate decorators على أكثر من حقل في نفس الوقت في فلاسك Flask؟

Mohssen A Mohssen

السؤال

في مشروع فلاسك Flask لدي أستخدم validates decorator في الخاص بـ SQL-Alchemy للتحقق من صحة الحقول ومحتواها، كل شيء على ما يرام طالما أن كل دوال التحقق مستقلة عن بعضها البعض، على النحو التالي:

@validates('password')
def validates_password(self, key, value):
   # password field validation

@validates('repassword')
def validates_repassword(self, key, value):
   # re-password field validation

ولكن بالرغم من ذلك،لدي حقلين (re-password و password) وأنا الآن بحاجة إلى إجراء بعض التحقق من الصحة هذه الحقول معًا، حيث يجب أن أتأكد من أن محتوى كلا الحقلين متساويين.

حاولت تمرير عدة حقول في وقت واحد، ولكن وجدت أنه يتم تشغيل دالة التحقق مرة واحدة لكل معامل، على النحو التالي:

@validates('password', 'repassword')
def validates_password_fields(self, keys, values):
   # field validation
   # password == repassword

ينتج عن ذلك تدفق عمل للتحقق من صحة password ثم التحقق من صحة re-password. ومع ذلك ، أود التحقق من أن كليهما متساويين، كيف أقوم بهذا الأمر؟ هل توجد طريقة للوصول إلى الحقل password أثناء التحقق من الحقل re-password؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

قُم بترتيب الحقول على الشكل الموجود داخل النموذج بعدها قُم بفحص إذا كان الحقل الأخير هو الحقل الذي يتم التحقق من صحته، وإلا قم بإرجاع القيمة دون تحديد.

@validates('password', 'repassword')
def validates_fields(self, key, value):
    if key == 'repassword':
        if (self.password != value) {
        	raise ValueError("Please make sure your passwords match.")
        }
    return value

يكنك أيضا استخدام مُستمع أحداث للحدث before_flush للوصول إلى ما تبحث عنه:

@event.listens_for(Session, 'before_flush')
def validate_passwords(session, flush_context, instances):
    """
    """
    
    for instance in session.new:
        if isinstance(instance, MyData):
            if instance.password != instance.repassword
                raise ValueError("Please make sure your passwords match.")

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...