2013-02-22 10 views
8

आप Deform/Colander में एक कस्टम सत्यापनकर्ता को कैसे परिभाषित करते हैं जिस पर सभी नोड मानों तक पहुंच है। यह तय करने के लिए कि क्या कोई विशेष मान मान्य है या नहीं, मुझे दो फ़ील्ड से मूल्यों तक पहुंचने की आवश्यकता है?विकृत/कोलेडर सत्यापनकर्ता जिसके पास सभी नोड्स तक पहुंच है?

उत्तर

2

tangibly जवाब है:

def verify_email_validator(form, values): 
    if values['email_address'] != values['verify_email']: 
     raise Invalid(form, 'Email values do not match') 

class MySchema(MappingSchema): 

    def __init__(self, *args, **kwargs): 
     super(KickEntrySchema, self).__init__(*args, **kwargs) 
     self.validator=verify_email_validator # entire form validator 

    email_address = SchemaNode(Email()) 
    verify_email = SchemaNode(Email()) 

नोट प्रपत्र सत्यापनकर्ता शुरू हो जाती है तभी जब अलग-अलग क्षेत्र प्रमाणकों में से कोई भी एक त्रुटि बढ़ा।

+0

यह समाधान है जब आप एक दृश्य में एक फार्म के लिए MySchema बाँध काम नहीं करता है यानी deform.Form (MySchema()। बाँध(), बटन = ('सबमिट', 'अभी नहीं'),। ...)। टिम हॉफमैन का समाधान काम करता है और क्लिक करने लायक है क्योंकि यह एक विधि को ओवरराइड करने के बजाए केवल एक कीवर्ड पैरामीटर पास करने का प्रस्ताव करता है। –

3

सभी कोलंडर क्षेत्रों के लिए एक सत्यापनकर्ता रखने के लिए हम केवल इस

सत्यापनकर्ता विधि कर सकते हैं:

def user_DoesExist(node,appstruct): 
if DBSession.query(User).filter_by(username=appstruct['username']).count() > 0: 
    raise colander.Invalid(node, 'Username already exist.!!') 

स्कीमा:

class UserSchema(CSRFSchema): 
username = colander.SchemaNode(colander.String(), description="Extension of the user") 
name = colander.SchemaNode(colander.String(), description='Full name') 
extension = colander.SchemaNode(colander.String(),description='Extension') 
pin = colander.SchemaNode(colander.String(), description='PIN') 

दृश्य:

+०१२३५१६४१०६१
@view_config(route_name='add_user', permission='admin', renderer='add_user.mako') 
def add_user(self): 
    #Here you can provide validator method as a parameter. And you can validate any field you want. 
    schema = UserSchema(validator = user_DoesExist).bind(request=self.request) 
    form = deform.Form(schema, action=self.request.route_url('add_user'), buttons=('Add User','Cancel')) 

अगर मैं अपने परिदृश्य में गलत हूं तो मुझे सुधारें।

धन्यवाद

संबंधित मुद्दे