flask form表单

我们用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跨站请求伪造的攻击,更具安全性

 
原文地址:https://www.cnblogs.com/ssjz12/p/10175160.html