SongZihuan 3 rokov pred
rodič
commit
2889303017
3 zmenil súbory, kde vykonal 51 pridanie a 15 odobranie
  1. 24 2
      app/test.py
  2. 3 0
      app/user.py
  3. 24 13
      templates/test.html

+ 24 - 2
app/test.py

@@ -2,7 +2,7 @@ from flask import blueprints, render_template, current_app, abort, redirect, url
 from flask import send_file
 from flask_login import current_user, login_required
 from flask_wtf import FlaskForm
-from wtforms import StringField, SubmitField, BooleanField
+from wtforms import StringField, SubmitField, BooleanField, PasswordField
 from wtforms.validators import DataRequired, Length
 from app.user import UserWordDataBase
 from itsdangerous import URLSafeTimedSerializer
@@ -22,10 +22,17 @@ class SearchForm(FlaskForm):
     submit = SubmitField("Search")
 
 
+class ResetForm(FlaskForm):
+    name = StringField("User name", validators=[DataRequired(), Length(1, 32)])
+    passwd = PasswordField("Passwd", validators=[DataRequired(), Length(4, 32)])
+    submit = SubmitField("Reset")
+
+
 def __load_word(word):
     user: UserWordDataBase = current_user
     box, box_sum = user.get_box_count()
     search_from = SearchForm()
+    reset_form = ResetForm()
     if word is None:
         return render_template("test.html", word=word, len=len,
                                box=box, box_sum=box_sum,
@@ -34,7 +41,7 @@ def __load_word(word):
     word_id = serializer.dumps({"word": word.name})
     return render_template("test.html", word=word, len=len,
                            word_id=word_id, box=box, box_sum=box_sum,
-                           search=search_from, have_word=True)  # 需要使用len函数
+                           search=search_from, have_word=True, reset=reset_form)
 
 
 @test.route("/")
@@ -169,3 +176,18 @@ def download_table(file_type: str):
         return abort(404)
     df_io.seek(0, io.SEEK_SET)
     return send_file(df_io, attachment_filename=f"{user.user}.henglish.{file_type}", as_attachment=True)
+
+
+@test.route("/reset", methods=["POST"])
+@login_required
+def reset_user():
+    reset = ResetForm()
+    if reset.validate_on_submit():
+        user: UserWordDataBase = current_user
+        if not user.check_passwd(reset.passwd.data):
+            flash("Passwd error.")
+        else:
+            flash("User reset")
+            user.reset()
+        return redirect(url_for("test.question"))
+    abort(404)

+ 3 - 0
app/user.py

@@ -45,6 +45,9 @@ class UserWordDataBase(WordDatabase, UserMixin):
             ret[i[1] - 1] = i[0]
         return ret, sum(ret)
 
+    def reset(self):
+        self.update(table="Word", kw={"box": "1"}, where="1")
+
 
 def check_base_db():
     if os.path.exists(os.path.join(conf["DB_TEMPLATE"], "base.db")):

+ 24 - 13
templates/test.html

@@ -110,22 +110,33 @@
                         </div>
                     </div>
 
-                    <div id="ResetModal" class="modal fade" role="dialog" aria-hidden="true">
-                        <div class="modal-dialog">
-                            <div class="modal-content">
-                                <div class="modal-header">
-                                    <h4 class="modal-title"> Reset user? </h4>
-                                </div>
-                                <div class="modal-body">
-                                    <p> Are you sure you want to reset '{{ current_user.user }}' ? </p>
-                                </div>
-                                <div class="modal-footer">
-                                    <a class="btn btn-danger" href="" > Sure </a>
-                                    <a class="btn btn-secondary" data-dismiss="modal"> No </a>
+                    <form method="post" action="{{ url_for("test.reset_user") }}">
+                        {{ reset.hidden_tag() }}
+                        <div id="ResetModal" class="modal fade" role="dialog" aria-hidden="true">
+                            <div class="modal-dialog">
+                                <div class="modal-content">
+                                    <div class="modal-header">
+                                        <h4 class="modal-title"> Reset user? </h4>
+                                    </div>
+                                    <div class="modal-body">
+                                        <p> Are you sure you want to reset '{{ current_user.user }}' ? </p>
+                                        <div class="form-group text-left">
+                                            {{ reset.name.label }}
+                                            {{ reset.name(class="form-control") }}
+                                        </div>
+                                        <div class="form-group text-left">
+                                            {{ reset.passwd.label }}
+                                            {{ reset.passwd(class="form-control") }}
+                                        </div>
+                                    </div>
+                                    <div class="modal-footer">
+                                        {{ reset.submit(class='btn btn-info mr-2') }}
+                                        <a class="btn btn-secondary" data-dismiss="modal"> No </a>
+                                    </div>
                                 </div>
                             </div>
                         </div>
-                    </div>
+                    </form>
 
                     <div class="col-12 col-lg-6 offset-lg-3 text-left">
                         <p class="h4 mb-2"> User: {{ current_user.user }} </p>