tool.py 1.3 KB

12345678910111213141516171819202122232425262728293031
  1. from functools import wraps
  2. from flask import abort, g
  3. from flask_wtf import FlaskForm
  4. from typing import ClassVar, Optional, Callable
  5. from wtforms.fields import StringField, PasswordField
  6. from wtforms.validators import DataRequired, Length, Regexp
  7. class AuthForm(FlaskForm):
  8. name = StringField("User name", description="User name",
  9. validators=[DataRequired(message="Must enter user name"),
  10. Length(1, 10, message="Length: 1 - 10"),
  11. Regexp(r"^[a-zA-Z0-9_]+$", message="Only letters and numbers and _ are accepted")])
  12. passwd = PasswordField("Password", description="Password",
  13. validators=[DataRequired(message="Must enter password"),
  14. Length(4, 32, "Length: 4 - 32")])
  15. def form_required(form: ClassVar[FlaskForm], callback: Optional[Callable] = None, **kw):
  16. def required(func):
  17. @wraps(func)
  18. def new_func(*args, **kwargs):
  19. f = form()
  20. if not f.validate_on_submit():
  21. if callback is None:
  22. return abort(404)
  23. return callback(form=f, **kw, **kwargs)
  24. g.form = f # 使用g传递form参数
  25. return func(*args, **kwargs)
  26. return new_func
  27. return required