flask-wtf扩展扩
概述:
表单扩展库,提供了csrf,表单校验等功能
安装
pip install flask-wtf
一、常见字段类型和验证器
(1)字段类型
(2)常见验证器
代码
base.html
{% extends 'bootstrap/base.html' %}
{% block navbar %}
{% endblock %}
{% block content %}
{% block pagecontent %}
这是我们自己定义的base 以后所有的子模板都继承我就好
{% endblock %}
{% endblock %}
register.html
{% extends 'common/base.html' %}
{% block title %}
注册
{% endblock %}
{% from 'bootstrap/wtf.html' import quick_form %}
{% block pagecontent %}
{{ quick_form(form) }}
{% endblock %}
login.html
{% extends 'common/base.html' %}
{% block title %}
登陆
{% endblock %}
{% from 'bootstrap/wtf.html' import quick_form %}
{% block pagecontent %}
{{ quick_form(form) }}
dsdfsfsdf
{% endblock %}
manage.py
from flask import Flask,request,render_template
from flask_bootstrap import Bootstrap
from flask_script import Manager
from flask_wtf import FlaskForm #导入表单基类
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import DataRequired,Length,EqualTo,Email,ValidationError
app = Flask(__name__)
app.config['SECRET_KEY'] = 'SECRET_KEY'
bootstrap = Bootstrap(app)
manager = Manager(app)
#自定义表单注册类
class Register(FlaskForm):
#username为当前标签的name值 用户名为到那个前标签展示的左侧的label标签 点击用户名 出发当前标签选中节点
username = StringField('用户名',validators=[DataRequired('请输入用户名'),Length(min=6,max=12,message='用户名长度范围在6~12位之间')])
userpass = PasswordField('密码',validators=[DataRequired('请输入密码'),Length(min=6,max=12,message='密码长度范围在6~12位之间')])
confirm = PasswordField('确认密码',validators=[DataRequired('请输入确认密码'),EqualTo('userpass',message='密码和确认密码不一致')])
email = StringField('邮箱',validators=[DataRequired('请输入邮箱地址'),Email(message='请输入正确的邮箱')])
submit = SubmitField('注册')
# 需求,帮我去查看表单中的用户名和邮箱是否在用户表中已存在
def validate_username(self,field):
if field.data == 'zhangsan':
# if User.objcets.filter(username=field.data).exists()
return ValueError('该用户已经存在')
#验证邮箱
def validate_email(self,field):
if field.data == '[email protected]':
raise ValidationError('该邮箱已存在 请重新输入')
#登录表单类
class Login(FlaskForm):
username = StringField('用户名',validators=[DataRequired(message='用户名不能为空'),Length(max=9,min=6,message='太短或太长')])
userpass = PasswordField('密码',validators=[DataRequired('请输入密码'),Length(min=6,max=18,message='密码她顿了')])
submit = SubmitField('登陆')
#登录
@app.route('/login/',methods=['GET','POST'])
def login():
form = Login()
if form.validate_on_submit():
print(request.form)
return render_template('user/login.html',form=form)
#注册
@app.route('/register/',methods=['GET','POST'])
def register():
form = Register() #实例化表单类
# if request.method == 'POST':
# print(request.form)
# return '数据提交过来了'
#这个方法是实现表单校验功能的 csrf,数据正确性 都通过了 则为真 否则为假
if form.validate_on_submit():
# print(request.form)
print(form.username) #拿到username的整个标签
print(form.username.data) #取出username里面的value值
return '数据提交过来了'
return render_template('user/register.html', form=form)
if __name__ == '__main__':
manager.run()
效果