msg.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. from flask import Blueprint, render_template, abort, redirect, url_for, flash, g, request
  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, Length
  6. import app
  7. from sql.base import DBBit
  8. from object.msg import Message
  9. from configure import conf
  10. msg = Blueprint("msg", __name__)
  11. class WriteForm(FlaskForm):
  12. """
  13. 写新内容表单
  14. """
  15. content = TextAreaField("", description="留言正文",
  16. validators=[
  17. DataRequired("请输入留言的内容"),
  18. Length(1, 100, message="留言长度1-100个字符")])
  19. secret = BooleanField("私密留言")
  20. submit = SubmitField("留言")
  21. def __load_msg_page(page: int, form: WriteForm):
  22. if page < 1:
  23. app.HBlogFlask.print_user_opt_fail_log(f"Load msg list with error page({page})")
  24. abort(404)
  25. return
  26. msg_list = Message.get_message_list(20, (page - 1) * 20,
  27. show_secret=current_user.check_role("ReadSecretMsg")) # 判断是否可读取私密内容
  28. max_page = app.HBlogFlask.get_max_page(Message.get_msg_count(), 20)
  29. page_list = app.HBlogFlask.get_page("msg.msg_page", page, max_page)
  30. app.HBlogFlask.print_load_page_log(f"msg (page: {page})")
  31. return render_template("msg/msg.html",
  32. msg_list=msg_list,
  33. page=page,
  34. cache_str=f":{page}",
  35. page_list=page_list,
  36. form=form,
  37. show_delete=current_user.check_role("DeleteMsg"),
  38. show_email=current_user.check_role("ReadUserInfo"))
  39. @msg.route('/')
  40. def msg_page():
  41. page = request.args.get("page", 1, type=int)
  42. return __load_msg_page(page, WriteForm())
  43. @msg.route('/create', methods=["POST"])
  44. @login_required
  45. @app.form_required(WriteForm,
  46. "write msg",
  47. lambda form: __load_msg_page(request.args.get("page", 1, type=int), form))
  48. @app.role_required("WriteMsg", "write msg")
  49. def write_msg_page():
  50. form: WriteForm = g.form
  51. content = form.content.data
  52. secret = form.secret.data
  53. if Message.create(current_user, content, secret):
  54. app.HBlogFlask.print_user_opt_success_log("write msg")
  55. flash("留言成功")
  56. else:
  57. app.HBlogFlask.print_user_opt_fail_log("write msg")
  58. flash("留言失败")
  59. return redirect(url_for("msg.msg_page", page=1))
  60. @msg.route('/delete')
  61. @login_required
  62. @app.role_required("DeleteMsg", "delete msg")
  63. def delete_msg_page():
  64. msg_id = request.args.get("msg", 1, type=int)
  65. if Message(msg_id).delete():
  66. app.HBlogFlask.print_user_opt_success_log("delete msg")
  67. flash("留言删除成功")
  68. else:
  69. app.HBlogFlask.print_user_opt_fail_log("delete msg")
  70. flash("留言删除失败")
  71. return redirect(url_for("msg.msg_page", page=1))
  72. @msg.context_processor
  73. @app.cache.cached(timeout=conf["CACHE_EXPIRE"], key_prefix="inject_base:msg")
  74. def inject_base():
  75. """ msg 默认模板变量 """
  76. return {"top_nav": ["", "", "", "active", "", ""]}