Не работают валидаторы
Не могу понять, почему не работают валидаторы(Все обновлено до новейшей версии)
from flask import Flask, request, render_template, current_app, g, session, redirect, url_for
from flask_script import Manager, Command
from json import load, dump
from random import randint
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, TextAreaField, PasswordField, BooleanField
from wtforms.validators import (DataRequired, Email, Length, Required, EqualTo)
class RegisterLoginForm(FlaskForm):
new_name = StringField('Login', validators=[DataRequired(), Length(min=3)])
new_psw = PasswordField('Password', validators=[DataRequired(), Length(min=6, message="not less than 6")])
email = StringField("Email", validators=[Email(check_deliverability=True, message="seeming email"), DataRequired()])
equal_psw = PasswordField("Repeat your password", validators=[DataRequired(), EqualTo("new_psw")])
name = StringField('Login', validators=[DataRequired()])
psw = PasswordField('Password', validators=[DataRequired()])
submit = SubmitField("Enter")
app = Flask(__name__)
app.debug = True
manager = Manager(app)
@app.route("/register", methods=['POST', 'GET'])
def register():
form = RegisterLoginForm()
if request.method == "GET":
return render_template('reg.html', form=form)
else:
with open("db.json", 'r') as f:
db = load(f)
new_login = form.new_name.data
new_password = form.new_psw.data
new_email = form.email.data
db.append({"login": new_login, "password": new_password, "id": randint(3, 10000), "email": new_email})
with open('db.json', 'w') as f:
dump(db, f)
print('Удачная регистрация пользователя ' + new_login)
return render_template('reg.html', mess="Удачная регистрация", form=form)
HTML:
<div class="container my-class"><div align="center"><h1>Регистрация</h1></div>
{{ mess }}
<form method="post" action="/register" class="form-contact">
{{ form.hidden_tag() }}
{{ form.new_name.label() }}<br>
{{ form.new_name() }}<br>
{{ form.new_psw.label() }}<br>
{{ form.new_psw() }}<br>
{{ form.equal_psw.label }}<br>
{{ form.equal_psw }}<br>
{{ form.email.label() }}<br>
{{ form.email() }}<br><br>
{{ form.submit() }}
</form>
<br>
</div>
Ответы (1 шт):
Автор решения: Vlad
→ Ссылка
У вас не осуществляется валидация в коде, хотя правила валидации описаны. Попробуйте так:
if request.method == "GET":
return render_template('reg.html', form=form)
else:
if form.validate_on_submit():
with open("db.json", 'r') as f:
db = load(f)
new_login = form.new_name.data
new_password = form.new_psw.data
new_email = form.email.data
db.append({"login": new_login, "password": new_password, "id": randint(3, 10000), "email": new_email})
with open('db.json', 'w') as f:
dump(db, f)
return render_template('reg.html', mess="Удачная регистрация", form=form)
else:
mess = "Ошибка"
return render_template('reg.html', mess=mess, form=form)