login-ex.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. # Warning: This app is long, so for your case I recommend you to put the db and the User definition into anotehr file
  2. # Also I recommend you to use templates, see 'app.py' for more informations.
  3. # Import all the modules
  4. from flask import Flask, request
  5. from flask_login import UserMixin
  6. from flask_sqlalchemy import SQLAlchemy
  7. from login import *
  8. # Define 'app'
  9. app = Flask(__name__)
  10. # Define db
  11. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
  12. app.config['SECRET_KEY'] = 'aghzi vnguierhtrutizo hard to guess indeeed'
  13. db = SQLAlchemy(app)
  14. # Define the User database
  15. class User(UserMixin, db.Model):
  16. id = db.Column(db.Integer, primary_key=True)
  17. username = db.Column(db.Text, unique=True)
  18. password = db.Column(db.Text)
  19. def __init__(self, username, password):
  20. self.username = username
  21. self.password = password
  22. db.create_all()
  23. # Create the login manager
  24. createLoginManager(app, User)
  25. # Define the login page
  26. @app.route('/login')
  27. def renderLogin():
  28. # Return a form
  29. return """
  30. <form action='/login/post' method='post'>
  31. <p>Username: <input type="text" name="username"></p>
  32. <p>Password: <input type="password" name="password"></p>
  33. <p><button type="submit">Login</button></p>
  34. </form>
  35. """
  36. @app.route('/register')
  37. def renderRegister():
  38. # Return a form
  39. return """
  40. <form action='/register/post' method='post'>
  41. <p>Username: <input type="text" name="username"></p>
  42. <p>Password: <input type="password" name="password"></p>
  43. <p><button type="submit">Register</button></p>
  44. </form>
  45. """
  46. @app.route('/login/post', methods=['POST'])
  47. def login():
  48. # Take the values out the form
  49. username = request.form['username']
  50. password = request.form['password']
  51. # Try to login, if not, return error
  52. try:
  53. loginUser(username, password, User)
  54. return "You are now logged in as " + current_user.username
  55. except:
  56. return "Invalid username or password"
  57. @app.route('/register/post', methods=['POST'])
  58. def register():
  59. # Take the value out the form
  60. username = request.form['username']
  61. password = request.form['password']
  62. # Try to register, if not return error
  63. try:
  64. createUser(username, password, db, User)
  65. return "New user created you are now logged in as " + current_user.username
  66. except:
  67. return "This username is already taken: " + username
  68. # Logout the current user
  69. @app.route('/logout')
  70. def logout():
  71. logout_user()
  72. # Using login_required to make a page private
  73. @app.route('/locked')
  74. @login_required
  75. def locked():
  76. return "Hello " + current_user.username + " welcome to your private page."
  77. # Run the app in mode debug
  78. app.run(debug=True)