|
@@ -0,0 +1,91 @@
|
|
|
+# Warning: This app is long, so for your case I recommend you to put the db and the User definition into anotehr file
|
|
|
+# Also I recommend you to use templates, see 'app.py' for more informations.
|
|
|
+
|
|
|
+# Import all the modules
|
|
|
+from flask import Flask, request
|
|
|
+from flask_login import UserMixin
|
|
|
+from flask_sqlalchemy import SQLAlchemy
|
|
|
+from login import *
|
|
|
+
|
|
|
+# Define 'app'
|
|
|
+app = Flask(__name__)
|
|
|
+
|
|
|
+# Define db
|
|
|
+app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
|
|
|
+app.config['SECRET_KEY'] = 'aghzi vnguierhtrutizo hard to guess indeeed'
|
|
|
+db = SQLAlchemy(app)
|
|
|
+
|
|
|
+# Define the User database
|
|
|
+class User(UserMixin, db.Model):
|
|
|
+ id = db.Column(db.Integer, primary_key=True)
|
|
|
+ username = db.Column(db.Text, unique=True)
|
|
|
+ password = db.Column(db.Text)
|
|
|
+ def __init__(self, username, password):
|
|
|
+ self.username = username
|
|
|
+ self.password = password
|
|
|
+db.create_all()
|
|
|
+
|
|
|
+# Create the login manager
|
|
|
+createLoginManager(app, User)
|
|
|
+
|
|
|
+# Define the login page
|
|
|
+@app.route('/login')
|
|
|
+def renderLogin():
|
|
|
+ # Return a form
|
|
|
+ return """
|
|
|
+ <form action='/login/post' method='post'>
|
|
|
+ <p>Username: <input type="text" name="username"></p>
|
|
|
+ <p>Password: <input type="password" name="password"></p>
|
|
|
+ <p><button type="submit">Login</button></p>
|
|
|
+ </form>
|
|
|
+ """
|
|
|
+
|
|
|
+@app.route('/register')
|
|
|
+def renderRegister():
|
|
|
+ # Return a form
|
|
|
+ return """
|
|
|
+ <form action='/register/post' method='post'>
|
|
|
+ <p>Username: <input type="text" name="username"></p>
|
|
|
+ <p>Password: <input type="password" name="password"></p>
|
|
|
+ <p><button type="submit">Register</button></p>
|
|
|
+ </form>
|
|
|
+ """
|
|
|
+@app.route('/login/post', methods=['POST'])
|
|
|
+def login():
|
|
|
+ # Take the values out the form
|
|
|
+ username = request.form['username']
|
|
|
+ password = request.form['password']
|
|
|
+
|
|
|
+ # Try to login, if not, return error
|
|
|
+ try:
|
|
|
+ loginUser(username, password, User)
|
|
|
+ return "You are now logged in as " + current_user.username
|
|
|
+ except:
|
|
|
+ return "Invalid username or password"
|
|
|
+
|
|
|
+@app.route('/register/post', methods=['POST'])
|
|
|
+def register():
|
|
|
+ # Take the value out the form
|
|
|
+ username = request.form['username']
|
|
|
+ password = request.form['password']
|
|
|
+
|
|
|
+ # Try to register, if not return error
|
|
|
+ try:
|
|
|
+ createUser(username, password, db, User)
|
|
|
+ return "New user created you are now logged in as " + current_user.username
|
|
|
+ except:
|
|
|
+ return "This username is already taken: " + username
|
|
|
+
|
|
|
+# Logout the current user
|
|
|
+@app.route('/logout')
|
|
|
+def logout():
|
|
|
+ logout_user()
|
|
|
+
|
|
|
+# Using login_required to make a page private
|
|
|
+@app.route('/locked')
|
|
|
+@login_required
|
|
|
+def locked():
|
|
|
+ return "Hello " + current_user.username + " welcome to your private page."
|
|
|
+
|
|
|
+# Run the app in mode debug
|
|
|
+app.run(debug=True)
|