瀏覽代碼

feat: 新增删除用户功能

SongZihuan 3 年之前
父節點
當前提交
9118edda1f
共有 4 個文件被更改,包括 89 次插入1 次删除
  1. 11 0
      static/styles/auth/delete.css
  2. 46 0
      templates/auth/delete.html
  3. 4 0
      templates/auth/yours.html
  4. 28 1
      view/auth.py

+ 11 - 0
static/styles/auth/delete.css

@@ -0,0 +1,11 @@
+.delete-form {
+    background-color: white;
+    border-radius: 10px;
+    border: 2px solid #6b6882;
+    padding: 15px;
+}
+
+.modal div {
+    background-color: white;
+    border-radius: 10px;
+}

+ 46 - 0
templates/auth/delete.html

@@ -0,0 +1,46 @@
+{% extends "base.html" %}
+
+{% block title %} 修改密码 {% endblock %}
+
+{% block style %}
+    {{ super() }}
+    <link href="{{ url_for('static', filename='styles/auth/delete.css') }}" rel="stylesheet">
+{% endblock %}
+
+{% block context %}
+    <section id="base" class="container mt-3">
+    <div class="row">
+        <div class="col-12 col-lg-6 offset-lg-3">
+            <form method="post" action="{{ url_for("auth.delete_user_page") }}" class="delete-form">
+                {{ DeleteUserForm.hidden_tag() }}
+
+                <div class="form-group">
+                    {{ DeleteUserForm.email.label }}
+                    {{ DeleteUserForm.email(class="form-control") }}
+                </div>
+
+                <div id="DeleteModal" class="modal fade" role="dialog" aria-hidden="true">
+                    <div class="modal-dialog">
+                        <div class="modal-content">
+                            <div class="modal-header">
+                                <h4 class="modal-title"> 删除用户? </h4>
+                            </div>
+                            <div class="modal-body">
+                                <p> 是否确认删除用户? </p>
+                            </div>
+                            <div class="modal-footer">
+                                {{ DeleteUserForm.submit(class='btn btn-danger', value='确认') }}
+                                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="text-right">
+                    <a class="btn btn-danger" data-toggle="modal" data-target="#DeleteModal"> 删除用户 </a>
+                </div>
+            </form>
+        </div>
+    </div>
+    </section>
+{% endblock %}

+ 4 - 0
templates/auth/yours.html

@@ -39,6 +39,10 @@
 
                     <a class="card-link" href="{{ url_for('auth.change_passwd_page') }}"> 修改密码 </a>
                     <a class="card-link" data-toggle="modal" data-target="#LogoutModal"> 退出登录 </a>
+                    {% if current_user.check_role('DeleteUser') %}
+                        <a class="card-link" href="{{ url_for('auth.delete_user_page') }}"> 删除用户 </a>
+                    {% endif %}
+
                 </div>
             </div>
         </div>

+ 28 - 1
view/auth.py

@@ -32,7 +32,7 @@ class RegisterForm(FlaskForm):
 
     def validate_email(self, field):
         if load_user_by_email(field.data) is not None:
-            raise ValidationError("Email already register")
+            raise ValidationError("邮箱已被注册")
 
 
 class ChangePasswdForm(FlaskForm):
@@ -44,6 +44,15 @@ class ChangePasswdForm(FlaskForm):
     submit = SubmitField("修改密码")
 
 
+class DeleteUserForm(FlaskForm):
+    email = StringField("邮箱", validators=[DataRequired(), Length(1, 32)])
+    submit = SubmitField("删除用户")
+
+    def validate_email(self, field):
+        if load_user_by_email(field.data) is None:
+            raise ValidationError("邮箱用户不存在")
+
+
 @auth.route('/yours')
 @login_required
 def yours_page():
@@ -130,6 +139,24 @@ def change_passwd_page():
     return render_template("auth/passwd.html", ChangePasswdForm=form)
 
 
+@auth.route('/delete', methods=['GET', 'POST'])
+@login_required
+def delete_user_page():
+    form = DeleteUserForm()
+    if form.validate_on_submit():
+        user = load_user_by_email(form.email.data)
+        if user is None:
+            abort(404)
+            return
+
+        if user.delete():
+            flash("用户删除成功")
+        else:
+            flash("用户删除失败")
+        return redirect(url_for("auth.delete_user_page"))
+    return render_template("auth/delete.html", DeleteUserForm=form)
+
+
 @auth.context_processor
 def inject_base():
     return {"top_nav": ["", "", "", "", "", "active"]}