msg.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from flask import Flask, Blueprint, render_template, abort, redirect, url_for, flash
  2. from flask_wtf import FlaskForm
  3. from flask_login import login_required, current_user
  4. from wtforms import TextAreaField, BooleanField, SubmitField
  5. from wtforms.validators import DataRequired
  6. import app
  7. from sql.base import DBBit
  8. from object.user import User
  9. from object.msg import Message, load_message_list
  10. msg = Blueprint("msg", __name__)
  11. class WriteForm(FlaskForm):
  12. """
  13. 写新内容表单
  14. """
  15. context = TextAreaField(validators=[DataRequired()])
  16. secret = BooleanField("私密留言")
  17. submit = SubmitField("留言")
  18. @msg.route('/<int:page>')
  19. def msg_page(page: int = 1):
  20. if page < 1:
  21. app.HBlogFlask.print_user_opt_fail_log(f"Load msg list with error page({page})")
  22. abort(404)
  23. return
  24. msg_list = load_message_list(20, (page - 1) * 20,
  25. show_secret=current_user.check_role("ReadSecretMsg")) # 判断是否可读取私密内容
  26. max_page = app.HBlogFlask.get_max_page(Message.get_msg_count(), 20)
  27. page_list = app.HBlogFlask.get_page("docx.docx_page", page, max_page)
  28. app.HBlogFlask.print_load_page_log(f"msg (page: {page})")
  29. return render_template("msg/msg.html",
  30. msg_list=msg_list,
  31. page_list=page_list,
  32. form=WriteForm(),
  33. is_secret=DBBit.BIT_1,
  34. show_delete=current_user.check_role("DeleteMsg"),
  35. show_email=current_user.check_role("ReadUserInfo"))
  36. @msg.route('/write', methods=["POST"])
  37. @login_required
  38. def write_msg_page():
  39. form = WriteForm()
  40. if form.validate_on_submit():
  41. auth: User = current_user
  42. if not auth.check_role("WriteMsg"): # 检查相应权限
  43. app.HBlogFlask.print_user_not_allow_opt_log("write msg")
  44. abort(403)
  45. return
  46. context = form.context.data
  47. secret = form.secret.data
  48. if Message(None, auth, context, secret, None).create():
  49. app.HBlogFlask.print_user_opt_success_log("write msg")
  50. flash("留言成功")
  51. else:
  52. app.HBlogFlask.print_user_opt_fail_log("write msg")
  53. flash("留言失败")
  54. return redirect(url_for("msg.msg_page", page=1))
  55. abort(404)
  56. @msg.route('/delete/<int:msg_id>')
  57. @login_required
  58. def delete_msg_page(msg_id: int):
  59. if not current_user.check_role("DeleteMsg"):
  60. app.HBlogFlask.print_user_not_allow_opt_log("delete msg")
  61. abort(403)
  62. return
  63. if Message(msg_id, None, None).delete():
  64. app.HBlogFlask.print_user_opt_success_log("delete msg")
  65. flash("留言删除成功")
  66. else:
  67. app.HBlogFlask.print_user_opt_fail_log("delete msg")
  68. flash("留言删除失败")
  69. return redirect(url_for("msg.msg_page", page=1))
  70. @msg.context_processor
  71. def inject_base():
  72. return {"top_nav": ["", "", "", "active", "", ""]}