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)