def create_app(load_admin=True): from redash import extensions, handlers from redash.handlers.webpack import configure_webpack from redash.handlers import chrome_logger from redash.admin import init_admin from redash.models import db from redash.authentication import setup_authentication from redash.metrics.request import provision_app app = Flask(__name__, template_folder=settings.STATIC_ASSETS_PATH, static_folder=settings.STATIC_ASSETS_PATH, static_path='/static') # Make sure we get the right referral address even behind proxies like nginx. app.wsgi_app = ProxyFix(app.wsgi_app, settings.PROXIES_COUNT) app.url_map.converters['org_slug'] = SlugConverter if settings.ENFORCE_HTTPS: SSLify(app, skips=['ping']) if settings.SENTRY_DSN: from raven import Client from raven.contrib.flask import Sentry from raven.handlers.logging import SentryHandler client = Client(settings.SENTRY_DSN, release=__version__, install_logging_hook=False) sentry = Sentry(app, client=client) sentry.client.release = __version__ sentry_handler = SentryHandler(client=client) sentry_handler.setLevel(logging.ERROR) logging.getLogger().addHandler(sentry_handler) # configure our database app.config['SQLALCHEMY_DATABASE_URI'] = settings.SQLALCHEMY_DATABASE_URI app.config.update(settings.all_settings()) provision_app(app) db.init_app(app) migrate.init_app(app, db) if load_admin: init_admin(app) mail.init_app(app) setup_authentication(app) limiter.init_app(app) handlers.init_app(app) configure_webpack(app) extensions.init_extensions(app) chrome_logger.init_app(app) # support cas auth if settings.CAS_AUTH: from redash.authentication.cas import init_app init_app(app) return app
def create_app(load_admin=True): from redash import extensions, handlers from redash.handlers.webpack import configure_webpack from redash.handlers import chrome_logger from redash.admin import init_admin from redash.models import db from redash.authentication import setup_authentication from redash.metrics.request import provision_app app = Flask(__name__, template_folder=settings.STATIC_ASSETS_PATH, static_folder=settings.STATIC_ASSETS_PATH, static_path='/static') # Make sure we get the right referral address even behind proxies like nginx. app.wsgi_app = ProxyFix(app.wsgi_app, settings.PROXIES_COUNT) #app.wsgi_app = ReverseProxied(app.wsgi_app) app.url_map.converters['org_slug'] = SlugConverter if settings.ENFORCE_HTTPS: SSLify(app, skips=['ping']) if settings.SENTRY_DSN: from raven import Client from raven.contrib.flask import Sentry from raven.handlers.logging import SentryHandler client = Client(settings.SENTRY_DSN, release=__version__, install_logging_hook=False) sentry = Sentry(app, client=client) sentry.client.release = __version__ sentry_handler = SentryHandler(client=client) sentry_handler.setLevel(logging.ERROR) logging.getLogger().addHandler(sentry_handler) # configure our database app.config['SQLALCHEMY_DATABASE_URI'] = settings.SQLALCHEMY_DATABASE_URI app.config.update(settings.all_settings()) provision_app(app) db.init_app(app) migrate.init_app(app, db) if load_admin: init_admin(app) mail.init_app(app) setup_authentication(app) limiter.init_app(app) handlers.init_app(app) configure_webpack(app) extensions.init_extensions(app) chrome_logger.init_app(app) return app
def create_app(load_admin=True): from redash import admin, authentication, extensions, handlers from redash.handlers.webpack import configure_webpack from redash.handlers import chrome_logger from redash.models import db, users from redash.metrics.request import provision_app from redash.utils import sentry sentry.init() app = Flask(__name__, template_folder=settings.STATIC_ASSETS_PATH, static_folder=settings.STATIC_ASSETS_PATH, static_path='/static') # Make sure we get the right referral address even behind proxies like nginx. app.wsgi_app = ProxyFix(app.wsgi_app, settings.PROXIES_COUNT) app.url_map.converters['org_slug'] = SlugConverter if settings.ENFORCE_HTTPS: SSLify(app, skips=['ping']) # configure our database app.config['SQLALCHEMY_DATABASE_URI'] = settings.SQLALCHEMY_DATABASE_URI app.config.update(settings.all_settings()) provision_app(app) db.init_app(app) migrate.init_app(app, db) if load_admin: admin.init_admin(app) mail.init_app(app) authentication.init_app(app) limiter.init_app(app) handlers.init_app(app) configure_webpack(app) extensions.init_extensions(app) chrome_logger.init_app(app) users.init_app(app) return app
def create_app(): from redash import authentication, extensions, handlers, security from redash.handlers.webpack import configure_webpack from redash.handlers import chrome_logger from redash.models import db, users from redash.metrics import request as request_metrics from redash.utils import sentry sentry.init() app = Flask(__name__, template_folder=settings.STATIC_ASSETS_PATH, static_folder=settings.STATIC_ASSETS_PATH, static_url_path='/static') # Make sure we get the right referral address even behind proxies like nginx. app.wsgi_app = ProxyFix(app.wsgi_app, settings.PROXIES_COUNT) app.url_map.converters['org_slug'] = SlugConverter # configure our database app.config['SQLALCHEMY_DATABASE_URI'] = settings.SQLALCHEMY_DATABASE_URI app.config.update(settings.all_settings()) security.init_app(app) request_metrics.init_app(app) db.init_app(app) migrate.init_app(app, db) mail.init_app(app) authentication.init_app(app) limiter.init_app(app) handlers.init_app(app) configure_webpack(app) extensions.init_app(app) chrome_logger.init_app(app) users.init_app(app) return app
def create_app(load_admin=True): # 1.redash的__init___文件包含了一些通用的函数或者变量 # 2.下面引入的模块使用了从这个模块导出的变量 # 3.这里又从这些模块,导入进来一些函数或者变量 # 4.形成了相互依赖 # 5.解决方案 # 6.调用置后于初始化的过程,比如requeset文件中的使用的 from redash import statsd_client 一定要在 from redash.metrics.request import provision_app前面 # 7.或者放入函数内部 # 8.保证首次进入sys.moudle的模块,已经包含了那些初始化的通用变量 # import语句中的 模块 包含了这个import语句所在模块的 依赖,那么这个import语句应该在这个依赖声明的后面 from redash import extensions, handlers from redash.handlers.webpack import configure_webpack from redash.handlers import chrome_logger from redash.admin import init_admin from redash.models import db from redash.authentication import setup_authentication from redash.metrics.request import provision_app # https: // www.v2ex.com / t / 289972 # 创建 flask 对象时候,是需要传一个模块一般是__name__过去,你改下就行了,那个是被当作根地址,确定了template位置 # 也可以在蓝图的时候指定 app = Flask(__name__, # 指定静态文件目录 # fix_assets_path(os.environ.get("REDASH_STATIC_ASSETS_PATH", "../client/dist/")) template_folder=settings.STATIC_ASSETS_PATH, # https://blog.csdn.net/qq_40952927/article/details/81157204 static_folder=settings.STATIC_ASSETS_PATH, static_path='/static') # https://www.kancloud.cn/wizardforcel/explore-flask/140842 # http://python.jobbole.com/84003/ # 使用了Nginx后,为了获取真实的请求IP app.wsgi_app = ProxyFix(app.wsgi_app, settings.PROXIES_COUNT) # 定制url app.url_map.converters['org_slug'] = SlugConverter # 根据setting文件配置 if settings.ENFORCE_HTTPS: # https: // www.helplib.com / GitHub / article_82448 # 所有的http重定向为https # 什么时候使用 ?????????????????????? SSLify(app, skips=['ping']) # 异常警报和通知处理 if settings.SENTRY_DSN: from raven import Client from raven.contrib.flask import Sentry from raven.handlers.logging import SentryHandler client = Client(settings.SENTRY_DSN, release=__version__, install_logging_hook=False) sentry = Sentry(app, client=client) sentry.client.release = __version__ sentry_handler = SentryHandler(client=client) sentry_handler.setLevel(logging.ERROR) logging.getLogger().addHandler(sentry_handler) # 数据库配置 app.config['SQLALCHEMY_DATABASE_URI'] = settings.SQLALCHEMY_DATABASE_URI # 默认自带的配置 app.config.update(settings.all_settings()) # 插件和自定义插件初始化 if load_admin: init_admin(app) # 数据库 # db = SQLAlchemy(app) db.init_app(app) # 数据库迁移 migrate.init_app(app, db) # 邮件 mail.init_app(app) # 请求次数 limiter.init_app(app) # logger chrome_logger.init_app(app) extensions.init_extensions(app) # 一些请求前后的狗子,用于性能测试等 provision_app(app) # 所有的controller入口!!!!! handlers.init_app(app) # api 认证接口注册!!!! setup_authentication(app) # webpack!!!!! configure_webpack(app) return app