123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- from flask import Flask, Blueprint, render_template, abort, redirect, url_for, flash
- from flask_wtf import FlaskForm
- from flask_login import login_required, current_user
- from wtforms import TextAreaField, BooleanField, SubmitField
- from wtforms.validators import DataRequired
- from typing import Optional
- from view.base import App
- from sql.base import DBBit
- from core.user import User
- from core.msg import Message, load_message_list
- msg = Blueprint("msg", __name__)
- app: Optional[Flask] = None
- class WriteForm(FlaskForm):
- """
- 写新内容表单
- """
- context = TextAreaField(validators=[DataRequired()])
- secret = BooleanField("私密留言")
- submit = SubmitField("留言")
- @msg.route('/<int:page>')
- def msg_page(page: int = 1):
- if page < 1:
- abort(404)
- return
- msg_list = load_message_list(20, (page - 1) * 20,
- show_secret=current_user.check_role("ReadSecretMsg")) # 判断是否可读取私密内容
- max_page = App.get_max_page(Message.get_msg_count(), 20)
- page_list = App.get_page("docx.docx_page", page, max_page)
- return render_template("msg/msg.html",
- msg_list=msg_list,
- page_list=page_list,
- form=WriteForm(),
- is_secret=DBBit.BIT_1,
- show_delete=current_user.check_role("DeleteMsg"),
- show_email=current_user.check_role("ReadUserInfo"))
- @msg.route('/write', methods=["POST"])
- @login_required
- def write_msg_page():
- form = WriteForm()
- if form.validate_on_submit():
- auth: User = current_user
- if not auth.check_role("WriteMsg"): # 检查相应权限
- abort(403)
- return
- context = form.context.data
- secret = form.secret.data
- if Message(None, auth, context, secret, None).create():
- flash("留言成功")
- else:
- flash("留言失败")
- return redirect(url_for("msg.msg_page", page=1))
- abort(404)
- @msg.route('/delete/<int:msg_id>')
- @login_required
- def delete_msg_page(msg_id: int):
- if not current_user.check_role("DeleteMsg"):
- abort(403)
- return
- if Message(msg_id, None, None).delete():
- flash("留言删除成功")
- else:
- flash("留言删除失败")
- return redirect(url_for("msg.msg_page", page=1))
- @msg.context_processor
- def inject_base():
- return {"top_nav": ["", "", "", "active", "", ""]}
- class MsgApp(App):
- def __init__(self, import_name):
- super(MsgApp, self).__init__(import_name)
- global app
- app = self._app
- app.register_blueprint(msg, url_prefix="/msg")
|