您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

python中flask应用(表单处理)

2024/3/25 15:51:57发布23次查看
本篇文章给大家带来的内容是关于python中flask应用(表单处理),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
1、为什么使用flask-wtf?
request对象公开了所有客户端发送的请求信息。特别是request.form可以访问post请求提交的表单数据。
尽管flask的request对象提供的支持足以处理web表单,但依然有许多任务会变得单调且重复。
表单的html代码生成和验证提交的表单数据就是两个很好的例子。
优势:
flask-wtf扩展使得处理web表单能获得更愉快的体验。该扩展是一个封装了与框架无关的wtforms包的flask集成。
2、什么是表单处理?
在网页中,为了和用户进行信息交互总是不得不出现一些表单。
flask设计了wtform表单库来使flask可以更加简便地管理操作表单数据。
wtform中最重要的几个概念如下:
1). form类,开发者自定义的表单必须继承自form类或者其子类。
form类最主要的功能是通过其所包含的field类提供对表单内数据的快捷访问方式。
2). 各种field类,即字段。一般而言每个field类都对应一个input的html标签。
比如wtform自带的一些field类比如booleanfield就对应<input type="checkbox">,
submitfield就对应<input type="submit">等等。
3). validator类。这个类用于验证用户输入的数据的合法性。
比如length验证器可以用于验证输入数据的长度,
fileallowed验证上传文件的类型等等。
另外,flask为了防范csfr(cross-site request forgery)攻击,   默认在使用flask-wtf之前要求app一定要设置过secret_key。   最简单地可以通过app.config['secret_key'] = 'xxxx'来配置。
3、常见的field类
passwordfield   密码字段,自动将输入转化为小黑点
datefield       文本字段,格式要求为datetime.date一样
intergerfield   文本字段,格式要求是整数
decimalfield    文本字段,格式要求和decimal.decimal一样
floatfield      文本字段,值是浮点数
booleanfield    复选框,值为true或者false
radiofield      一组单选框
selectfield     下拉列表,需要注意一下的是choices参数确定了下拉选项,但是和html中的<select> 标签一样,其是一个tuple组成的列表,可以认为每个tuple的第一项是选项的真正的值,而第二项是alias。
multipleselectfield可选多个值的下拉列表
validator验证函数
validator是验证函数,把一个字段绑定某个验证函数之后,flask会在接收表单中的数据之前对数据做一个验证,如果验证成功才会接收数据。验证函数validator如下,具体的validator可能需要的参数不太一样,这里只给出一些常用的,更多详细的用法可以参见wtforms/validators.py文件的源码,参看每一个validator类需要哪些参数:
*基本上每一个validator都有message参数,指出当输入数据不符合validator要求时显示什么信息。
email验证电子邮件地址的合法性,要求正则模式是^.+@(12+)$
equalto比较两个字段的值,通常用于输入两次密码等场景,可写参数fieldname,不过注意其是一个字符串变量,指向同表单中的另一个字段的字段名
ipaddress验证ipv4地址,参数默认ipv4=true,ipv6=false。如果想要验证ipv6可以设置这两个参数反过来。
length验证输入的字符串的长度,可以有min,max两个参数指出要设置的长度下限和上限,注意参数类型是字符串,不是int!!
numberrange验证输入数字是否在范围内,可以有min和max两个参数指出数字上限下限,注意参数类型是字符串,不是int!!然后在这个validator的message参数里可以设置%(min)s和%(max)s两个格式化部分,来告诉前端这个范围到底是多少。其他validator也有这种类似的小技巧,可以参看源码。
optional无输入值时跳过同字段的其他验证函数
required必填字段
regexp用正则表达式验证值,参数regex='正则模式'
url验证url,要求正则模式是^[a-z]+://(?p<host>3+)(?p<port>:[0-9]+)?(?p<path>/.*)?$
anyof确保值在可选值列表中。参数是values(一个可选值的列表)。特别提下,和selectfield进行配合使用时,不知道为什么selectfield的choices中项的值不能是数字。。否则anyof的values参数中即使有相关数字也无法识别出当前选项是合法选项。我怀疑noneof可能也是一样的套路。
noneof确保值不在可选值列表中
#forms.py文件:用来设定规则from flask_wtf import flaskformfrom flask_wtf.file import filerequired, fileallowedfrom wtforms import stringfield, passwordfield, submitfield, filefieldfrom wtforms.validators import datarequired, lengthclass loginform(flaskform):    name = stringfield(        label=用户名/邮箱/手机号,        validators=[            # datarequired(请输入用户名),            length(3, 20, message=长度不符),        ]    )    passwd = passwordfield(        label=密码,        validators=[            # datarequired(请输入密码),            length(3, 20),        ], )    file = filefield(        label=简历,        validators=[            filerequired(),            fileallowed(['pdf', 'txt'], 'pdf 能被接收')        ]    )
#templates/demo/login.html<!doctype html><html lang="en"><head>    <meta charset="utf-8">    <title>title</title></head><body><form method="post" action="/login/">    {{ form.hidden_tag() }}    {{ form.name.label }} {{ form.name }}    {{ form.passwd.label }} {{ form.passwd }}    {{ form.file }}    <input type="submit" value="go"></form></body></html>
#主程序import randomfrom flask import flask, redirect, render_templatefrom forms import loginformfrom flask_bootstrap import  bootstrapapp = flask(__name__)bootstrap = bootstrap(app)app.config['secret_key'] =  random._urandom(24)@app.route('/success/')def success():    return  success@app.route('/login/', methods=('get', 'post'))def submit():    # 实例化表单对象;    form = loginform()    if form.validate_on_submit():        print(form.data)        return redirect('/success/')    return render_template('demo/login.html', form=form)app.run()
以上就是python中flask应用(表单处理)的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product