ImportReImportCopyclassValidateerror (Exception):def __init__(self,detail): Self.detail=Detail####################### plug-inclassTextInput (object):def __str__(self):return "<input type= ' text '/>"classEmailInput (object):def __str__(self):return "<input type= ' email '/>"#The ###################### contains a regular inside to verifyclassField (object):def __init__(self,required=true,error_messages=none,widget=None): self.required=Required Self.error_messages=error_messagesif notWidget:self.widget=TextInput ()Else: Self.widget=Widgetsdef __str__(self):returnStr (self.widget)classCharfield (Field):defvalid (self,val):ifself.required:if notval:msg= self.error_messages['Required'] Raisevalidateerror (msg)returnValclassEmailfield (Field): REG="^\[email protected]\w+$" defvalid (self,val):ifself.required:if notval:msg= self.error_messages['Required'] Raisevalidateerror (msg) result=Re.match (self. Reg,val)if notresult:msg= Self.error_messages.get ('Invalid','Format Error') Raisevalidateerror (msg)returnVal####################### Form, get user Submissions + Get defined Field objectsclassForm (object):def __init__(Self,data=None):#get all static fields in a derived class #print (self.__class__.__dict__)Self.data =Data Self.fields= Copy.deepcopy (self.__class__. Declare_field) Self.cleaned_data={} self.errors= {} def __new__(CLS, *args, * *Kwargs): Declare_field= {} forField_name, FieldinchCls.__dict__. Items ():ifisinstance (Field,field): Declare_field[field_name]=Field Cls.declare_field=Declare_fieldreturnObject.__new__(CLS)defIs_valid (self):#user-Submitted data #Self.data # {"username": "Alex", "pwd": +, ' xxx ' : one} #Self.fields # {"username": Charfield (), "pwd": Emailfield ()} forField_name,filedinchSelf.fields.items ():Try: Input_val=Self.data.get (field_name) Val=Filed.valid (input_val) method= GetAttr (self,"cleaned_%s"%Field_name,none)ifMethod:val=Method (val) self.cleaned_data[field_name]=ValexceptValidateerror as E:self.errors[field_name]=E.detailreturnLen (self.errors) = =0def __iter__(self):returniter (Self.fields.values ())classUserForm (Form): Username= Charfield (error_messages={'Required':'user name cannot be empty'},widget=TextInput ()) PWD= Emailfield (error_messages={'Required':'The password cannot be empty','Invalid':'Password Format error'},widget=EmailInput ())################ Applicationsobj = UserForm (data={"username":"SDF","pwd":"SDF",'XXX': 666})ifobj.is_valid ():Print('Validation Successful', Obj.cleaned_data)Else: Print("validation Failed", Obj.errors)###################### HTML ##################### forXinchobj:Print(x)
Python path _ Custom forms Component