Flask wtforms实现简单的登录注册

时间:2021-10-17 17:37:12

目录结构

Flask wtforms实现简单的登录注册

视图

# -*- coding:utf-8 -*-
# Author : Niuli
# Data : 2019-02-27 19:26 from flask import render_template
from flask import request
from flask import session
from flask import views
from flask import Blueprint
from wtforms import Form,validators,widgets
from wtforms.fields import simple,core user_bp = Blueprint('user_bp',__name__) #
class User(views.MethodView): def get(self):
return 'hello' user_bp.add_url_rule('/', view_func=User.as_view(name='index')) class LoginForm(Form):
username = simple.StringField(
label='用户名:',
validators=[
validators.DataRequired(message='用户名不能为空'),
validators.Length(min=4,max=8,message='用户名不符合规定(大于4位且小于8位)'),
]
) password = simple.PasswordField(
label='密码:',
validators=[
validators.Length(min=3,max=8,message='密码不能小于3位或大于8位'),
validators.DataRequired(message='密码不能为空!')
]
) class Login(views.MethodView): def get(self):
login_form = LoginForm()
return render_template('login.html', loginform=login_form) def post(self):
# 校验
user_info = LoginForm(request.form)
# 如果校验成功
if user_info.validate():
session['user'] = user_info.data.get('username')
return str(session['user']) return render_template('login.html',loginform=user_info) user_bp.add_url_rule('/login', view_func=Login.as_view(name='login')) class RegForm(Form): username = simple.StringField(
label='用户名: ',
validators=[
validators.DataRequired(message='用户名不能为空'),
],
render_kw={'class': 'my_class'} # 更改标签class
) pwd = simple.PasswordField(
label='密码: ',
validators=[
validators.DataRequired(message='密码不能为空'),
validators.Length(min=4,max=8)
]
) repwd = simple.PasswordField(
label='确认密码: ',
validators=[
validators.EqualTo('pwd',message='两次密码不一致')
]
) gender = core.SelectField(
label='性别: ',
choices=(
(1,'男'),
(2,'女')
),
default=1,
coerce=int
) email = simple.StringField(
label='邮箱: ',
validators=[
validators.Email(message='邮箱格式有误!')
]
) hobby = core.SelectMultipleField(
label='爱好: ',
choices=(
(1,'吃'),
(2,'喝'),
(3,'玩'),
(4,'乐')
),
coerce=int,
default=(1,2)
) class Regist(views.MethodView): def get(self):
reg_info = RegForm()
print('*'*88)
return render_template('reg.html',re=reg_info) def post(self):
reg_info = RegForm(request.form)
if reg_info.validate():
return '注册成功!' return render_template('reg.html',re=reg_info) user_bp.add_url_rule('/reg',view_func=Regist.as_view(name='reg'))

users

模板

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="content-Type" charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> </head>
<body> <div id="app"> <form action="" method="post" novalidate>
<p>{{ loginform.username.label }}{{ loginform.username }}{{ loginform.username.errors[0] }}</p> <p>{{ loginform.password.label }}{{ loginform.password }}{{ loginform.password.errors.0 }}</p>
<button>18