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 %}
# 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)