msg.py 3.1 KB

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