wtform和flask-wtf的区别
- flask-wtc : 集成了wtform, csrf的保护和文件上传功能, 图形验证码
flask-wtf文档
- https://flask-wtf.readthedocs.io/en/stable/
安装flask-wtf
使用flask-wtf
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired, Length
class UserForm(FlaskForm):
name = StringField('name', validators=[DataRequired(), Length()])
Length()
def __init__(self, min=-1, max=-1, message=None):
- min : 最小长度
- max : 最大长度
- message : 提示消息
在前端使用flask-wtform
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户页面</title>
</head>
<body>
<form method="POST" action="/">
{{ uform.name }}
{{ uform.password }}
<input type="submit" value="Go">
</form>
</body>
</html>
需要设置一个secret_key
app.config['SECRET_KEY'] = 'asdfghjkl'
CSRF是什么
- CSRF(Cross-site request forgery),中文名称:跨站请求伪造
- 可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。
CSRF Protection
- 只要使用了FlaskForm, 它都会获取一个CSRF的保护
- CSRF保护需要一个密钥来安全地对令牌进行签名。默认情况下,这将使用Flask应用程序的SECRET_KEY
防止CSRF攻击
- 一次表单的请求会产生一个唯一的代码, 当提交的时候, 会随着数据一起提交到服务器, 服务器会验证两个值, 一个是唯一的代码, 另一个是cookie
- 在前端添加 :
{{ uform.csrf_token }}
全局使用csrf保护
csrf = CSRFProtect(app=app)