__init__.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. from flask import Flask
  2. from flask_sqlalchemy import SQLAlchemy
  3. from flask_login import LoginManager # Flask Login
  4. from os import path
  5. # Talisman
  6. from flask_talisman import Talisman
  7. db = SQLAlchemy()
  8. DB_NAME = "database.db"
  9. def create_app():
  10. app = Flask(__name__)
  11. app.config['SECRET_KEY'] = 'Th15_iS-M1!S3cre4' # used to encrypt session cookies
  12. app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_NAME}'
  13. db.init_app(app)
  14. # import blueprints
  15. from .accounts import accounts
  16. from .dashboards import dashboards
  17. # register blueprints
  18. app.register_blueprint(accounts, url_prefix = '/') # allows the setting of prefixes for pages
  19. app.register_blueprint(dashboards, url_prefix = '/')
  20. # import Database models
  21. from .models import User
  22. create_database(app)
  23. login_manager = LoginManager()
  24. # redirect here if not logged in
  25. login_manager.login_view = 'accounts.login'
  26. login_manager.init_app(app)
  27. # Cookie Protections
  28. app.config.update(
  29. SESSION_COOKIE_SECURE=True,
  30. SESSION_COOKIE_HTTPONLY=True,
  31. SESSION_COOKIE_SAMESITE='Lax',
  32. )
  33. @login_manager.user_loader
  34. # tells flask how to load a user from the db
  35. def load_user(id):
  36. return User.query.get(int(id)) # by default get() looks for the primary key
  37. # Talisman
  38. Talisman(app)
  39. return app
  40. def create_database(app):
  41. if not path.exists('app/' + DB_NAME):
  42. db.create_all(app=app)
  43. print('Created Database!')