千家信息网

python中的Flask Web表单如何使用

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"python中的Flask Web表单如何使用",在日常操作中,相信很多人在python中的Flask Web表单如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2026年10月31日python中的Flask Web表单如何使用

这篇文章主要介绍"python中的Flask Web表单如何使用",在日常操作中,相信很多人在python中的Flask Web表单如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"python中的Flask Web表单如何使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

普通表单提交

在创建模板login.html页面中直接写form表单。

login.html

                Document    
{% if method == 'GET' %} 请求方式:{{method}} {% elif method == 'POST' %} 请求方式:{{method}} 用户名:{{ username }} 密码:{{ password }} {% endif %}

接下来,在视图函数中获取表单数据

login.py

from flask import Flask, render_template, requestapp = Flask(__name__)# index 视图函数@app.route('/login', methods=['GET', 'POST'])def login():    context = dict()    if request.method == 'POST':        username = request.form['username']        password = request.form['password']        print(username, password)        context = {            'username': username,            'password': password,        }        context.update({'method': request.method})    else:        context.update({'method': request.method})    return render_template('login.html', **context)@app.route('/')def index():    return 'hello'if __name__ == '__main__':    app.run(debug=True)

当我们点击提交之后,则会显示:

上面的实现方式是直接采用表单的提交方式。但是有个弊端,假如参数很多的情况下,后台也需要一一进行验证,每次都是先接收参数,再对参数进行校验的话,工作量就会非常的庞大,而且还会出现csrf攻击,这时我们就可以采用Flask-WTF来创建表单,从而避免上述弊端。

Flask-WTF基础

Flask-WTF的主要作用是对用户的请求数据进行验证。我们可以使用pip命令安装该依赖,

pip install flask-wtf

在flask web程序中,因为类FlaskForm由Flask-WTF拓展定义,所以可以从flask.wtf中导入FlaskForm。而字段和函数可以直接从WTForms包中导入,WTForms包中可以支持如下所示的HTML标准字段。

字段说明
StringField表示文本字段
TextAreaField表示多行文本字段
PasswordField表示密码文本字段
HiddenField表示隐藏文本字段
DateField表示日期的文本字段
DateTimeFiled表示时间的文本字段
IntegerFiled表示整数类型的文本字段
DecimalField表示Decimal类型的文本字段
FloatFiled表示Float类型的文本字段
RadioFiled表示单选框字段
SelectFiled表示下拉列表字段

WTForm也包含验证器,它对表单字段进行验证,非常方便。

字段说明
DataRequire检查输入的字段是否为空
Email检查字段是否符合邮件格式的约定
IPAddress在输入字段中验证IP地址
Length验证输入字段中的字符串长度是否符合给定长度
NumberRange验证给定范围内输入字段中的文字
URL验证是否为合法的URL

使用Flask-WTF处理表单

编写两个视图函数,以及一个form表单类,用于注册以及跳转index页面。

login.py

from flask import Flask, render_template, redirect, url_for, sessionfrom flask_wtf import FlaskFormfrom wtforms import StringField, PasswordField, SubmitFieldfrom wtforms.validators import DataRequired, EqualToapp = Flask(__name__)app.config["SECRET_KEY"] = "xhosd6f982yfhowefy29f"class RegisterForm(FlaskForm):    username = StringField(label="用户名", validators=[DataRequired('用户名不能为空')])    password = PasswordField(label="密码", validators=[DataRequired('密码不能为空')])    password_comfirm = PasswordField(label="确认密码", validators=[DataRequired('密码不能为空'), EqualTo('password', '两次密码不一致')])    submit = SubmitField(label='提交')@app.route('/register', methods=['GET', 'POST'])def register():    form  = RegisterForm()    if form.validate_on_submit():        uname = form.username.data        pwd = form.password.data        pwd_com = form.password_comfirm.data        print(uname, pwd, pwd_com)        session['username'] = uname        return redirect(url_for('index'))    return render_template('register.html', form=form)@app.route('/index')def index():    username = session.get('username', '')    return 'hello %s' % usernameif __name__ == '__main__':    app.run(debug=True)

接下来编写一个html模板文件,用于用户注册使用。

register.html

                Document    
{{form.csrf_token}} {{form.username.label}}

{{ form.username }}

{% for msg in form.username.errors %}

{{ msg }}

{% endfor %} {{form.password.label}}

{{ form.password }}

{% for msg in form.password.errors %}

{{ msg }}

{% endfor %} {{form.password_comfirm.label}}

{{ form.password_comfirm }}

{% for msg in form.password.errors %}

{{ msg }}

{% endfor %} {{ form.submit }}

Flask消息闪现

在Flask框架中,方法flash()功能是实现消息闪现提示效果。Flask官方对闪现的解释是对用户的请求做出无刷新的响应。类似于Ajax的刷新效果。

举一个简单的例子,当用户通过表单发送完请求之后,假如用户名或者是密码输入错误,那么服务器就会返回错误的提示信息,并在表单页面上显示。

具体代码,如下所示:

login.py

from flask import Flask, flash, redirect, render_template, request, url_forapp = Flask(__name__)app.secret_key = 'random string'@app.route('/')def index():    return render_template('index.html')@app.route('/login', methods=['GET', 'POST'])def login():    error = None    if request.method == 'POST':        if request.form['username'] != 'admin' or request.form['password'] != 'admin':            flash("用户名或密码错误")        else:            flash('登录成功')            return redirect(url_for('index'))    return render_template('login.html')if __name__ == '__main__':    app.run(debug=True)

login.html

                登录    

username

password

{% for message in get_flashed_messages() %} {% if message %} {{message}} {% endif %} {% endfor %}

index.html

                Document    {% with messages = get_flashed_messages() %}        {% if messages %}            {% for message in messages %}                

{{ message }}

{% endfor %} {% endif %} {% endwith %}

welcome

login

上面的代码实现了URL的跳转,我们首先会进入首页,首页中包含了进入登录页面的链接。

文件上传

在Flas Web程序中要实现文件的上传非常简单,与传递post和get非常的类似。基本流程如下:

  • (1)将在客户端上传的文件保存到flask.request.files对象。

  • (2)使用flask.request.files对象获取上传上来的文件名和文件对象

  • (3)调用文件对象中的方法save()将文件保存到指定的目录中。

简易的文件上传程序如下所示:

upload.py

from flask import Flask, flash, render_template, requestapp = Flask(__name__)@app.route('/upload', methods=['GET', 'POST'])def upload():    if request.method == 'GET':        return render_template('upload.html')    else:        file = request.files['file']        if file:            file.save(file.name + '.png')            return '上传成功'@app.route('/')def index():    return render_template('index.html')if __name__ == '__main__':    app.run(debug=True)

index.html

                Document    

文件上传首页

文件上传

upload.html

                文件上传    

本程序需要点击跳转之后才能进入文件上传页面,这样写的目的只是因为我比较懒,不想再浏览器中输入一大串的url。

目前上述程序仅仅可以上传图片!

文件上传的另一种写法

在Flask中上传文件的步骤非常简单,首先需要一个HTML表单,将enctype属性设置为"multipart/form-data"即可。URL处理程序会从request.file[]对象中提取文件,并将它保存到所需要的位置上。

每个上传的文件首先会保存到服务器上的临时位置,然后将其保存到最终的实际位置。建议使用secure_filename函数获取。

index.html

                Document    

upload.py

from flask import Flask, render_template, requestfrom werkzeug.utils import secure_filenameimport osapp = Flask(__name__)app.config['UPLOAD_FLODER']= 'upload/' # 设置文件保存的路径@app.route('/')def upload_file():    return render_template('upload.html')@app.route('/uploader', methods=['GET', 'POST'])def uploader():    if request.method == 'POST':        f = request.files['file']        print(request.files)        f.save(os.path.join(app.config['UPLOAD_FLODER'], secure_filename(f.filename)))        return '上传成功'    else:        render_template('upload.html')if __name__ == '__main__':    app.run(debug=True)

到此,关于"python中的Flask Web表单如何使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

字段 文件 表单 密码 文本 用户 验证 程序 输入 函数 对象 用户名 页面 方式 学习 成功 接下来 位置 参数 方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网项目 互联网科技开发公司 北京互联网科技有限公司 云电互联网科技 狮子座互联网科技有限公司 互联网科技网站 互联网科技股有哪些 互联网科技实习生岗位职责 玉溪互联网科技怎么选 开一家科技互联网公司需要多少钱 互联网行业科技股 皮皮虾互联网科技有限公司 富国互联网金融科技混合基金 互联网科技包装股份有限公司上市 广州燕处互联网科技有限公司 江苏互联网智能科技产品出厂价 互联网的科技体现在哪里 保山浩联互联网科技有限公司 优雇互联网科技有限公司 互联网科技创新方面的资料 互联网科技公司起名 猪兼强互联网科技 互联网科技视频 宜安科技 互联网金融 天下捷融互联网科技 互联网科技公司的市场部门 珠海东科互联网科技有限公司 广西科技产业互联网是什么 互联网领先科技活动 米泉互联网科技专业怎么样
0