Flask学习记录之Flask-WTF
Flask-wtf时Wtforms库的flask框架扩展,能够方便的处理Web表单
一.定义一个web表单
使用flask-wtf时,每个web表单都由一个继承自flask.ext.wtf.Form的类表示,每个字段都由类中的属性表示,每个字段可以附属多个验证函数
from flask.ext.wtf import Form
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired,EqualTo class RegForm(Form):
username = StringField('Username',validators=[DataRequired()])
password = PasswordField('password', validators=[DataRequired()])
password1 = PasswordField('confirm password', validators=[DataRequired(),
EqualTo('password', 'password not match')
])
submit = SubmitField("submit")
这里定义了一个注册用户的表单,password1需要与password填写一样,字段的第一个属性是表单名,在validators中可以使用不同的验证器
二.使用表单
向模版中传入一个表单实例来渲染表单
@app.route('/reg', methods=('GET', 'POST'))
def reg():
form = RegForm()
#验证表单输入内容是否符合要求
if form.validate_on_submit():
#获取表单提交的内容
return "name:%r,password:%r"%(form.username.data,form.password.data)
return render_template('reg.html', form=form)
模版中
<form action="" method="post" name="login">
{{form.hidden_tag()}}
<p>
Please enter your Name:<br>
{{form.name(size=80)}}<br>
</p>
<p>
Password:<br>
{{ form.password }}
</p>
<p>
Password:<br>
{{ form.password1 }}
</p>
<p>{{ form.submit }}</p>
</form>
form.hidden_tag() 模板参数将被替换为一个隐藏字段,用来是实现在配置中激活的 CSRF 保护。如果你已经激活了 CSRF,这个字段需要出现在你所有的表单中。
Flask-Bootst 提供了快捷的表单显示函数,如可直接使用:
{% extends 'base.html' %}
{% import 'bootstrap/wtf.html' as wtf%}
{% block page_content %}
{{ wtf.quick_form(form) }}
{% endblock %}
三.自定义表单验证
可以自定义表单的验证方式,比如如果数据库已经有了一个用户名就不能再注册同名的用户了,
....
from wtforms import ValidationError
....
class RegForm(Form):
....
#验证username字段时会自动调用这个函数
def validate_username(self,field):
if field.data == 'agmcs':
#抛出的异常提示可作为提示显示
raise ValidationError("the username is already exist")
四.Select控件的使用
class EditProfileAdminForm(Form):
role = SelectField('Role', coerce=int)
#在构造化Form实例时指定selectField的choices内容,
def __init__(self, *args, **kwargs):
super(EditProfileAdminForm, self).__init__( *args,
**kwargs)
self.role.choices = [(role.id, role.name) for role in Role.query.order_by(Role.name).all()]
#choices需要一个列表里面包含数个键值对应的元组 #也可以在初始化后使用form.role.choices = [(role.id, role.name) for role in Role.query.order_by(Role.name).all()] 来添加选项
没有使用Flask-bootstrap的话可以使用如下代码显示:
<div class="form-group" id='cg-{{form.role.id}}'>
{{form.role.label(class='col-lg-2 control-label',for=form.role.id)}}
<div class="col-lg-9">
{{form.role(class='form-control')}}
<span class="help-block" id='hl-{{form.role.id}}'></span>
</div>
</div
五.自定义表单的属性
刚才需要在flask-admin中替换TextArea为CKEDitor,这样就只能在代码中替换,可是ckeditor需要将textarea的class设置成ckedtor,上网查了一下,可以自己定义一个控件属性
明天写//
Flask学习记录之Flask-WTF的更多相关文章
- [ZHUAN]Flask学习记录之Flask-SQLAlchemy
From: http://www.cnblogs.com/agmcs/p/4445583.html 各种查询方式:http://www.360doc.com/content/12/0608/11/93 ...
- Flask学习记录之MarkDown编辑文本
为了让网页支持markdown编辑文本,使用如下了4个库 PageDown : 在前端提供一个可以实时将markdown内容转换成html文本进行效果预览的编辑器 Flask-PageDown: 这个 ...
- Flask学习记录之Flask-SQLAlchemy
Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令. Flask-Migrate ...
- Flask学习记录之Flask-Login
Flask-Loging 可以方便的管理用户会话,保护路由只让认证用户访问 http://flask-login.readthedocs.org/en/latest/ 一.初始化Flask-Login ...
- Flask学习记录之Flask-Admin
相信用过Django框架的都不会忘记它强大的Admin功能,Flask-admin是一款能够与Django Admin所媲美的扩展,能够快速创建Web管理界面,实现了用户.文件增删改查等常用功能:也可 ...
- Flask学习记录之Flask-Migrate
一.配置Flask-Migrate from flask.ext.migrate import Migrate, MigrateCommand migrate = Migrate(app,db) #第 ...
- Flask学习记录之Flask-Moment
Moment.js 是一个简单易用的轻量级JavaScript日期处理类库,提供了日期格式化.日期解析等功能.它支持在浏览器和NodeJS两种环境中运行.此类库能够 将给定的任意日期转换成多种不同的格 ...
- Flask学习记录之Flask-Mail
Flask-Mail可以连接到配置中的SMTP服务器,进行邮件发送,如果没有进行SMTP服务器的配置,将会默认连接到localhost上的 一.配置及初始化 (1)flask应用配置 #配置选项 MA ...
- Flask学习记录之使用Werkzeug散列密码
数据库中直接存放明文密码是很危险的,Werkzeug库中的security能够方便的实现散列密码的计算 security库中 generate_password_hash(password,metho ...
随机推荐
- c++ 高效文本读写
上数据结构课,做project,数据老师要求我们多做测试,而文本文件可以有效记录这些东东,这样我想起了文件的读写,下面是渣渣我个人的一些想法,大神们看见有错的,尽管指出(orz~~~囧,木有人看我的呀 ...
- 转:堆(heap)和栈(stack)有什么区别??
简单的可以理解为: heap:是由malloc之类函数分配的空间所在地.地址是由低向高增长的. stack:是自动分配变量,以及函数调用的时候所使用的一些空间.地址是由高向低减少的. 预备知识—程序的 ...
- JDBC连接mysql,TOMCAT错误: Cannot convert value '0000-00-00 00:00:00' from column 10 to TIMESTAMP
解决思路依据如下URL: http://blog.csdn.net/stail111/article/details/5640109 问题:MySQL数据库,如果数据库中日期字段为空为值为'0000- ...
- 调试单片机内部扩展RAM
51单片机内部只有128字节的RAM(8051),而8052有256字节的RAM,低128字节RAM直接或间接寻址都可以,高128字节RAM与SRF特殊功能寄存器共用地址,SFR只能直接寻址,高128 ...
- Linux下的QQ折腾记
用Linux最重要是要把QQ装好了,webqq很不好用.qq for linux是古董,Linux还是悲惨,很多软件有windows版本,有mac版本,就是不出linux版本.只好用wine来 ...
- A - Network of Schools - poj 1236(求连通分量)
题意:学校有一些单向网络,现在需要传一些文件,1,求最少需要向几个学校分发文件才能让每个学校都收到,2,需要添加几条网络才能在任意一个学校分发都可以传遍所有学校. 分析:首先应该求出来连通分量,进行缩 ...
- JS-异常处理
自定义异常: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...
- SQL Server 各任务所维护
SQL Server 正在运行的代码查看 SELECT [Spid] = session_id , ecid , [Database] = DB_NAME(sp.dbid) , [User] = nt ...
- Color 颜色码-英文名称-十六进制-RGB对照表
色 英文代码 形像颜色 HEX格式 RGB格式 LightPink 浅粉红 #FFB6C1 255,182,193 Pink 粉红 #FFC0CB 255,192,203 Crimson 猩红 # ...
- leetcode:Palindrome Number (判断数字是否回文串) 【面试算法题】
题目: Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could neg ...