archive.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from flask import Blueprint, render_template, redirect, url_for, flash, g
  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
  6. import app
  7. from object.archive import Archive
  8. archive = Blueprint("archive", __name__)
  9. class CreateArchiveForm(FlaskForm):
  10. name = StringField("名字", validators=[DataRequired()])
  11. describe = StringField("描述", validators=[DataRequired()])
  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. @app.form_required(CreateArchiveForm, "create archive")
  24. @app.role_required("WriteBlog", "create archive")
  25. def create_archive_page():
  26. form: CreateArchiveForm = g.form
  27. name = form.name.data
  28. describe = form.describe.data
  29. if len(name) > 10:
  30. flash("归档名太长了")
  31. elif len(describe) > 30:
  32. flash("归档描述太长了")
  33. else:
  34. if Archive(name, describe, None).create():
  35. app.HBlogFlask.print_sys_opt_success_log(f"Create archive {name}")
  36. flash(f"创建归档 {name} 成功")
  37. else:
  38. app.HBlogFlask.print_sys_opt_fail_log(f"Create archive {name}")
  39. flash(f"创建归档 {name} 失败")
  40. return redirect(url_for("archive.archive_page"))
  41. @archive.route("delete/<int:archive_id>")
  42. @login_required
  43. @app.role_required("DeleteBlog", "delete archive")
  44. def delete_archive_page(archive_id: int):
  45. if Archive(None, None, archive_id).delete():
  46. app.HBlogFlask.print_sys_opt_success_log(f"Delete archive {archive_id}")
  47. flash("归档删除成功")
  48. else:
  49. app.HBlogFlask.print_sys_opt_fail_log(f"Delete archive {archive_id}")
  50. flash("归档删除失败")
  51. return redirect(url_for("archive.archive_page"))
  52. @archive.context_processor
  53. def inject():
  54. return {"top_nav": ["", "active", "", "", "", ""]}