Browse Source

feat: 用户注册时显示模板列表

SongZihuan 3 years ago
parent
commit
1d834ef626
4 changed files with 38 additions and 28 deletions
  1. 2 1
      app/app.py
  2. 24 26
      app/home.py
  3. 11 0
      app/user.py
  4. 1 1
      templates/test.html

+ 2 - 1
app/app.py

@@ -1,6 +1,7 @@
-from flask import Flask, render_template
+from flask import Flask, render_template, flash
 from flask.logging import default_handler
 from flask.logging import default_handler
 from flask_login import LoginManager
 from flask_login import LoginManager
+from wtforms import ValidationError
 import configure
 import configure
 from app import home, test, user, word_list
 from app import home, test, user, word_list
 import logging.handlers
 import logging.handlers

+ 24 - 26
app/home.py

@@ -1,9 +1,10 @@
 from flask import blueprints, url_for, request, redirect, render_template, flash, current_app, abort
 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_login import login_user, current_user, login_required, logout_user
 from flask_wtf import FlaskForm
 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 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):
 class LoginForm(FlaskForm):
@@ -13,22 +14,16 @@ class LoginForm(FlaskForm):
     submit = SubmitField("Login")
     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__)
 home = blueprints.Blueprint("home", __name__)
@@ -38,7 +33,7 @@ home = blueprints.Blueprint("home", __name__)
 def index():
 def index():
     if not current_user.is_anonymous:
     if not current_user.is_anonymous:
         return redirect(url_for("test.question"))
         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"])
 @home.route("/login", methods=["POST"])
@@ -71,19 +66,22 @@ def register():
         flash(f"You are login as {current_user.user}")
         flash(f"You are login as {current_user.user}")
         abort(304)
         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:
         if len(template) == 0:
             template = "base"
             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:
         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")
             flash("Register success")
         else:
         else:
             current_app.logger.debug(
             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"))
     return redirect(url_for("home.index"))
 
 
 
 

+ 11 - 0
app/user.py

@@ -60,6 +60,17 @@ def check_template(template: str) -> bool:
     return os.path.exists(os.path.join(conf["DB_TEMPLATE"], f"{template}.db"))
     return os.path.exists(os.path.join(conf["DB_TEMPLATE"], f"{template}.db"))
 
 
 
 
+def get_template():
+    check_base_db()
+    file_list = os.listdir(conf["DB_TEMPLATE"])
+    template = []
+    for i in file_list:
+        if i.endswith(".db"):
+            i = i[:-3]
+            template.append((i, i.replace("_", " ")))
+    return template
+
+
 def create_user(template: str, name: str, passwd: str):
 def create_user(template: str, name: str, passwd: str):
     check_base_db()
     check_base_db()
     if not os.path.exists(os.path.join(conf["DB_TEMPLATE"], f"{template}.db")):
     if not os.path.exists(os.path.join(conf["DB_TEMPLATE"], f"{template}.db")):

+ 1 - 1
templates/test.html

@@ -205,4 +205,4 @@
     <script>
     <script>
         $('#test .active a').tab('show');  // 显示第一个 tab
         $('#test .active a').tab('show');  // 显示第一个 tab
     </script>
     </script>
-{% endblock %}
+{% endblock %}