Flask-WTF
Flask-WTF是集成WTForms,并带有csrf令牌的安全表单和全局的csrf保护的功能
使用Flask-WTF需要配置参数SECRET_KEY
CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。SECRET_KEY用来生成 加密令牌,当CSRF激活的时候,该设置会根据设置的密匙生成加密令牌
配置参数:
app.config['SECRET_KEY'] = 'python is good'
视图函数:
from flask import Flask, render_template, redirect, url_for, session, request, flash
# 导入wtf扩展的表单类
from flask_wtf import FlaskForm
# 导入自定义表单需要的字段
from wtforms import SubmitField, StringField, PasswordField
# 导入wtf扩展提供的表单验证器
from wtforms.validators import DataRequired, EqualTo
app = Flask(__name__)
app.config['SECRET_KEY'] = 'python is good'
# 自定义表单类,文本字段、密码字段、提交按钮
class Login(FlaskForm): name = StringField(label='用户:', validators=[DataRequired('用户名不能为空')])
pwd = PasswordField(label='密码', validators=[DataRequired('密码不能为空'), EqualTo('pwd1', '密码不一样')])
pwd1 = PasswordField(label='确认密码', validators=[DataRequired('密码不能为空')]) submit = SubmitField('提交')
模板页面
{{ form.csrf_token() }}
{{ form.name.label }}
<p>{{ form.name }}</p>
{% for msg in form.name.errors %
} <p>{{ msg }}</p>
{% endfor %}
{{ form.pwd.label }}
<p>{{ form.pwd }}</p>
{% for msg in form.pwd.errors %}
<p>{{ msg }}</p>
{% endfor %}
{{ form.pwd1.label }}
<p>{{ form.pwd1 }}</p>
{% for msg in form.pwd1.errors %}
<p>{{ msg }}</p>
{% endfor %}
<p>{{ form.submit() }}</p>
{% for x in get_flashed_messages() %}
{{ x }}
{% endfor %}
闪现
闪现的功能是基于session实现,所以我们在使用闪现的时候需要配置secret_key。
@app.route('/upload', methods=['GET', 'POST']) # 支持get、post请求
def upload(): # 视图函数
file = request.files.get('file') # files获取多媒体资源
filename = file.filename
file.save(os.path.join(UPLOAD_FOLDER, filename)) # 保存
flash('上传成功') # 添加闪现信息
return redirect(url_for('index'))
获取闪现
{#获取闪现#}
{% for msg in get_flashed_messages() %}
<h1>{{ msg }}</h1>
{% endfor %}
分类闪现:
flash('上传成功', 'success') # 添加闪现信息
{#获取闪现#}
{% for msg in get_flashed_messages(category_filter=['success']) %}
<h1 style="color: green">{{ msg }}</h1>
{% endfor %}
日志
日志的几种错误 ERROR, WARN,INFO,DEBUG,TRACE
app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')
app.logger.info(filename + '上传成功了.....')