app.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. """
  2. Backend
  3. """
  4. from flask_login import login_required, login_user, logout_user
  5. from flask_menu import Menu, register_menu
  6. from flask import render_template, request, redirect, url_for, flash, Blueprint, abort
  7. from jinja2 import TemplateNotFound
  8. from app import app, login_manager, db
  9. from app.models import User
  10. BLUEPRINT = Blueprint(
  11. 'backend',
  12. __name__,
  13. template_folder='templates'
  14. )
  15. @BLUEPRINT.route("/login", methods=["GET", "POST"])
  16. def login():
  17. """Handle login page and data"""
  18. if request.method == 'POST':
  19. email = request.form['email']
  20. password = request.form['password']
  21. user = User.query.filter(User.email == email).first()
  22. if user is not None:
  23. if user.check_password(password):
  24. login_user(user, remember=True)
  25. flash('You were successfully logged in.', 'success')
  26. if request.args.get("next") is not None:
  27. return redirect(request.args.get("next"))
  28. return redirect(url_for('index'))
  29. else:
  30. flash('Incorrect password.', 'danger')
  31. else:
  32. flash('User not found.', 'danger')
  33. return redirect(url_for('login'))
  34. else:
  35. return render_template('user/login.j2')
  36. @BLUEPRINT.route("/register", methods=["POST"])
  37. def register():
  38. """Register a new user"""
  39. if request.method != "POST":
  40. return redirect(url_for('login'))
  41. if "name" not in request.form or not request.form['name']:
  42. flash('Fill in the name.', 'warning')
  43. return render_template('user/login.j2')
  44. if "email" not in request.form or not request.form['email']:
  45. flash('Fill in the email.', 'warning')
  46. return render_template('user/login.j2', name=request.form['name'])
  47. if "password" not in request.form or not request.form['password']:
  48. flash('Fill in the password.', 'warning')
  49. return render_template(
  50. 'user/login.j2',
  51. name=request.form['name'],
  52. email=request.form['email']
  53. )
  54. user = User.query.filter(User.name == request.form['name']).first()
  55. if user is None:
  56. flash('Name not found.', 'warning')
  57. return render_template(
  58. 'user/login.j2',
  59. name=request.form['name'],
  60. email=request.form['email']
  61. )
  62. if user.email is not None:
  63. flash('User already taken.', 'warning')
  64. return render_template(
  65. 'user/login.j2',
  66. name=request.form['name'],
  67. email=request.form['email']
  68. )
  69. user.email = request.form['email']
  70. user.password = request.form['password']
  71. db.session.commit()
  72. login_user(user, remember=True)
  73. flash('Succesfully registered account "%s".' % (user.name), 'success')
  74. if request.args.get("next") is not None:
  75. return redirect(request.args.get("next"))
  76. else:
  77. return redirect(url_for('index'))
  78. @BLUEPRINT.route("/logout")
  79. @login_required
  80. def logout():
  81. """Logout function for users"""
  82. logout_user()
  83. flash('succesfully logged out.', 'success')
  84. return redirect(url_for('login'))
  85. @BLUEPRINT.route('/')
  86. @register_menu(BLUEPRINT, '.', 'Home')
  87. def index():
  88. """Show homepage"""
  89. return render_template('site/index.j2')