Browse Source

feat: 单词使用session记录

SongZihuan 3 years ago
parent
commit
53a50f41b2
4 changed files with 28 additions and 17 deletions
  1. 2 2
      app/home.py
  2. 23 12
      app/test.py
  3. 1 1
      app/tool.py
  4. 2 2
      templates/test.html

+ 2 - 2
app/home.py

@@ -60,7 +60,7 @@ def login():
         flash(f"You are login as {current_user.user}")
         abort(304)
 
-    login_form: LoginForm = g.form
+    login_form: LoginForm = g["form"]
     user = load_user(login_form.name.data, login_form.passwd.data)
     if user is not None:
         login_user(user, login_form.remember.data)
@@ -83,7 +83,7 @@ def register():
         flash(f"You are login as {current_user.user}")
         abort(304)
 
-    register_form: RegisterForm = g.form
+    register_form: RegisterForm = g["form"]
     flat, user = create_user(register_form.template.data, register_form.name.data, register_form.passwd.data)
     if user is not None:
         current_app.logger.debug(f"{register_form.name.data} with {register_form.template.data} register success")

+ 23 - 12
app/test.py

@@ -1,4 +1,5 @@
-from flask import blueprints, render_template, current_app, abort, redirect, url_for, flash, make_response, request, g
+from flask import (blueprints, render_template, current_app,
+                   abort, redirect, url_for, flash, make_response, request, g, session)
 from flask import send_file
 from flask_login import current_user, login_required, logout_user
 from flask_wtf import FlaskForm
@@ -65,8 +66,8 @@ def __load_word(word, search_from: SearchForm, reset_delete_form: ResetDeleteFor
     if word is None:
         return render_template("test.html", **template_var, have_word=False)
     serializer = URLSafeTimedSerializer(current_app.config["SECRET_KEY"])
-    word_id = serializer.dumps({"word": word.name})
-    return render_template("test.html", **template_var, word_id=word_id, have_word=True)
+    session["word"] = serializer.dumps({"word": word.name})
+    return render_template("test.html", **template_var, have_word=True)
 
 
 def __load_question(search_from: SearchForm, reset_delete_form: ResetDeleteForm, upload_form: UploadFileForm):
@@ -80,12 +81,17 @@ def question():
     return __load_question(SearchForm(), ResetDeleteForm(), UploadFileForm())
 
 
-@test.route("/right/<string:word_id>")
+@test.route("/right")
 @login_required
-def right(word_id: str):
+def right():
+    word_id = session.get("word", "")
+    session["word"] = ""
+    if len(word_id) == 0:
+        abort(404)
+
     serializer = URLSafeTimedSerializer(current_app.config["SECRET_KEY"])
     try:
-        word: dict = serializer.loads(word_id, max_age=120)  # 120s内生效
+        word: dict = serializer.loads(word_id, max_age=600)  # 600s内生效
         user: UserWordDataBase = current_user
         user.right_word(word["word"])
     except BadData:
@@ -96,12 +102,17 @@ def right(word_id: str):
     return redirect(url_for("test.question"))
 
 
-@test.route("/wrong/<string:word_id>")
+@test.route("/wrong")
 @login_required
-def wrong(word_id: str):
+def wrong():
+    word_id = session.get("word", "")
+    session["word"] = ""
+    if len(word_id) == 0:
+        abort(404)
+
     serializer = URLSafeTimedSerializer(current_app.config["SECRET_KEY"])
     try:
-        word: dict = serializer.loads(word_id, max_age=120)  # 120s内生效
+        word: dict = serializer.loads(word_id, max_age=600)  # 600s内生效
         user: UserWordDataBase = current_user
         user.wrong_word(word["word"])
     except BadData:
@@ -220,7 +231,7 @@ def download_table(file_type: str):
 @form_required(ResetDeleteForm, lambda form: __load_question(SearchForm(), form, UploadFileForm()))
 def reset_user():
     user: UserWordDataBase = current_user
-    if not user.check_passwd(g.form.passwd.data):
+    if not user.check_passwd(g["form"].passwd.data):
         flash("Passwd error.")
     else:
         flash("User reset")
@@ -232,7 +243,7 @@ def reset_user():
 @login_required
 @form_required(ResetDeleteForm, lambda form: __load_question(SearchForm(), form, UploadFileForm()))
 def delete_user():
-    delete_form: ResetDeleteForm = g.form
+    delete_form: ResetDeleteForm = g["form"]
     user: UserWordDataBase = current_user
     if not user.check_passwd(delete_form.passwd.data):
         flash("Passwd error.")
@@ -247,7 +258,7 @@ def delete_user():
 @login_required
 @form_required(ResetDeleteForm, lambda form: __load_question(SearchForm(), form, UploadFileForm()))
 def reset_passwd():
-    reset_form: ResetDeleteForm = g.form
+    reset_form: ResetDeleteForm = g["form"]
     if len(reset_form.new_passwd.data) < 4 or len(reset_form.new_passwd.data) > 32:
         flash("Please enter a password of length 4-32")
     else:

+ 1 - 1
app/tool.py

@@ -25,7 +25,7 @@ def form_required(form: ClassVar[FlaskForm], callback: Optional[Callable] = None
                 if callback is None:
                     return abort(404)
                 return callback(form=f, **kw, **kwargs)
-            g.form = f
+            g["form"] = f
             return func(*args, **kwargs)
         return new_func
     return required

+ 2 - 2
templates/test.html

@@ -85,8 +85,8 @@
                                 <a class="btn btn-dark mr-2 mb-2" href="{{ url_for("test.question") }}"> Next word </a>
                                 <a class="btn btn-light mr-2 mb-2" href="{{ url_for("test.download", word=word.name) }}"> Download word </a>
                                 <a class="btn btn-outline-danger mr-2 mb-2" data-toggle="modal" data-target="#DeleteModal" > Delete word </a>
-                                <a class="btn btn-success mr-2 mb-2" href="{{ url_for("test.right", word_id=word_id) }}"> Right </a>
-                                <a class="btn btn-danger mr-2 mb-2" href="{{ url_for("test.wrong", word_id=word_id) }}" > Wrong </a>
+                                <a class="btn btn-success mr-2 mb-2" href="{{ url_for("test.right") }}"> Right </a>
+                                <a class="btn btn-danger mr-2 mb-2" href="{{ url_for("test.wrong") }}" > Wrong </a>
                             </div>
                         </div>
                     </div>