我们用form表单来做一个简单的登陆页面:
<form method="post">
<label> 用户名 </label>
{# form提交数据通过name选择器提交 #}
<input type="text" name="username" placeholder="请输入用户名"/>
<br />
<label>密码</label>
<input type="password" name="password"/>
<br />
<label>确认密码</label>
<input type="password" name="password1"/>
<br />
{# 将flash消息闪现和后台联系起来 #}
{# 将消息闪现里的所有消息遍历,取出需要返回给用户的信息#}
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
<input type="submit" value="注册" />
</form>
然后再py文件里配置路由,编写简单的逻辑即可,如下:
@app.route('/')
def index():
#判断发送client发送请求类型
#自己请求自己的逻辑中。GET只用来解析模板,而POST用来判断数据逻辑
if request.method == "POST":
#使用form属性来接受表单提交过来的数据
username = request.form.get('username')
password = request.form.get('password')
session['username'] = username
session['password'] = password
#判断数据是否同时存在
if not all([username,password,password1]):
#利用闪现消息来提醒用户,注意flash需要导包
flash('参数不足')
elif password != password1:
flash('两次密码不一致')
else:
flash('注册成功')
#第一种直接跳转
# return redirect('http://localhost:5000/hello')
#第二中通过方法跳转,这里是当成功是跳转的另一个页面url_for是一个本地跳转的方法,url_for后面跟的是函数方法名
return redirect(url_for('hello'))
#将定义好的表单传递给模板,进行方法化设置
return render_template('day4_form.html')
另外,flask还有一个 Flask wtform 组件
WTForms是一个支持多个web框架的form组件,用于简化form表单的定义和一些操作
首先需要在命令下安装:
pip install flask-wtf
使用时也需要导包:
#导入wtf扩展的表单类
from flask_wtf import FlaskForm
#导入自定义表单需要用到的字段类型
from wtforms import SubmitField,StringField,PasswordField
WTFroms 支持的HTML标准字段:
字段类型 说 明
StringField 文本字段
TextAreaField 多行文本字段
PasswordField 密码文本字段
HiddenField 隐藏文本字段
DateField 文本字段,值为 datetime.date 格式
DateTimeField 文本字段,值为 datetime.datetime 格式
IntegerField 文本字段,值为整数
DecimalField 文本字段,值为 decimal.Decimal
FloatField 文本字段,值为浮点数
BooleanField 复选框,值为 True 和 False
RadioField 一组单选框
SelectField 下拉列表
SelectMultipleField 下拉列表,可选择多个值
FileField 文件上传字段
SubmitField 表单提交按钮
还有一些验证函数:
验证函数 说 明
Email 验证电子邮件地址
EqualTo 比较两个字段的值;常用于要求输入两次密码进行确认的情况
IPAddress 验证 IPv4 网络地址
Length 验证输入字符串的长度
NumberRange 验证输入的值在数字范围内
Optional 无输入值时跳过其他验证函数
Required 确保字段中有数据
Regexp 使用正则表达式验证输入值
URL 验证 URL
AnyOf 确保输入值在可选值列表中
NoneOf 确保输入值不在可选值列表中
我们用WTForm做一个简单的登陆表单:
如上导包之后定义一个表单类:
#新建一个表单类
class RegisterForm(FlaskForm):
username = StringField('用户名')
password = PasswordField('密码')
password1 = PasswordField('确认密码')
submit = SubmitField('注册')
逻辑判断还是用index方法中的逻辑判断
然后在模板中定义:
<form method="POST">
{# 所有通过key调用出来的值必须要和后台表单类所定义的变量一致 #}
{{ form.username.label }} : {{ form.username }}
{{ form.password.label }} : {{ form.password }}
{{ form.passsword1.label }} : {{ form.password1 }}
<br /><br />
{# 将flash消息闪现和后台联系起来 #}
{# 将消息闪现里的所有消息遍历,取出需要返回给用户的信息#}
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
{# 使用session输出值 #}
{{ session['username'] }}
{{ form.submit }}
</form>
WTForm与自定义不同指出在于它本身封装的一些字段类型,输出是通过form'调用即可
还有就是他可以抵制CSRF跨站请求伪造的攻击,更具安全性