Flask 之 WTF

from flask_wtf import Form
from wtforms import StringField, PasswordField, validators

class RegisterForm(Form):
    username = StringField('用户名:', [validators.DataRequired('请输入用户名')])
    password = PasswordField('密码:', [validators.DataRequired('请输入密码')])
    password2 = PasswordField('再次密码:', [validators.EqualTo('password', message='俩次密码不一致')])
    email = StringField('邮箱:', [validators.DataRequired('请输入邮箱号'), validators.Email('请输入有效的邮箱')])


    '''
    WTF 是flask 中的一个扩展库
    pip install flask-WTF
    Flask-WTF扩展了提供了WTForm表单,增强表单功能:
        - 增强了表单的验证
        - 防止csrf攻击,就是跨站伪造请求攻击,WTF 表单可以生成一个CSRF令牌
        - 方便渲染页面
    '''

    '''
    自定义WTForm 表单类 需要继承Form 这个类
    StringField        文本字段, 相当于type类型为text的input标签

    PasswordField    密码文本字段

    DateField        文本字段, 值为datetime.date格式
    DateTimeField    文本字段, 值为datetime.datetime格式

    HiddenField        隐藏文本字段

    IntegerField    文本字段, 值为整数
    DecimalField    文本字段, 值为decimal.Decimal
    FloatField        文本字段, 值为浮点数

    BooleanField    复选框, 值为True 和 False
    RadioField        一组单选框
    SelectField        下拉列表

    SelectMultipleField    下拉列表, 可选择多个值
    FileField        文件上传字段
    TextAreaField    多行文本字段

    SubmitField        表单提交按钮
    '''

    '''
    validators 模块中验证器类

    DataRequired    验证字段是否为空,别名required
    Email    验证email 是否有效


    IPAddress    验证是否有效的IP地址
    EqualTo    比较两个字段是否相等

    Length    验证输入字符串的长度
    NumberRange    验证输入的值在数字范围内
    Optional    无输入值时跳过其它验证函数

    Regexp    使用正则表达式验证输入值
    URL    验证是否有效的URL
    AnyOf    确保输入值在可选值列表中
    NoneOf    确保输入值不在可选列表中
    '''
{% extends 'bash.html' %}
{% block title %}
用户登录
{%  endblock %}

{% block header %}
    用户登录
    <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/login.css') }}">

 {%  endblock %}
  {% block body %}
<form action="/login" method="POST">
     <table>
        <tbody>
            <tr>
                <td>用户:</td>
                <td><input type="text" name="uid"></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" name="password"></td>
            </tr>
        <tr align="center">
            <td colspan="2">
                <button type="submit">确定</button>
                <button type="reset">取消</button>
            </td>
        </tr>
        </tbody>
    </table>
    session中uid的数据:    {{ session['uid'] }}
    {{uid}}
    {{password}}
</form>
 {%  endblock %}
/template/login.html
# register.py


from flask import Flask, render_template, request, redirect, url_for
from app_WTForm import RegisterForm


app = Flask(__name__)
app.secret_key = '123'

@app.route('/login/')
def login():

    return render_template('login.html')


@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm()
    if request.method == 'POST':
        if form.validate():
            return redirect(url_for('login'))
        else:
            return render_template('register.html', form=form)
    return render_template('register.html',form=form)

if __name__ == '__main__':
    app.run(debug=True)

 

posted @ 2020-08-26 16:11  Handsome、Snake  阅读(335)  评论(0编辑  收藏  举报