archive.py 2.2 KB

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