1
0

archive.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from flask import Blueprint, render_template, request, url_for, redirect
  2. from flask_wtf import FlaskForm
  3. from wtforms import StringField, SubmitField
  4. from wtforms.validators import DataRequired, Length, ValidationError
  5. from flask_login import login_required
  6. from .db import db, Archive, Role
  7. from .login import role_required
  8. from .logger import Logger
  9. archive = Blueprint("archive", __name__)
  10. class CreateArchiveForm(FlaskForm):
  11. name = StringField("名字", description="归档名字",
  12. validators=[
  13. DataRequired(f"必须填写归档名字"),
  14. Length(1, 32, message=f"归档名字长度为0-32位")])
  15. describe = StringField("描述", description="归档描述",
  16. validators=[
  17. Length(0, 100, message=f"归档描述长度为0-100位")])
  18. submit = SubmitField("提交")
  19. def validate_name(self, field):
  20. """ 检验email是否合法 """
  21. if Archive.query.filter_by(name=field.data).first():
  22. raise ValidationError("归档已存在")
  23. @archive.route("/all")
  24. @role_required(Role.CHECK_ARCHIVE, "list all archive")
  25. def list_all_page():
  26. page = request.args.get("page", 1, type=int)
  27. pagination = (Archive.query
  28. .order_by(Archive.name.asc())
  29. .paginate(page=page, per_page=8, error_out=False))
  30. Logger.print_load_page_log("list all archive")
  31. return render_template("archive/list.html",
  32. page=page,
  33. items=pagination.items,
  34. pagination=pagination)
  35. @archive.route("/create", methods=["GET", "POST"])
  36. @login_required
  37. @role_required(Role.CREATE_ARCHIVE, "create archive")
  38. def create_page():
  39. form = CreateArchiveForm()
  40. if form.validate_on_submit():
  41. ac = Archive(name=form.name.data, describe=form.describe.data)
  42. db.session.add(ac)
  43. db.session.commit()
  44. Logger.print_user_opt_success_log(f"create new archive {ac.name}")
  45. return redirect(url_for("comment.list_all_page", archive=ac.id, page=1))
  46. Logger.print_load_page_log("create archive page")
  47. return render_template("archive/create.html", form=form)