messing around with flask tutorial

auth.py 2.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import functools
  2. from flask import (
  3. Blueprint, flash, g, redirect, render_template, request, session, url_for
  4. )
  5. from werkzeug.security import check_password_hash, generate_password_hash
  6. from flaskr.db import get_db
  7. bp = Blueprint('auth', __name__, url_prefix='/auth')
  8. @bp.route('/register', methods=('GET', 'POST'))
  9. def register():
  10. if request.method == 'POST':
  11. username = request.form['username']
  12. password = request.form['password']
  13. db = get_db()
  14. error = None
  15. if not username:
  16. error = 'Username is required.'
  17. elif not password:
  18. error = 'Password is required.'
  19. elif db.execute(
  20. 'SELECT id FROM user WHERE username = ?', (username,)
  21. ).fetchone() is not None:
  22. error = 'User {} is already registered.'.format(username)
  23. if error is None:
  24. db.execute(
  25. 'INSERT INTO user (username, password) VALUES (?, ?)',
  26. (username, generate_password_hash(password))
  27. )
  28. db.commit()
  29. return redirect(url_for('auth.login'))
  30. flash(error)
  31. return render_template('auth/register.html')
  32. @bp.route('/login', methods=('GET', 'POST'))
  33. def login():
  34. if request.method == 'POST':
  35. username = request.form['username']
  36. password = request.form['password']
  37. db = get_db()
  38. error = None
  39. user = db.execute(
  40. 'SELECT * FROM user where username = ?', (username,)
  41. ).fetchone()
  42. if user is None:
  43. error = 'Incorrect username.'
  44. elif not check_password_hash(user['password'], password):
  45. error = 'Incorrect password.'
  46. if error is None:
  47. session.clear()
  48. session['user_id'] = user['id']
  49. return redirect(url_for('index'))
  50. flash(error)
  51. return render_template('auth/login.html')
  52. @bp.before_app_request
  53. def load_logged_in_user():
  54. user_id = session.get('user_id')
  55. if user_id is None:
  56. g.user = None
  57. else:
  58. g.user = get_db().execute(
  59. 'SELECT * FROM user WHERE id = ?', (user_id,)
  60. ).fetchone()
  61. @bp.route('/logout')
  62. def logout():
  63. session.clear()
  64. return redirect(url_for('index'))
  65. def login_required(view):
  66. @functools.wraps(view)
  67. def wrapped_view(**kwargs):
  68. if g.user is None:
  69. return redirect(url_for('auth.login'))
  70. return view(**kwargs)
  71. return wrapped_view