|
@@ -1,9 +1,10 @@
|
|
|
from flask import blueprints, url_for, request, redirect, render_template, flash, current_app, abort
|
|
|
from flask_login import login_user, current_user, login_required, logout_user
|
|
|
from flask_wtf import FlaskForm
|
|
|
-from wtforms import StringField, PasswordField, BooleanField, SubmitField, ValidationError
|
|
|
+from wtforms import StringField, PasswordField, BooleanField, SubmitField, SelectField
|
|
|
from wtforms.validators import DataRequired, Length, EqualTo
|
|
|
-from app.user import load_user, create_user, check_template
|
|
|
+from app.user import load_user, create_user, check_template, get_template
|
|
|
+from typing import ClassVar
|
|
|
|
|
|
|
|
|
class LoginForm(FlaskForm):
|
|
@@ -13,22 +14,16 @@ class LoginForm(FlaskForm):
|
|
|
submit = SubmitField("Login")
|
|
|
|
|
|
|
|
|
-class RegisterForm(FlaskForm):
|
|
|
- name = StringField("User name", validators=[DataRequired(), Length(1, 32)])
|
|
|
- template = StringField("Template name", validators=[Length(0, 32)])
|
|
|
- passwd = PasswordField("Passwd", validators=[DataRequired(),
|
|
|
- EqualTo("passwd_again", message="两次输入密码不相同"),
|
|
|
- Length(4, 32)])
|
|
|
- passwd_again = PasswordField("Passwd again", validators=[DataRequired()])
|
|
|
- submit = SubmitField("register")
|
|
|
-
|
|
|
- def validate_name(self, field):
|
|
|
- if load_user(field.data, None) is not None:
|
|
|
- raise ValidationError("User is already exist")
|
|
|
-
|
|
|
- def validate_template(self, field):
|
|
|
- if not check_template(field.data):
|
|
|
- raise ValidationError("Template not exist")
|
|
|
+def register_form() -> ClassVar:
|
|
|
+ class Form(FlaskForm):
|
|
|
+ name = StringField("User name", validators=[DataRequired(), Length(1, 32)])
|
|
|
+ template = SelectField("Template", choices=get_template())
|
|
|
+ passwd = PasswordField("Passwd", validators=[DataRequired(),
|
|
|
+ EqualTo("passwd_again", message="两次输入密码不相同"),
|
|
|
+ Length(4, 32)])
|
|
|
+ passwd_again = PasswordField("Passwd again", validators=[DataRequired()])
|
|
|
+ submit = SubmitField("register")
|
|
|
+ return Form()
|
|
|
|
|
|
|
|
|
home = blueprints.Blueprint("home", __name__)
|
|
@@ -38,7 +33,7 @@ home = blueprints.Blueprint("home", __name__)
|
|
|
def index():
|
|
|
if not current_user.is_anonymous:
|
|
|
return redirect(url_for("test.question"))
|
|
|
- return render_template("index.html", login_form=LoginForm(), register_form=RegisterForm())
|
|
|
+ return render_template("index.html", login_form=LoginForm(), register_form=register_form())
|
|
|
|
|
|
|
|
|
@home.route("/login", methods=["POST"])
|
|
@@ -71,19 +66,22 @@ def register():
|
|
|
flash(f"You are login as {current_user.user}")
|
|
|
abort(304)
|
|
|
|
|
|
- register_form = RegisterForm()
|
|
|
- if register_form.validate_on_submit():
|
|
|
- template = register_form.template.data
|
|
|
+ register_ = register_form()
|
|
|
+ if register_.validate_on_submit():
|
|
|
+ template = register_.template.data
|
|
|
if len(template) == 0:
|
|
|
template = "base"
|
|
|
- flat, user = create_user(template, register_form.name.data, register_form.passwd.data)
|
|
|
+ if not check_template(template):
|
|
|
+ flash(f"Template '{template}' not exist")
|
|
|
+ abort(400)
|
|
|
+ flat, user = create_user(template, register_.name.data, register_.passwd.data)
|
|
|
if user is not None:
|
|
|
- current_app.logger.debug(f"{register_form.name.data} with {register_form.template.data} register success")
|
|
|
+ current_app.logger.debug(f"{register_.name.data} with {register_.template.data} register success")
|
|
|
flash("Register success")
|
|
|
else:
|
|
|
current_app.logger.debug(
|
|
|
- f"{register_form.name.data} with {register_form.template.data} register fail [{flat}]")
|
|
|
- flash("Register fail")
|
|
|
+ f"{register_.name.data} with {register_.template.data} register fail [{flat}]")
|
|
|
+ flash("User is already exist")
|
|
|
return redirect(url_for("home.index"))
|
|
|
|
|
|
|