archive.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from flask import Blueprint, render_template, abort, redirect, url_for, flash, current_app, request
  2. from flask_login import login_required, current_user
  3. from flask_wtf import FlaskForm
  4. from wtforms import StringField, SubmitField
  5. from wtforms.validators import DataRequired, Length
  6. import app
  7. from object.archive import Archive
  8. archive = Blueprint("archive", __name__)
  9. class CreateArchiveForm(FlaskForm):
  10. name = StringField("名字", validators=[DataRequired(), Length(1, 10)])
  11. describe = StringField("描述", validators=[DataRequired(), Length(1, 30)])
  12. submit = SubmitField("创建归档")
  13. @archive.route('/')
  14. def archive_page():
  15. archive_list = Archive.get_archive_list()
  16. app.HBlogFlask.print_load_page_log("archive list")
  17. return render_template("archive/archive.html",
  18. archive_list=archive_list,
  19. form=CreateArchiveForm(),
  20. show_delete=current_user.check_role("DeleteBlog"))
  21. @archive.route("create", methods=["POST"])
  22. @login_required
  23. def create_archive_page():
  24. form = CreateArchiveForm()
  25. if form.validate_on_submit():
  26. if not current_user.check_role("WriteBlog"): # 检查相应的权限
  27. app.HBlogFlask.print_user_not_allow_opt_log("Create archive")
  28. abort(403)
  29. return
  30. if Archive(form.name.data, form.describe.data, None).create():
  31. app.HBlogFlask.print_sys_opt_success_log(f"Create archive {form.name.data}")
  32. flash(f"创建归档 {form.name.data} 成功")
  33. else:
  34. app.HBlogFlask.print_sys_opt_fail_log(f"Create archive {form.name.data}")
  35. flash(f"创建归档 {form.name.data} 失败")
  36. return redirect(url_for("archive.archive_page"))
  37. current_app.logger.warning("Create archive with error form.")
  38. abort(404)
  39. @archive.route("delete/<int:archive_id>")
  40. @login_required
  41. def delete_archive_page(archive_id: int):
  42. if not current_user.check_role("DeleteBlog"):
  43. app.HBlogFlask.print_user_not_allow_opt_log("Delete archive")
  44. abort(403)
  45. return
  46. if Archive(None, None, archive_id).delete():
  47. app.HBlogFlask.print_sys_opt_success_log(f"Delete archive {archive_id}")
  48. flash("归档删除成功")
  49. else:
  50. app.HBlogFlask.print_sys_opt_fail_log(f"Delete archive {archive_id}")
  51. flash("归档删除失败")
  52. return redirect(url_for("archive.archive_page"))
  53. @archive.context_processor
  54. def inject():
  55. return {"top_nav": ["", "active", "", "", "", ""]}