当前位置:首页 > 技术分析 > 正文内容

Python Flask Web表单

ruisui883个月前 (03-16)技术分析17

学习照猫画虎,是一种享受,实际上学习的痛苦是短暂的,没去学的痛苦是长期的。以后会有很多瞬间,因为你自己不会,而错失了良机~


1、配置

Flask-WTF 可以把处理Web表单的过程变成一种愉快的体验,首先是安装~

ailx10

10w+ 次咨询

网络安全优秀回答者

网络安全硕士

去咨询

然后是配置一个应用密钥,越复杂越好,这是为了防止CSRF跨站脚本伪造,Flask-WTF为所有表单生成安全令牌,存储在用户会话中~

2、表单类

每个表单都由一个继承 FlaskForm 的类表示,这个类定义表单中的一组字段,每个字段都是一个对象,字段对象可以附属多个验证函数,用于验证用户提交的数据是否有效~

  • NameForm 是一个大表单
  • name 是StringField类对象,表示type="text"的元素
  • submit 是SubmitField类对象,表示type="submit"的元素
  • 对象的第一个参数会渲染成 label

字段类型

说明

BooleanField

复选框,值为True或False

DateField

文本字段,值为datetime.date格式

DateTimeField

文本字段,值为datetime.datetime格式

DecimalField

文本字段,值为decimal.Decimal

FileField

文件上传字段

HiddenField

隐藏的文本字段

MultipleFileField

多文件创段字段

FieldList

一组指定类型的字段

FloatField

文本字段,值为浮点型

FormField

把一个表单作为字段,嵌入另一个表单

IntegerField

文本字段,值为整数

PasswordField

密码文本字段

RadioField

一组单选按钮

SelectField

下拉列表

SelectMultipleField

下拉列表,值可以多选

SubmitField

表单提交按钮

StringField

文本字段

TextAreaField

多行文本字段

常见的wtf 表单验证函数

验证函数

说明

DataRequired

确保转换类型后字段中有数据

Email

验证电子邮件

EqualTo

比较两个字段的值

InputRequired

确保转换类型前字段中有数据

IPAddress

验证IPv4网络地址

Length

验证输入字符串的长度

MacAddress

验证MAC地址

NumberRange

验证输入的值在数字范围之内

Optional

允许字段中没有输入

Regexp

使用正则表达式验证输入值

URL

验证URL

UUID

验证UUID

AnyOf

验证输入值在一组可能的值中

NoneOf

确保输入值不在一组可能的值中

3、把表单渲染成HTML

可以使用Bootstrap预定义的表单样式渲染整个Flask-WTF表单,只需要2句话就可以了,wtf.quick_form() 函数的参数是Flask-WTF表单对象,使用Bootstrap的默认样式渲染传入的表单~

{% import "bootstrap/wtf.html" as wtf %}
{{ wtf.quick_form(form) }}

4、在视图中处理表单

  • 直接请求,没有提交表单,是GET请求
  • 提交表单,就是POST请求
  • form参数和name参数,都会进入index.html进行渲染
@app.route("/",methods=["GET","POST"])
def index():
    name = None
    form = NameForm()
    if form.validate_on_submit():
        name = form.name.data
        form.name.data = ""
    return render_template("index.html",form=form,name=name)

输入ailx10,然后提交表单,渲染效果如下:

5、重定向和用户会话

当我们刷新页面的时候,页面会弹出来一个对话框,这是因为我们是POST提交的表单,页面刷新会再次提交表单,但是这并不是我们期望的~

于是就有了重定向了,我们最好让Web应用以GET方式结尾,这样怎么刷新都没问题~

  • redirect(url_for("index")) 重定向到一个新的URL
  • name=session.get("name") 如果没有GET到内容,返回None
@app.route("/",methods=["GET","POST"])
def index():
    form = NameForm()
    if form.validate_on_submit():
        session["name"] = form.name.data
        return redirect(url_for("index"))
    return render_template("index.html",form=form,name=session.get("name"))

6、闪现消息

请求完成后,有时需要让用户感知状态发送了变化,Flask内置了这个功能~

flash函数可以实现这个效果,如果你第一次和第二次输入的名字不一样,那么会出现一个提醒:“你改名字啦~“

{% block content %}
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %} {% block page_content %}{% endblock %}
{% endblock %}
@app.route("/",methods=["GET","POST"])
def index():
    form = NameForm()
    if form.validate_on_submit():
        old_name = session.get("name")
        if old_name is not None and old_name != form.name.data:
            flash("你改名字啦~")
        session["name"] = form.name.data
        return redirect(url_for("index"))
    return render_template("index.html",form=form,name=session.get("name"))

本篇完,谢谢大家~

发布于 2021-01-12 23:08 (知乎)

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2780.html

分享给朋友:

“Python Flask Web表单” 的相关文章

GitLab-合并请求

描述合并请求可用于在您对项目进行的其他人员之间交换代码,并轻松与他们讨论更改。合并请求的步骤步骤1-在创建新的合并请求之前,GitLab中应该有一个创建的分支。您可以参考本章来创建分支-步骤2-登录到您的GitLab帐户,然后转到“ 项目”部分下的项目 -步骤3-单击“ 合并请求”选项卡,然后单击“...

gitlab简单搭建与应用

一、gitlab1、简介GitLab是利用Ruby on Rails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。与Github类似,GitLab能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历...

2024年,不断突破的一年

迈凯伦F1车队不久前拿下了2024年度总冠军,距离上一次还是二十几年前。在此期间,另一领域内,一个充满革新活力的腕表品牌——RICHARD MILLE理查米尔,正不断发展,与F1运动、帆船、古董车展等领域,共享着对速度与极限的无尽向往。RICHARD MILLE的发展与F1车手们在赛道上的卓越表现交...

「干货」Vue+Element前端导入导出Excel

作者:xrkffgg转发链接:https://segmentfault.com/a/11900000189936191 前言1.1 业务场景由前台导入Excel表格,获取批量数据。根据一个数组导出Excel表格。2 实现原理2.1 引入工具库file-saver、xlsx、script-loader...

精品微信小程序在线考试系统+后台管理系统|前后...

《微信小程序在线考试系统+后台管理系统|前后分离VUE》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等本系统包含微信小程序前台和Java做的后台管理系统,该后台采用前后台前后分离的形式使用Java+VUE微信小程序——前台涉及技术:WXML 和 WXSS、JavaScript...

三勾商城(java+vue3)微信小程序商城+SAAS+前后端源码

项目介绍本系统功能包括: 前台展示+后台管理+SAAS管理端,包括最基本的用户登录注册,下单, 购物车,购买,结算,订单查询,收货地址,后台商品管 理,订单管理,用户管理等等功能,小伙伴一起来看看吧。三勾小程序商城基于springboot+element-ui+uniapp打造的面向开发的小程序商城...