之前我们讲了Flask中的过滤 继承 包含 宏 今天来说说表单,说起表单大家都不陌生吧,在html中form表单一般用于采集数据和提交数据,在Flask中当然也有表单,现在就说说Flask中的表单的简单应用。
在说表单前给大家先说一下Flask中的消息闪现
Flash中的消息闪现,在官方的解释是用来给用户做出反馈。不过实际上这个功能只是一个记录消息的方法,在某一个请求中记录消息,在下一个请求中获取消息,然后做相应的处理,也就是说flask只存在于两个相邻的请求中“闪现”,第三次请求就不存在这个flash了。
通常情况下配合模板系统进行调用,可以实现一种伪”ajax”请求的效果
基于 flash 模块
from flask import flash
模板输出flash
Web 表单是 Web 应用程序的基本功能。
它是HTML页面中负责数据采集的部件。表单有三个部分组成:表单标签、表单域、表单按钮。表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器。
在Flask中,为了处理web表单,我们可以使用 Flask-WTF 扩展,它封装了 WTForms,并且它有验证表单数据的功能。
直接上代码了,代码中有相应的注释和注意事项:
使用 html 自带的表单
创建模板文件如: login.html,在其中直接写form表单:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>flask普通表单提交数据,使用flask消息闪现来将反馈显示给用户</title> </head> <body> <h1> 用户注册</h1> <br> {# action属性。如果不写 默认提交给自己 methodsh属性 来指定表单的提交方式#} <form method="post"> <lable> 用户名</lable> {# from 提交数据通过name选择器来提交#} <input type="text" name="username" placeholder="请输入用户名"> <br> <label>密码</label> <input type="password" name="password"> <br> <label>确认密码</label> <input type="password" name="password1"> <br> {# 将flask 消息闪现和后台联系起来 #} {# 将消息闪现里面的所有消息遍历,取出需要返回给用户的消息#} {% for message in get_flashed_messages() %} {{ message }} {% endfor %} <input type="submit" value="注册"> </form> </body> </html>
当然这只是简单的表单写入,还需要写一个py文件把它们联系起来。具体如下:
# -*- encoding: utf-8 -*- #flask 的消息闪现以来与flask库,用户发送的请求方式存储在requests模块中 from flask import Flask,flash,render_template,request #导入wtf扩展的表单类 from flask_wtf import FlaskForm #导入自定义表单需要用到的字段类型 from wtforms import SubmitField,StringField,PasswordField #新建一个表单类 class RegisterFrom(FlaskForm): username=StringField('用户名') password=PasswordField('密码') password1=PasswordField('确认密码') submit=SubmitField('注册') #建立对象 app = Flask(__name__) #载入配置文件 app.config.from_pyfile('config.ini') @app.route ('/',methods=['POST','GET']) def index (): #判断client发送的请求类型 #在自己请求自己的逻辑中,GET只用于来解析模板,而POST用来判断数据逻辑 if request.method == 'POST': #使用form属性来接收表单提交过来的数据 username=request.form.get('username') password=request.form.get('password') password1=request.form.get('password1') #等同于 if username == "" or password == "" or password1 =="" if not all([username,password,password1]): #利用闪现消息来提醒用户 flash('参数缺少') elif password !=password1: flash('密码不一致') else: flash('注册成功') return '成功' #将定义号的表单类传递给模板,进行方法化设置 return render_template('day4_wtform.html',form=RegisterFrom()) if __name__ == "__main__": app.run()