archive.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. from flask import Flask, Blueprint, render_template, abort, redirect, url_for, flash
  2. from typing import Optional
  3. from flask_login import login_required, current_user
  4. from flask_wtf import FlaskForm
  5. from wtforms import StringField, SubmitField
  6. from wtforms.validators import DataRequired, Length
  7. from view.base import App
  8. from core.user import User
  9. from core.archive import Archive
  10. archive = Blueprint("archive", __name__)
  11. app: Optional[Flask] = None
  12. class CreateArchiveForm(FlaskForm):
  13. name = StringField("名字", validators=[DataRequired(), Length(1, 10)])
  14. describe = StringField("描述", validators=[DataRequired(), Length(1, 30)])
  15. submit = SubmitField("创建归档")
  16. @archive.route('/')
  17. def archive_page():
  18. archive_list = Archive.get_archive_list()
  19. return render_template("archive/archive.html", archive_list=archive_list, form=CreateArchiveForm())
  20. @archive.route("create-archive", methods=["POST"])
  21. @login_required
  22. def create_archive_page():
  23. form = CreateArchiveForm()
  24. if form.validate_on_submit():
  25. auth: User = current_user
  26. if not auth.check_role("WriteBlog"): # 检查相应的权限
  27. abort(403)
  28. return
  29. if Archive(form.name.data, form.describe.data, None).create():
  30. flash(f"创建归档 {form.name.data} 成功")
  31. else:
  32. flash(f"创建归档 {form.name.data} 失败")
  33. return redirect(url_for("archive.archive_page"))
  34. abort(404)
  35. @archive.context_processor
  36. def inject():
  37. return {"top_nav": ["", "active", "", "", "", ""]}
  38. class ArchiveApp(App):
  39. def __init__(self, import_name):
  40. super(ArchiveApp, self).__init__(import_name)
  41. global app
  42. app = self._app
  43. app.register_blueprint(archive, url_prefix="/archive")