flaskb表单(一)

本文介绍了如何在Flask中处理原生表单及使用Flask-WTF扩展进行表单处理,包括设置CSRF保护、自定义字段验证等,适合Python Flask初学者。
摘要由CSDN通过智能技术生成

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个长度')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值