一、表单
表单在页面中次要负责数据采集,一个表单有三个根本组成部分:
表单标签:这外面蕴含了解决表单数据所用 CGI 程序的 URL 以及数据提交到服务器的办法。
表单域:蕴含了文本框明码框、暗藏域多行文本框、复选框单选框下拉抉择框和文件上传框等。
表单按钮:包含提交按钮、复位按钮和个别按钮;用于将数据传送到服务器上的 CGI 脚本或者勾销输出,还能够用表单按钮来管制其余定义了解决脚本的解决工作
常见的表单有注册表单、登录表单、搜寻表单等
视图函数中获取表单数据的形式有两种:
GET 申请提交的表单:request.args.get(‘name’, None)
POST 申请提交的表单:request.from.get(‘age’, None)
二、WTF 表单
WTF 表单是一个第三方的库,能够通过 Python 代码生成表单,而 Flask-WTF 则是 Flask 集成了 WTF 表单性能的实现。
Flask-WTF 能够实现这些性能,
集成 wtforms。
带有 csrf 令牌的平安表单。
全局的 csrf 爱护。
反对验证码(Recaptcha)。
与 Flask-Uploads 一起反对文件上传。
国际化集成。
更多信息能够查看 Flask-WTF 官网。Flask-WTF 须要通过装置才能够应用。
pip3 install Flask-WTF
在 Pycharm 中创立新的 Flask 我的项目 flask-wtf,要应用 Flask-WTF 须要在 app.py 中创立 Flask 对象之后增加如下配置,
配置 WTF 的 CSRF,Value 能够是任意的字符串
app.config[‘WTF_CSRF_SECRET_KEY’] = ‘abc21231fafae2’
第一个表单模型
在我的项目目录下新建一个 form.py 文件,专门用来编写表单模型,以登录表单为例,新增一个 LoginForm 对象,并减少相应的属性
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
class LoginForm(FlaskForm):
username = StringField(label='用户名')
password = PasswordField(label='明码')
submit = SubmitField(label='提交')
表单字段的罕用外围属性如下
属性名属性作用 labelform 表单中的 label 标签,如输入框前的文字描述 default 表单中输入框的默认值 validators 表单验证规定 widget 定制界面的显示方式 description 帮忙文字
在 app.py 中减少视图函数
from flask import Flask, render_template
from form import LoginForm
@app.route(‘/form’)
def form():
login_form = LoginForm()
# 返回 login_form 表单模型,在 form.html 中进行渲染
return render_template('form.html', login_form=login_form)
在 templates 减少 form.html
<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset="UTF-8"/>
<title>Form</title>
</head>
<body>
<h3> 登录 </h3>
<form action=””>
{# 渲染 LoginForm 表单模型中 username 字段的 label 属性 #}
{{login_form.username.label}}:
{{login_form.username}} <br>
{{login_form.password.label}}:
{{login_form.password}} <br>
{{login_form.submit}}
</form>
</body>
</html>
启动利用,浏览器拜访 http://127.0.0.1:5000/form
表单渲染胜利,然而 input 输入框是空白的,能够通过表单模型中字段的 default 属性来设置默认值
其余代码不变
class LoginForm(FlaskForm):
username = StringField(label='用户名', default='stark')
password = PasswordField(label='明码', default='1231231')
submit = SubmitField(label='提交')
再次拜访 http://127.0.0.1:5000/form
用户名字段类型是 StringField 并且显示了设置的默认值,明码是 PasswordField 类型,尽管设置了默认值,然而是不能显示的。在表单中的用户名和明码输入框中输出数据
能够看出明码是非明文显示的
表单模型的字段类型
在第一个表单模型中应用了两个字段类型,别离是 StringField 和 PasswordField,并且在页面输出明码是也可能将明码以非明文的模式显示,除了这两个类型外还有其余的字段类型,
文本 / 字符串相干类型
StringField,字符串输出
PasswordField,明码输出
TextAreaField,长文本输出
HiddenField,暗藏表单域
数值类型既整数和小数相干类型
FloadField,浮点数输出
IntegerField,整数输出
DecimalField,准确小数输出
单选多选等抉择相干类型
RadioField,radio 单选
SelectField,下拉单选
SelectMultipleField,下拉多选
BooleanField,勾选
日期工夫相干类型
DateField,日期抉择
DateTimeField,日期工夫抉择
文件上传相干类型
FileField,文件单选
MultipleFileField,文件多选
其余类型
SubmitField,提交表单按钮
FieldList,自定义的表单抉择列表
FormField,自定义多个字段形成的选项