自定义Form组件

自定义Form组件,第1张

概述<divid=\"cnblogs_post_body\"class=\"blogpost-body\"><h1class=\"title\">一、获取类里面的静态属性以及动态属性的方法

<div ID="cnblogs_post_body" >
<h1 >一、获取类里面的静态属性以及动态属性的方法
<p >方式一:


<div >

= 123     = 123= 456    = =

= 123 = = 22 (cls,*args,**(cls. object.Foo2()

=<span >#<span > ===========自定义插件===============
<span >class
<span > Textinput(object):
<span >def
<span >str
<span >(self):
<span >return
<span >'
<span ><input type="text">
<span >'

<span >class<span > Emailinput(object):
<span >def <span >str<span >(self):
<span >return <span >'<span ><input type="email"><span >'

<span >#<span > ============字段:内部包含正则用于验证======================
<span >class<span > FIEld(object):
<span >def <span >init(self,required=True,error_message=None,Widgets=<span > None):
self.required =<span > required
self.error_message =<span > error_message
<span >if <span >not<span > Widgets:
self.Widgets = Textinput() <span >#<span >设置默认
<span >else<span >:
self.Widgets =<span > Widgets

</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;def</span> <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800080;"&gt;__str__</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt;(self):    </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt; return self.<a href="https://m.jb51.cc/tag/Widget/" target="_blank" >Widget</a>s</span>    <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;return</span> str(self.<a href="https://m.jb51.cc/tag/Widget/" target="_blank" >Widget</a>s)  <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;将对象转成字符串</span>

<span >class<span > CharFIEld(FIEld):

</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;def</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; val<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a>(self,val):    </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;if</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; self.<a href="https://www.jb51.cc/tag/required/" target="_blank" >required</a>:        </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;if</span> <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;not</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; val:            msg </span>= self.error_message[<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;'</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;<a href="https://www.jb51.cc/tag/required/" target="_blank" >required</a></span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;'</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt;]            </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;raise</span> Val<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a>ateError(msg)  <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" >调用</a><a href="https://www.jb51.cc/tag/zidingyi/" target="_blank" >自定义</a>的异常</span>    <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;return</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; val

<span >class<span > EmailFIEld(FIEld):
ERG = <span >"<span >^\w+@\w+$<span >"
<span >def<span > valID(self,val):
<span >if<span > self.required:
<span >if <span >not<span > val:
msg = self.error_message[<span >'<span >required<span >'<span >]
<span >raise<span > ValIDateError(msg)
<span >#<span > print(val,type(val))
result =<span > re.match(self.ERG,val)
<span >if <span >not<span > result:
msg = self.error_message.get(<span >'<span >invalID<span >',<span >'<span >格式错误<span >'<span >)
<span >raise<span > ValIDateError(msg)
<span >return<span > val

<span >#<span > ==========================
<span >class<span > Form(object):
<span >def <span >init<span >(self,data):
<span >#<span > print(UserForm.dict)#获取派生类中的所有静态字段
<span >#<span > print(self.class.dict) #静态动态的获取类中的所有静态字段
self.data =<span > data
self.fIElds = copy.deepcopy(self.<span >class.declare_fIEld) <span >#<span >获取字段
self.clean_data =<span > {}
self.errors =<span > {}
<span >def <span >new(cls,**kwargs): <span >#<span >在new里面也可以获取类中的所有静态字段
declare_fIEld =<span > {}
<span >for fIEld_name,fIEld <span >in cls.<span >dict<span >.items():
<span >#<span > print(fIEld_name,fIEld)
<span >if<span > isinstance(fIEld,FIEld):
declare_fIEld[fIEld_name] =<span > fIEld
cls.declare_fIEld =<span > declare_fIEld
<span >return object.<span >new(cls) <span >#<span >创建对象

<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;def</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; is_val<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a>(self):    </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;<a href="https://www.jb51.cc/tag/yonghu/" target="_blank" >用户</a>提交的数据</span>    <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt; self.data  #{'user<a href="https://m.jb51.cc/tag/name/" target="_blank" >name</a>':"zzz","pwd":18}</span>    <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt; self.f<a href="https://m.jb51.cc/tag/IE/" target="_blank" >IE</a>lds #{'user<a href="https://m.jb51.cc/tag/name/" target="_blank" >name</a>': CharF<a href="https://m.jb51.cc/tag/IE/" target="_blank" >IE</a>ld(),"pwd": EmailF<a href="https://m.jb51.cc/tag/IE/" target="_blank" >IE</a>ld()}</span>    <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;for</span> f<a href="https://m.jb51.cc/tag/IE/" target="_blank" >IE</a>ld_<a href="https://m.jb51.cc/tag/name/" target="_blank" >name</a>,f<a href="https://m.jb51.cc/tag/IE/" target="_blank" >IE</a>ld <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;in</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; self.f<a href="https://m.jb51.cc/tag/IE/" target="_blank" >IE</a>lds.items():        </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;try</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt;:            <a href="https://m.jb51.cc/tag/input/" target="_blank" >input</a>_val </span>=<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; self.data.get(f<a href="https://m.jb51.cc/tag/IE/" target="_blank" >IE</a>ld_<a href="https://m.jb51.cc/tag/name/" target="_blank" >name</a>)            </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt; print("---------------",f<a href="https://m.jb51.cc/tag/IE/" target="_blank" >IE</a>ld_<a href="https://m.jb51.cc/tag/name/" target="_blank" >name</a>,<a href="https://m.jb51.cc/tag/input/" target="_blank" >input</a>_val)</span>            val = f<a href="https://m.jb51.cc/tag/IE/" target="_blank" >IE</a>ld.val<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a>(<a href="https://m.jb51.cc/tag/input/" target="_blank" >input</a>_val)  <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;内置的验证规则自己去验证</span>            method = getattr(self,<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;clean_<a href="https://www.jb51.cc/tag/s/" target="_blank" >%s</a></span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span>%f<a href="https://m.jb51.cc/tag/IE/" target="_blank" >IE</a>ld_<a href="https://m.jb51.cc/tag/name/" target="_blank" >name</a>,None)  <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;<a href="https://www.jb51.cc/tag/mo/" target="_blank" >默</a>认为None</span>            <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;if</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; method:                val </span>=<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; method(val)            self.clean_data[f<a href="https://m.jb51.cc/tag/IE/" target="_blank" >IE</a>ld_<a href="https://m.jb51.cc/tag/name/" target="_blank" >name</a>] </span>=<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; val        </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;except</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; Val<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a>ateError as e:            self.errors[f<a href="https://m.jb51.cc/tag/IE/" target="_blank" >IE</a>ld_<a href="https://m.jb51.cc/tag/name/" target="_blank" >name</a>] </span>=<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; e.detail    </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;return</span> len(self.errors) ==0 <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;根据<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" >错误</a>的返回,如果没有<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" >错误</a>返回True,有<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" >错误</a>返回False</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;def</span>  <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800080;"&gt;__iter__</span>(self):  <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;#########<a href="https://www.jb51.cc/tag/zidingyi/" target="_blank" >自定义</a><a href="https://www.jb51.cc/tag/shengcheng/" target="_blank" >生成</a><a href="https://www.jb51.cc/tag/biaoqian/" target="_blank" >标签</a>3</span>    <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;return</span> iter(self.f<a href="https://m.jb51.cc/tag/IE/" target="_blank" >IE</a>lds.values())  <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;#</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;返回的是<a href="https://www.jb51.cc/tag/yige/" target="_blank" >一个</a>迭代器</span>

<span >#<span > =======================
<span >class<span > UserForm(Form):
username = CharFIEld(error_message={<span >'<span >required<span >': <span >'<span >用户名不能为空<span >'},Widgets=<span >Textinput())
<span >#<span > email = EmailFIEld(error_message={'required': '密码不能为空','invalID': '邮箱格式错误'},Widgets=Emailinput())
<span >

obj = UserForm(data={<span >'<span >username<span >':<span >"<span >haiyan<span >",<span >"<span >email<span >":<span >"<span >dsfsgd<span >"<span >})
<span >if<span > obj.is_valID():
<span >print<span >(obj.clean_data)
<span >else<span >:
<span >print(obj.errors)

总结

以上是内存溢出为你收集整理的自定义Form组件全部内容,希望文章能够帮你解决自定义Form组件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1239534.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存