소스 검색

feat: 添加日志输出

SongZihuan 2 년 전
부모
커밋
ef0713af41
4개의 변경된 파일52개의 추가작업 그리고 31개의 파일을 삭제
  1. 6 2
      app/archive.py
  2. 31 24
      app/auth.py
  3. 11 4
      app/comment.py
  4. 4 1
      app/login.py

+ 6 - 2
app/archive.py

@@ -6,6 +6,7 @@ from flask_login import login_required
 
 from .db import db, Archive, Role
 from .login import role_required
+from .logger import Logger
 
 
 archive = Blueprint("archive", __name__)
@@ -28,12 +29,13 @@ class CreateArchiveForm(FlaskForm):
 
 
 @archive.route("/all")
-@role_required(Role.CHECK_ARCHIVE)
+@role_required(Role.CHECK_ARCHIVE, "list all archive")
 def list_all_page():
     page = request.args.get("page", 1, type=int)
     pagination = (Archive.query
                   .order_by(Archive.name.asc())
                   .paginate(page=page, per_page=8, error_out=False))
+    Logger.print_load_page_log("list all archive")
     return render_template("archive/list.html",
                            page=page,
                            items=pagination.items,
@@ -43,12 +45,14 @@ def list_all_page():
 
 @archive.route("/create", methods=["GET", "POST"])
 @login_required
-@role_required(Role.CREATE_ARCHIVE)
+@role_required(Role.CREATE_ARCHIVE, "create archive")
 def create_page():
     form = CreateArchiveForm()
     if form.validate_on_submit():
         ac = Archive(name=form.name.data, describe=form.describe.data)
         db.session.add(ac)
         db.session.commit()
+        Logger.print_user_opt_success_log(f"create new archive {ac.name}")
         return redirect(url_for("comment.list_all_page", archive=ac.id, page=1))
+    Logger.print_load_page_log("create archive page")
     return render_template("archive/create.html", form=form)

+ 31 - 24
app/auth.py

@@ -111,6 +111,7 @@ def __load_login_page(passwd_login_form=None, email_login_form=None, register_fo
     if not register_form:
         register_form = RegisterForm()
 
+    Logger.print_load_page_log("user login")
     return render_template("auth/login.html",
                            passwd_login_form=passwd_login_form,
                            email_login_form=email_login_form,
@@ -130,7 +131,7 @@ def auth_page():
 @auth.route('/login/passwd', methods=["GET", "POST"])
 def passwd_login_page():
     if current_user.is_authenticated:  # 用户已经成功登陆
-        Logger.print_user_not_allow_opt_log("passwd-login.txt")
+        Logger.print_user_not_allow_opt_log("passwd-login")
         return redirect(url_for("auth.auth_page"))
 
     form = PasswdLoginForm()
@@ -142,10 +143,10 @@ def passwd_login_page():
             if next_page is None or not next_page.startswith('/'):
                 next_page = url_for('base.index_page')
             flash("登陆成功")
-            Logger.print_user_opt_success_log(f"passwd login.txt {form.email.data}")
+            Logger.print_user_opt_success_log(f"passwd login {form.email.data}")
             return redirect(next_page)
         flash("账号或密码错误")
-        Logger.print_user_opt_fail_log(f"passwd login.txt {form.email.data}")
+        Logger.print_user_opt_fail_log(f"passwd login {form.email.data}")
         return redirect(url_for("auth.passwd_login_page"))
     return __load_login_page(passwd_login_form=form, on_passwd_login=True)
 
@@ -153,7 +154,7 @@ def passwd_login_page():
 @auth.route('/login/email', methods=["GET", "POST"])
 def email_login_page():
     if current_user.is_authenticated:  # 用户已经成功登陆
-        Logger.print_user_not_allow_opt_log("email-login.txt")
+        Logger.print_user_not_allow_opt_log("email-login")
         return redirect(url_for("auth.auth_page"))
 
     form = EmailLoginForm()
@@ -164,10 +165,10 @@ def email_login_page():
             login_url = urljoin(request.host_url, url_for("auth.email_login_confirm_page", token=token))
             send_msg("登录确认", user.email, "login", login_url=login_url)
             flash("登录确认邮件已发送至邮箱")
-            Logger.print_user_opt_success_log(f"email login.txt {form.email.data}")
+            Logger.print_user_opt_success_log(f"email login {form.email.data}")
             return redirect(url_for("base.index_page"))
         flash("账号不存在")
-        Logger.print_user_opt_fail_log(f"email login.txt {form.email.data}")
+        Logger.print_user_opt_fail_log(f"email login {form.email.data}")
         return redirect(url_for("auth.passwd_login_page"))
     return __load_login_page(passwd_login_form=form, on_passwd_login=True)
 
@@ -175,7 +176,7 @@ def email_login_page():
 @auth.route('/register', methods=["GET", "POST"])
 def register_page():
     if current_user.is_authenticated:
-        Logger.print_user_not_allow_opt_log("register.txt")
+        Logger.print_user_not_allow_opt_log("register")
         return redirect(url_for("auth.auth_page"))
 
     form = RegisterForm()
@@ -184,7 +185,7 @@ def register_page():
         register_url = urljoin(request.host_url, url_for("auth.register_confirm_page", token=token))
         send_msg("注册确认", form.email.data, "register", register_url=register_url)
         flash("注册提交成功, 请进入邮箱点击确认注册链接")
-        Logger.print_import_user_opt_success_log(f"register.txt {form.email.data}")
+        Logger.print_import_user_opt_success_log(f"register {form.email.data}")
         return redirect(url_for("base.index_page"))
     return __load_login_page(register_form=form, on_register=True, on_passwd_login=False)
 
@@ -193,16 +194,16 @@ def register_page():
 def register_confirm_page():
     token = request.args.get("token", None)
     if token is None:
-        Logger.print_user_opt_fail_log(f"Confirm (bad token)")
+        Logger.print_user_opt_fail_log(f"register confirm (bad token)")
         return abort(404)
 
     token = User.register_load_token(token)
     if token is None:
-        Logger.print_user_opt_fail_log(f"Confirm (bad token)")
+        Logger.print_user_opt_fail_log(f"register confirm (bad token)")
         return abort(404)
 
     if User.query.filter_by(email=token[0]).first():
-        Logger.print_user_opt_fail_log(f"Confirm (bad token)")
+        Logger.print_user_opt_fail_log(f"register confirm (bad token)")
         return abort(404)
 
     if User.query.limit(1).first():  # 不是第一个用户
@@ -210,13 +211,13 @@ def register_confirm_page():
     else:
         admin = Role.query.filter_by(name="admin").first()
         if admin is None:
-            Logger.print_user_opt_fail_log(f"Role admin not found")
+            Logger.print_sys_opt_fail_log(f"get admin(role)")
             return abort(500)
         new_user = User(email=token[0], passwd_hash=User.get_passwd_hash(token[1]), role=admin)
     db.session.add(new_user)
     db.session.commit()
 
-    Logger.print_import_user_opt_success_log(f"confirm {token[0]} success")
+    Logger.print_user_opt_success_log(f"register confirm {token[0]}")
     flash(f"用户{token[0]}认证完成")
     return redirect(url_for("base.index_page"))
 
@@ -225,22 +226,22 @@ def register_confirm_page():
 def email_login_confirm_page():
     token = request.args.get("token", None)
     if token is None:
-        Logger.print_user_opt_fail_log(f"Confirm (bad token)")
+        Logger.print_user_opt_fail_log(f"login confirm (bad token)")
         return abort(404)
 
     token = User.login_load_token(token)
     if token is None:
-        Logger.print_user_opt_fail_log(f"Confirm (bad token)")
+        Logger.print_user_opt_fail_log(f"login confirm (bad token)")
         return abort(404)
 
     user = User.query.filter_by(email=token[0]).first()
     if not user:
-        Logger.print_user_opt_fail_log(f"Confirm (bad token)")
+        Logger.print_user_opt_fail_log(f"login confirm (bad token)")
         return abort(404)
 
     login_user(user, token[1])
     flash("登陆成功")
-    Logger.print_user_opt_success_log(f"passwd login.txt {user.email}")
+    Logger.print_user_opt_success_log(f"email login {user.email}")
     return redirect(url_for("base.index_page"))
 
 
@@ -268,9 +269,9 @@ def change_passwd_page():
 @auth.route('/logout')
 @login_required
 def logout_page():
-    Logger.print_import_user_opt_success_log(f"logout")
     logout_user()
     flash("退出登录成功")
+    Logger.print_user_opt_success_log(f"logout")
     return redirect(url_for("base.index_page"))
 
 
@@ -284,18 +285,20 @@ def user_page():
     user = User.query.filter_by(id=user_id).first()
     if not user:
         return abort(404)
+    Logger.print_load_page_log(f"user {user.email} page")
     return render_template("auth/user.html", user=user)
 
 
 @auth.route("/follower/list")
 @login_required
-@role_required(Role.CHECK_FOLLOW)
+@role_required(Role.CHECK_FOLLOW, "check follower")
 def follower_page():
     if current_user.follower_count == 0:
         return render_template("auth/no_follow.html", title="粉丝", msg="你暂时一个粉丝都没有哦。")
 
     page = request.args.get("page", 1, type=int)
     pagination = current_user.follower.paginate(page=page, per_page=8, error_out=False)
+    Logger.print_load_page_log(f"user {current_user.email} follower")
     return render_template("auth/follow.html",
                            items=[i.follower for i in pagination.items],
                            pagination=pagination,
@@ -304,13 +307,14 @@ def follower_page():
 
 @auth.route("/followed/list")
 @login_required
-@role_required(Role.CHECK_FOLLOW)
+@role_required(Role.CHECK_FOLLOW, "check followed")
 def followed_page():
     if current_user.followed_count == 0:
         return render_template("auth/no_follow.html", title="关注", msg="你暂时未关注任何人。")
 
     page = request.args.get("page", 1, type=int)
     pagination = current_user.followed.paginate(page=page, per_page=8, error_out=False)
+    Logger.print_load_page_log(f"user {current_user.email} followed")
     return render_template("auth/follow.html",
                            items=[i.followed for i in pagination.items],
                            pagination=pagination,
@@ -319,7 +323,7 @@ def followed_page():
 
 @auth.route("/followed/follow")
 @login_required
-@role_required(Role.FOLLOW)
+@role_required(Role.FOLLOW, "follow")
 def set_follow_page():
     user_id = request.args.get("user", None, type=int)
     if not user_id or user_id == current_user.id:
@@ -342,7 +346,7 @@ def set_follow_page():
 
 @auth.route("/followed/unfollow")
 @login_required
-@role_required(Role.FOLLOW)
+@role_required(Role.FOLLOW, "unfollow")
 def set_unfollow_page():
     user_id = request.args.get("user", None, type=int)
     if not user_id or user_id == current_user.id:
@@ -360,7 +364,7 @@ def set_unfollow_page():
 
 @auth.route("/block")
 @login_required
-@role_required(Role.BLOCK_USER)
+@role_required(Role.BLOCK_USER, "block user")
 def set_block_page():
     user_id = request.args.get("user", None, type=int)
     if not user_id or user_id == current_user.id:
@@ -372,6 +376,7 @@ def set_block_page():
 
     block = Role.query.filter_by(name="block").first()
     if not block:
+        Logger.print_sys_opt_fail_log("get block(role)")
         return abort(500)
 
     user.role = block
@@ -382,7 +387,7 @@ def set_block_page():
 
 @auth.route('/role/user', methods=['GET', 'POST'])
 @login_required
-@role_required(Role.SYSTEM)
+@role_required(Role.SYSTEM, "change user role")
 def change_role_page():
     form = ChangeRoleForm()
     if form.validate_on_submit():
@@ -399,5 +404,7 @@ def change_role_page():
         user.role = role
         db.session.commit()
         flash("用户分组修改成功")
+        Logger.print_sys_opt_success_log(f"move {user.email} to {role.name}")
         return redirect(url_for("auth.change_role_page"))
+    Logger.print_load_page_log("change user role")
     return render_template("auth/change_role.html", form=form)

+ 11 - 4
app/comment.py

@@ -7,6 +7,7 @@ from flask_login import current_user, login_required
 
 from .db import db, Comment, Archive, User, Role
 from .login import role_required
+from .logger import Logger
 
 
 comment = Blueprint("comment", __name__)
@@ -35,7 +36,7 @@ class WriteCommentForm(FlaskForm):
 
 
 @comment.route("/")
-@role_required(Role.CHECK_COMMENT)
+@role_required(Role.CHECK_COMMENT, "check comment")
 def comment_page():
     comment_id = request.args.get("comment", None, type=int)
     if not comment_id:
@@ -43,6 +44,7 @@ def comment_page():
 
     cm: Comment = Comment.query.filter_by(id=comment_id).first()
     if cm:
+        Logger.print_load_page_log(f"comment {comment_id} page")
         return render_template("comment/comment.html",
                                comment=cm,
                                comment_son=cm.son)
@@ -50,7 +52,7 @@ def comment_page():
 
 
 @comment.route("/all")
-@role_required(Role.CHECK_COMMENT)
+@role_required(Role.CHECK_COMMENT, "list all comment")
 def list_all_page():
     page = request.args.get("page", 1, type=int)
     archive_id = request.args.get("archive", None, type=int)
@@ -60,6 +62,7 @@ def list_all_page():
                       .filter(Comment.title != None).filter(Comment.father_id == None)
                       .order_by(Comment.create_time.desc(), Comment.title.desc())
                       .paginate(page=page, per_page=8, error_out=False))
+        Logger.print_load_page_log("list all comment")
         return render_template("comment/list.html",
                                page=page,
                                archive=archive_id,
@@ -76,6 +79,7 @@ def list_all_page():
                       .filter(Comment.title != None).filter(Comment.father_id == None)
                       .order_by(Comment.create_time.desc(), Comment.title.asc())
                       .paginate(page=page, per_page=8, error_out=False))
+        Logger.print_load_page_log(f"list comment of archive {archive_id}")
         return render_template("comment/list.html",
                                page=page,
                                archive=archive_id,
@@ -87,7 +91,7 @@ def list_all_page():
 
 
 @comment.route("/user")
-@role_required(Role.CHECK_COMMENT)
+@role_required(Role.CHECK_COMMENT, "list user comment")
 def user_page():
     page = request.args.get("page", 1, type=int)
     user_id = request.args.get("user", None, type=int)
@@ -101,6 +105,7 @@ def user_page():
     pagination = (user.comment
                   .order_by(Comment.create_time.desc(), Comment.title.asc())
                   .paginate(page=page, per_page=8, error_out=False))
+    Logger.print_load_page_log(f"list comment of user {user_id}")
     return render_template("comment/user.html",
                            page=page,
                            user=user,
@@ -111,7 +116,7 @@ def user_page():
 
 @comment.route("/create", methods=["GET", "POST"])
 @login_required
-@role_required(Role.CREATE_COMMENT)
+@role_required(Role.CREATE_COMMENT, "create comment")
 def create_page():
     father_id = request.args.get("father", None, type=int)
 
@@ -135,5 +140,7 @@ def create_page():
         db.session.add(cm)
         db.session.commit()
         flash("讨论发表成功")
+        Logger.print_user_opt_success_log(f"create comment {cm.id}")
         return redirect(url_for("comment.comment_page", comment=cm.id))
+    Logger.print_load_page_log("create comment page")
     return render_template("comment/create.html", form=form, father=father)

+ 4 - 1
app/login.py

@@ -1,7 +1,9 @@
 from functools import wraps
 from flask import abort
 from flask_login import LoginManager, current_user
+
 from .db import AnonymousUser, User, Role
+from .logger import  Logger
 
 
 login = LoginManager()
@@ -19,11 +21,12 @@ def user_loader(user_id: int):
     return None
 
 
-def role_required(role: int):
+def role_required(role: int, opt: str):
     def required(func):
         @wraps(func)
         def new_func(*args, **kwargs):
             if not current_user.role.has_permission(role):  # 检查相应的权限
+                Logger.print_user_not_allow_opt_log(opt)
                 return abort(403)
             return func(*args, **kwargs)
         return new_func