Flask --WTF 处理表单

本文介绍了如何使用Flask处理表单,包括使用Flask-WTF扩展支持通用表单,并启用CSRF保护。还详细讲解了文件上传的注意事项,如文件重命名、目录创建和格式检查。此外,探讨了Cookie的基本使用、设置与删除,以及Session的原理和过期时间配置。最后提到了钩子函数的概念及其在Flask中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 表单

什么是表单?表单就是收集用户信息的各种表单元素的的集合区域,它的作用是实现用户和服务器的数据交互,通过表单收集客户端输入的数据信息。然后提交到站服务器端进行处理,Form表单是Web应用中最基础的一部分,为了能处理From 表单,Flask-wtf扩展提供了良好的支持。

 

1.使用Flask处理通用表单

说明:

Flask请求对象包含客户端发出的所有请求信息,其中request.form()能获取POST中提交表的数据,尽管Flask的请求对象提供的信息足够处理web的表单,但有些任务很单调,而且需要重复操作。

示列:

from flask import Flask,render_template,views,request

app=Flask(__name__)

@app.route('/login')
def login():
    if request.method=='GET': #如果访问为GET方法,返回应答信息。
        return '这是GET请求'
    else:
        return '这是POST请求'
@app.route('/')
def hello_word():
    return  render_template('index.html')
if __name__ == '__main__':
    app.run(debug=True)

创建一个渲染模块

<div>
    <form action="" method="post">
        <dl>
            <dt>用户名:</dt>
            <input type="text" name="name">
            <dt>密码:</dt>
            <input type="password" name="password">
        </dl>
        <input type="submit" value="登录">
    </form>
</div>

说明:

在上面的过程中,对表单没有进行必要的保护措施,很容易被人利用,控制用户在当前已经登录的Web 应用程序上执行非本意的操作,因此,在实际部署服务器上的代码时候不建议使用这个方式处理表单,推荐使用Flask-WTF方式处理表单。

1.1.Flask-WTF安装

pip  install flask-wtf

 

1.2启用CSRF启用

说明:

Flask-WTF提供了对所有From表单免受跨站请求伪造攻击的技术支持,通过动态的token令牌的方式。

import os
SECRET_KEY=os.urandom(24)    #生成SECRET_KEY(密钥)
CSRF_ENABLED=True   #开启CSRF保护

示列:

创建一个表单

from flask_wtf import Form   #引入基类
from wtforms import StringField,PasswordField  #引入From父类
from wtforms.validators import DataRequired    #引入From验证父类

class MyForm(Form):
    name=StringField('name',validators=[DataRequired(message='这是在传递反馈的信息')])
    password = PasswordField('password', validators=[DataRequired(message='密码不能为空')])


创建一个py.文件


from flask import Flask,render_template,url_for,redirect
from form_wtf import MyForm
import config_s
app=Flask(__name__)
app.config.from_object(config_s)  #添加配置文件

@app.route('/login',methods=('GET','POST'))
def login():
    form=
### 使用 Flask-WTF 进行表单验证 在 Flask 中,`Flask-WTF` 库提供了强大的工具来简化 Web 表单的创建和验证过程。为了实现有效的表单验证,开发者通常会遵循一系列特定的方法。 #### 创建表单类 使用 `Flask-WTF` 时,每个 Web 表单都由一个继承自 `Form` 的类表示[^4]。此表单类定义了一组字段,这些字段作为对象存在,并且可以附加一个或多个验证函数以确保用户输入的有效性。 ```python from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired, Email, EqualTo, ValidationError from models import User class RegistrationForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) email = StringField('Email', validators=[DataRequired(), Email()]) password = PasswordField('Password', validators=[DataRequired()]) confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')]) submit = SubmitField('Sign Up') def validate_email(self, field): if User.query.filter_by(email=field.data).first(): raise ValidationError('该邮箱已被注册') ``` 上述代码展示了如何定义一个简单的注册表单并为其添加基本验证逻辑。对于更复杂的场景,则可以通过重写 `validate_<fieldname>` 方法来自定义额外的验证规则[^5]。 #### 实现 CSRF 保护 除了提供便捷的方式构建表单外,`Flask-WTF` 还自动集成了跨站点请求伪造 (CSRF) 攻击防护机制[^2]。这意味着只要正确配置了应用实例,在每次提交 POST 请求之前都会检查是否存在合法的令牌,从而提高了应用程序的安全性。 #### 处理表单提交 当接收到用户的 HTTP POST 请求后,可以在视图函数内部轻松地处理已填充好的表单实例: ```python @app.route("/register", methods=['GET', 'POST']) def register(): form = RegistrationForm() if form.validate_on_submit(): flash(f'Account created for {form.username.data}!', 'success') return redirect(url_for('home')) return render_template('register.html', title='Register', form=form) ``` 这段代码片段说明了如何接收客户端发送过来的数据并通过调用 `validate_on_submit()` 来触发所有预设以及任何自定义的验证器。如果一切顺利,则继续执行后续操作;反之则返回带有错误提示信息的页面供用户修正其输入内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值