安装
Flask-WTF及其依赖可使用pip安装
pip install flask_wtf
配置
要求应用配置一个密钥。密钥是一个由随机字符构成的唯一字符串,通过加密或签名以不同的方式提升应用的安全性
app=Flask(__name__) app.secret_key='123321'
如果不设置会报错:
RuntimeError: A secret key is required to use CSRF.
表单类
每个Web表单都由一个继承自FlaskForm的类表示。这个类定义表单中的一组字段,每个字段都用对象表示。字段对象可附属一个或多个验证函数
from flask_wtf import FlaskForm
from wtforms import *
from wtforms.validators import *
class NameForm(FlaskForm):
    username = StringField('用户名',validators=[DataRequired()])
    password = PasswordField('密码',validators=[DataRequired()])
    submit = SubmitField('提交')
StringField类表示属性为type="text"的HTML<input>元素。
SubmitField类表示属性为type="submit"的HTML<input>元素。
WTForms支持的HTML标准字段如表:

WTForms内建的验证函数如表:

渲染表单
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <h1>用户注册登录</h1>
    <form method="post" action="/login">
        {{ form.csrf_token()}}
        {{ form.username.label }}{{ form.username}}
        {{ form.password.label }}{{ form.password}}
        {{ form.submit }}{{errormsg}}
        {% for message in get_flashed_messages() %}
            {{ message }}
        {% endfor %}
    </form>
</head>
<body>
</body>
</html>
{{ form.csrf_token()}}供Flask-WTF的CSRF防护机制使用
{{ form.username.label }}取表单类中设置的标签
视图中处理表单
@app.route("/login",methods=['GET','POST'])
def login():
    form = NameForm()
    if request.method == 'POST':
        if form.validate_on_submit():
            username = request.form.get('username')
            password =  request.form.get('password')
            if username == 'admin' and password == 'admin':
                flash('登录成功')
            else:
                return render_template('newregister.html',form = form, errormsg="登陆失败")
    return render_template('newregister.html', form=form)
提交表单后,如果数据能被所有验证函数接受,那么validate_on_submit()方法的返回值为True,否则返回False。这个函数的返回值决定是重新渲染表单还是处理表单提交的数据。
注:这里用了一个flash(from flask import Flask,render_template,request,flash)
再渲染表单的时候使用{% for message in get_flashed_messages() %} 取遍历取值
友情链接
https://www.cnblogs.com/yetangjian/p/15881588.html
https://www.cnblogs.com/yetangjian/p/15676966.html
https://www.cnblogs.com/yetangjian/p/16049697.html
标签:

留言评论