flaskr.py 3.2 KB

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