今天要来接续表单的制作,不同於前两天的是,今天的主题比较明确,我们要写各式各样的 dashboard 筛选器。
第一个就来看看贴文的筛选器。
class DashboardFilterForm(FlaskForm):
start = DateField("start", format="%Y-%m-%d", validators=[DataRequired()])
end = DateField("end", format="%Y-%m-%d", validators=[DataRequired()])
submit = SubmitField("Submit")
class AdminDashboardFilter(FlaskForm):
start = DateField("start", format="%Y-%m-%d", validators=[Optional()])
end = DateField("end", format="%Y-%m-%d", validators=[Optional()])
user_id = IntegerField(
"", render_kw={"placeholder": "User ID"}, validators=[Optional()]
)
submit = SubmitField("Submit")
这里有一些之前没出现过的东西,DateField
是一个用来放日期的栏位,他要从 wtforms.fields.html5
引入,他的 format
是指输出的日期格式。IntegerField
跟 DateField
一样从 wtforms.fields.html5
引入,他是一个输入整数的栏位。Optional
是一个新的 validator,他跟其他 validator 是从同一个地方引入的,它的功用是在这个栏位没有被填写的时候不要去做其他的验证,像是前两个栏位就会分别做是否是日期跟是否是整数的验证,如果没有 Optional
的话,就会直接被挡掉,即便使用者没有填资料。
上面的 filter 是给一般使用者用的,如果要使用的话就要开始时间和结束时间都要填,所以加上 DataRequired
。但下面的是给管理员用的,一样是二合一的表单,有可能只想用时间或是 user_id
来做筛选,所以不能有 DataRequired
,而为了避免被型别验证挡下来,我们使用 Optional
来避免後续的验证。
理论上我们还是可以对 start
和 end
做一下两个都要填的验证,但此处就略过了。
同样的道理,我们也可以把第一个给一般使用者的筛选器拿来给管理员用来筛选使用者注册时间,放在管理使用者的页面。但当然不会这麽简单就结束,还有一些其他的东西要加入。
class UserFilterForm(FlaskForm):
user_id = IntegerField(
"User ID", render_kw={"placeholder": "User ID"}, validators=[Optional()]
)
username = StringField("Username", render_kw={"placeholder": "Username"})
start = DateField("start", format="%Y-%m-%d", validators=[Optional()])
end = DateField("end", format="%Y-%m-%d", validators=[Optional()])
submit = SubmitField("Submit")
这里面有绝大部分都是从上面复制的,所以就不多加解释。也一样,我们可以在他後面加入其他 validator 甚至是自己写的函式,但一样就先跳过了。
会做筛选器表单不只是因为有一些新东西可以写,也是因为後面在使用这个表单的时候会用到 cookie,这会是我们唯一一次使用他。
<<: 05 - Uptime - 掌握系统的生命徵象 (3/4) - 透过 Kibana 观看心电图及设定警报
>>: [Day 07 - RWD] 跨平台生存之道 — RWD响应式网页设计
在 Day03 我们使用 GCE 建立一台 VM,今天要学习如何连线到虚拟机,并在服务器上使用 No...
现在来测试一下我们写出来的网页~ Bug1 发现注册之後只会看到"success"...
物件导向概述 物件导向程序设计(Object Oriented Programming)简称OOP,...
前言 身为一个一年纯前端 一开始还用一些000webhost 手动排版 一路上学React 第二份却...
我慢慢的告诉小路,我记得的事,包括那个R... 小路一直强调,只有我一个人参加,然後,不会有什麽NP...