msg.py 2.6 KB

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