from flask import Flask,render_template,request,session
from random import randint
from formscheck2 import LoginForm
app = Flask(__name__)
app.secret_key = 'sdfsdfsdf'
@app.route('/')
def index():
return 'hello'
from wtforms import Form,StringField
# 验证验证码长度]
from wtforms.validators import Length,ValidationError # 这个是返回异常
from flask import session
class LoginForm(Form):
code = StringField(validators=[Length(4,4)]) # 但是这只是简单的验证并不能满足数据内容匹配
def validate_code(self,field):
# 前端的代码等于后端的属性
font_code = field.data
# 服务器session的验证]
server_code = str(session.get('code'))
print(f'前端的数据是{font_code},服务器的数据是{server_code}')
print(f'前端的数据是{type(font_code)},服务器的数据是{type(server_code)}')
if font_code != server_code:
raise ValidationError('验证码错误!') # 括号里抛出错误的 信息
@app.route('/login/',methods=['GET','POST'])
def register():
if request.method == 'GET':
code = randint(1000,9999)
# 用于接收生成的验证码方便后面进行验证
session['code'] = code
return render_template('login.html',code=code) #form = RegisterForm(request.form)
else:
# form = LoginForm(request.form)
form = LoginForm().validate_code(request.form)
if form.validate:
return '验证成功'
else:
return f'验证失败!!{form.errors}' # 验证失败的原因
if __name__ == '__main__':
app.run(debug=True)
老师就是这个自定义的类似乎没有被引用,我把另外一个包也拿过来了