我是靠谱客的博主 疯狂皮带,最近开发中收集的这篇文章主要介绍flaskb表单(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

FLASK表单

一、原生的表单

(1) 先添加一个login的模板 代码如下:

 
{% extends 'base.html' %}
{% block title %}
    登录
{% endblock %}
{% block tcontent %}
    <h1>登录页面</h1>
    <form action="{{ url_for('check') }}" method="post">
    <table>
        <tr>
            <td>用户名</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>密码</td>
            <td><input type="password" name="userpass"></td>
        </tr>
        <tr>
            <td><input type="submit" value="submit"></td>
            <td><input type="reset" value="reset"></td>
        </tr>
    </table>
    </form>
{% endblock %}

(2) 添加视图函数

 
 
      
#登录
@app.route('/login/')
def login():
    return render_template('login.html')
#校验
#methods=['post','get'] 允许何种方式来提交
@app.route('/check/',methods=['get'])
def check():
    return '你提交过来了'

(3) 视图传递 和 校验路由 合并为一

 
 
      
@app.route('/login/',methods=['post','get'])
def login():
    info = None
    if request.method == 'POST':
        userName = request.form.get('username')
        info = '欢迎%s'%userName
    return render_template('login.html',info=info)

模板更改为

 
 
      
{% if info %}
{{ info }}
{% endif %}
{#    <form action="{{ url_for('check') }}" method="post">#}
    <form method="post">

如果表单的action属性为 空 或者没有action属性 则提交给当前地址

二、flask-wtf

(1) 说明:

是一个用于表单处理的扩展库 提供了csrf,表单校验等功能 使用方便

(2) 安装

 
 
      
pip install flask-wtf

(3) 表单类 常用的字段类型

字段类型字段说明
StringField普通文本字段
SubmitField提交按钮字段
PasswordField密码字段
HiddenField隐藏文本字段
TextAreaField多行文本域字段
DateField文本字段 datetime.date 格式
DateTimeField文本字段 datetime.datetime 格式
InterField文本字段 值为整数
FloatField文本字段 值为浮点数
BooleanField复选框 值为True 或者 Flase
RadioField单选框
SelectField下拉框
FileField文件上传
 
 
      
百度
字段类型      说  明
StringField 文本字段
TextAreaField 多行文本字段
PasswordField 密码文本字段
HiddenField 隐藏文本字段
DateField 文本字段,值为 datetime.date 格式
DateTimeField 文本字段,值为 datetime.datetime 格式
IntegerField 文本字段,值为整数
DecimalField 文本字段,值为 decimal.Decimal
FloatField 文本字段,值为浮点数
BooleanField 复选框,值为 True 和 False
RadioField 一组单选框
SelectField 下拉列表
SelectMultipleField 下拉列表,可选择多个值
FileField 文件上传字段
SubmitField 表单提交按钮
FormField 把表单作为字段嵌入另一个表单
FieldList 一组指定类型的字段

(4) 常见验证器类

验证器说明
DateRequired必填 required
Email验证是否为邮箱
IPAddressIP地址
Length规定字符的长度 有min 和 max俩个选项
NumberRange输入数值的范围
EqualTo验证俩个字段值的 一致性
URl验证是否为有效的url地址
Regexp正则验证
 
验证函数  说  明
Email  验证电子邮件地址
EqualTo  比较两个字段的值;常用于要求输入两次密码进行确认的情况
IPAddress  验证 IPv4 网络地址
Length  验证输入字符串的长度
NumberRange  验证输入的值在数字范围内
Optional  无输入值时跳过其他验证函数
Required  确保字段中有数据
Regexp  使用正则表达式验证输入值
URL  验证 URL
AnyOf  确保输入值在可选值列表中
NoneOf  确保输入值不在可选值列表中

(5) wtf的csrf

保护所有的表单 免受跨站请求攻击 为了实现 防止 跨站请求 需要设置一个秘钥 使用这个秘钥 再生成加密的令牌 用令牌去验证 数据的真伪

在manage.py文件中去设置秘钥
 
 
      
app = Flask(__name__)
app.config['SECRET_KEY'] = '秘钥字符串'
在模板中使用
 
 
      
{{ form.hidden_tag() }}
{{ form.csrf_token() }}

关闭csrf

 
 
      
def login():
    form = LoginForm(csrf_enabled=False) #默认为True

(6) 不适用bootstrap的表单

 
 
      
<form method="post">
    <table>
        {{ form.hidden_tag() }} #csrf
        <tr>
            <td>{{ form.username.label() }}</td> #表单字段名
            <td>{{ form.username(id='id名称',class='myClass',style='color:red;') }}</td> #表单标签
            <td>{{ form.username.errors }}</td> #提交
        </tr>
        <tr>
            <td>{{ form.submit() }}</td>
        </tr>
    </table>
</form>

(7) 使用bootstrap快速生成的

 
{% extends 'base.html' %}
{% block title %}
    登录
{% endblock %}
{% import 'bootstrap/wtf.html' as wtf %} #导入boot的wtf表单文件
{% block tcontent %}
    {{ wtf.quick_form(form) }} #快速生成表单 
    #常用关键字参数
    action = '提交地址'
    method = '提交类型'
    enctype = '提交方式'
    {{ wtf.quick_form(formaction='',method='',enctype='') }} #快速生成表单 
    {{ wtf.quick_form(form,action = url_for('login')) }}
{% endblock %}

(8) 对应的视图

 
 
      
class LoginForm(FlaskForm):
    username = StringField('用户名',validators=[DataRequired(message='不能为空')],id='newName')
    submit = SubmitField('提交')
    
@app.route('/login/',methods=['post','get'])
def login():
    form = LoginForm()
    #验证是否 是一个有效的提交的表单 如果不是 则会输出错误信息
    if form.validate_on_submit():
        print(form.username.data)
    return render_template('boot_login.html', form=form)

(9) 自定义 字段验证(在使用的时候 正常)

 
 
      
class LoginForm(FlaskForm):
    #系统验证
    username = StringField('用户名',validators=[DataRequired(message='不能为空'),Length(min=4,max=6,message='请输入正确的值')])
    submit = SubmitField('提交')
    #自定义字段验证
    # def validate_属性名(self,field)
    def validate_username(self,field):
        if len(field.data)<5:
            raise ValidationError('用户名不能小于5个长度')

最后

以上就是疯狂皮带为你收集整理的flaskb表单(一)的全部内容,希望文章能够帮你解决flaskb表单(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部