auth.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from flask import Blueprint, render_template, redirect, url_for, flash, request
  2. from flask_login import login_required, login_user, logout_user, current_user
  3. from flask_wtf import FlaskForm
  4. from wtforms import PasswordField, StringField, SubmitField
  5. from wtforms.validators import DataRequired
  6. from .logger import Logger
  7. from .user import User
  8. auth = Blueprint("auth", __name__)
  9. class LoginForm(FlaskForm):
  10. username = StringField("用户名", description="邮箱用户名", validators=[DataRequired("必须填写用户名")])
  11. passwd = PasswordField("密码", description="邮箱密码", validators=[DataRequired("必须填写密码")])
  12. submit = SubmitField("登录")
  13. @auth.route("/login", methods=["GET", "POST"])
  14. def login_page():
  15. if not current_user.is_anonymous:
  16. flash("不能重复登录")
  17. return redirect(url_for("base.index_page"))
  18. form = LoginForm()
  19. if form.validate_on_submit():
  20. user = User(form.username.data, form.passwd.data)
  21. if user.check_login():
  22. login_user(user, remember=True)
  23. flash("登陆成功")
  24. next_page = request.args.get("next")
  25. if next_page is None or not next_page.startswith('/'):
  26. next_page = url_for('base.index_page')
  27. Logger.print_user_opt_success_log(f"login {form.username.data}")
  28. return redirect(next_page)
  29. else:
  30. flash("账号验证失败")
  31. Logger.print_user_opt_fail_log(f"login {form.username.data}")
  32. return redirect(url_for("auth.login_page"))
  33. Logger.print_load_page_log("login")
  34. return render_template("auth/login.html", form=form)
  35. @auth.route("/logout")
  36. @login_required
  37. def logout_page():
  38. logout_user()
  39. flash("退出登录成功")
  40. Logger.print_user_opt_success_log(f"logout")
  41. return redirect(url_for("auth.login_page"))