def app(postgresql_dsn, jwt, db): from flask import Flask from app.extensions import babel from app.extensions.jwt.models import TokenBlackList from app.extensions.jwt import ( check_if_token_in_blacklist, token_expired, unauthorized_callback, ) app = Flask("TestJwt") app.config["SQLALCHEMY_DATABASE_URI"] = postgresql_dsn app.config["BABEL_DEFAULT_TIMEZONE"] = "Asia/Shanghai" app.config["JWT_SECRET_KEY"] = "11" app.config["JWT_BLACKLIST_ENABLED"] = True app.config["JWT_BLACKLIST_TOKEN_CHECKS"] = ["access", "refresh"] app.config["JWT_TOKEN_LOCATION"] = ["headers", "query_string"] app.config["JWT_QUERY_STRING_NAME"] = "token" db.init_app(app) babel.init_app(app) jwt.user_loader_callback_loader(lambda x: {"user": x}) jwt.init_app(app) jwt.token_in_blacklist_loader(check_if_token_in_blacklist) jwt.expired_token_loader(token_expired) jwt.unauthorized_loader(unauthorized_callback) with app.app_context(): try: TokenBlackList.__table__.create(db.get_engine()) except ProgrammingError: pass db.create_all() yield app db.session.commit()
def register_extensions(app): db.init_app(app) login_manager.init_app(app) csrf.init_app(app) csrf.exempt(api_v1) babel.init_app(app) migrate.init_app(app)
def register_extensions(app): db.init_app(app) lm.init_app(app) mail.init_app(app) bcrypt.init_app(app) celery.config_from_object(app.config) assets.init_app(app) babel.init_app(app)
def register_extensions(app): heroku.init_app(app) travis.init_app(app) db.init_app(app) api.init_app(app) lm.init_app(app) mail.init_app(app) bcrypt.init_app(app) celery.config_from_object(app.config) assets.init_app(app) babel.init_app(app)
def register_extensions(app): """Register extensions with the Flask application.""" travis.init_app(app) db.init_app(app) lm.init_app(app) mail.init_app(app) bcrypt.init_app(app) assets.init_app(app) babel.init_app(app) rq.init_app(app) migrate.init_app(app, db)
def app(config): from flask import Flask from app.extensions import mongo, babel app = Flask("TestMongo") app.config["MONGODB_SETTINGS"] = config app.config["BABEL_DEFAULT_TIMEZONE"] = "Asia/Shanghai" mongo.init_app(app) babel.init_app(app) with app.app_context(): yield app
def register_extensions(app): """Register extensions with the Flask application.""" travis.init_app(app) db.init_app(app) lm.init_app(app) mail.init_app(app) bcrypt.init_app(app) assets.init_app(app) babel.init_app(app) rq.init_app(app) migrate.init_app(app, db) limiter.init_app(app)
def register_extensions(app): babel.init_app(app) bcrypt.init_app(app) bootstrap.init_app(app) cache.init_app(app) db.init_app(app) csrf_protect.init_app(app) login_manager.init_app(app) debug_toolbar.init_app(app) migrate.init_app(app, db) mail.init_app(app) moment.init_app(app)
def register_extensions(app): heroku.init_app(app) travis.init_app(app) db.init_app(app) api.init_app(app) lm.init_app(app) mail.init_app(app) bcrypt.init_app(app) celery.config_from_object(app.config) assets.init_app(app) babel.init_app(app) csrf.init_app(app)
def register_extensions(app): # 添加数据库 db.init_app(app) # 迁移数据库 migrate.init_app(app, db) # 加载插件 login_manager.init_app(app) bootstrap.init_app(app) mail.init_app(app) moment.init_app(app) babel.init_app(app) # 富文本插件 ckeditor.init_app(app) csrf.init_app(app)
def configure_extensions(app): '''Configures the extensions.''' # Enable CORS cors.init_app(app) # Init Flask-SQLAlchemy db.init_app(app) # Init Flask-Migrate migrate.init_app(app, db) # Init Flask-Babel babel.init_app(app) @babel.localeselector def get_locale(): # return 'zh' # 这样设置的话,所有用户永远显示中文 return request.accept_languages.best_match(app.config['LANGUAGES'])
def app(postgresql_dsn, db): from flask import Flask from app.extensions import babel app = Flask("TestSqla") app.config["SQLALCHEMY_DATABASE_URI"] = postgresql_dsn app.config["BABEL_DEFAULT_TIMEZONE"] = "Asia/Shanghai" db.init_app(app) babel.init_app(app) with app.app_context(): db.create_all() yield app db.session.commit() db.drop_all()
def create_app(): app = Flask(__name__) app.config.from_object(config) #set server-side session if redis is valid if utilRedis.isValid(): app.session_interface = RedisSessionInterface( redis=utilRedis.redis_client) # csrf ajax CsrfProtect(app) db.init_app(app) babel.init_app(app) moment.init_app(app) cache.init_app(app) mail.init_app(app) return app
def configure_app(app, config_class): app.config.from_object(config_class) # 不检查路由中最后是否有斜杠/ app.url_map.strict_slashes = False # 整合RQ任务队列 app.redis = Redis.from_url(app.config['REDIS_URL']) app.task_queue = rq.Queue('madblog-tasks', connection=app.redis, default_timeout=3600) # 设置任务队列中各任务的执行最大超时时间为 1 小时 # Elasticsearch app.elasticsearch = Elasticsearch([app.config['ELASTICSEARCH_URL']]) \ if app.config['ELASTICSEARCH_URL'] else None # Init Flask-Babel babel.init_app(app) @babel.localeselector def get_locale(): return request.accept_languages.best_match(app.config['LANGUAGES'])
def register_extensions(app): db.init_app(app) migrate.init_app(app, db) login.init_app(app) mail.init_app(app) bootstrap.init_app(app) moment.init_app(app) babel.init_app(app) ckeditor.init_app(app) csrf.init_app(app) avatars.init_app(app) from app.api import bp as api_bp csrf.exempt(api_bp) app.elasticsearch = Elasticsearch([ app.config['ELASTICSEARCH_URL'] ]) if app.config['ELASTICSEARCH_URL'] else None app.redis = Redis.from_url(app.config['REDIS_URL']) app.task_queue = rq.Queue('microblog-tasks', connection=app.redis)
def create_app(config=config.BaseConfig): app = Flask(__name__) app.config.from_object(config) lm.init_app(app) lm.login_view = 'auth.login' babel.init_app(app) app.register_blueprint(auth, url_prefix='/auth') app.register_blueprint(secure, url_prefix='/secure') @babel.localeselector def get_locale(): preferred = [x.replace('-', '_') for x in request.accept_languages.values()] return negotiate_locale(preferred, config.SUPPORTED_LOCALES) @app.route('/', methods=['GET']) def index(): return redirect(url_for('auth.login')) return app
def configure_extensions(app): """ Initialize Flask Extensions. """ db.init_app(app) babel.init_app(app) csrf.init_app(app) login_manager.init_app(app) login_manager.session_protection = 'strong' login_manager.login_view = 'auth.login' login_manager.login_message = lazy_gettext('Please, log in ' 'to access this page.') login_manager.login_message_category = 'warning' login_manager.anonymous_user = AnonymousUser Markdown(app, extensions=['codehilite', 'toc', 'tables', 'def_list']) @login_manager.user_loader def _user_loader(user_id): # User loader callback function return User.query.get(int(user_id))
def create_app(config: MetaFlaskEnv = None): if config is not None: assert type(config) == MetaFlaskEnv assert issubclass(config, Config) app = Flask(__name__) config = configure_app(app, config) configure_db(app) register_apis(app) # Internationalization babel.init_app(app) # Error handling setup_error_handlers(app) # Print debug info if app.debug is True: print_config(app, config) print_routes(app) return app
def create_app(config=config.BaseConfig): app = Flask(__name__) app.config.from_object(config) lm.init_app(app) lm.login_view = 'auth.login' babel.init_app(app) app.register_blueprint(auth, url_prefix='/auth') app.register_blueprint(secure, url_prefix='/secure') @babel.localeselector def get_locale(): preferred = [ x.replace('-', '_') for x in request.accept_languages.values() ] return negotiate_locale(preferred, config.SUPPORTED_LOCALES) @app.route('/', methods=['GET']) def index(): return redirect(url_for('auth.login')) return app
def create_app(): """Функция, реализующая паттерн Application Factory (нужна для создания экземпляра приложения с нужной конфигурацией)""" app = Flask(__name__) app.config.from_object(f'app.config.{app.config["ENV"]}Config') app.register_blueprint(main_bp) app.register_blueprint(auth_bp) app.register_blueprint(errors_bp) init_logs(app) ASSETS.init_app(app) session.init_app(app) db.init_app(app) csrf.init_app(app) cdn.init_app(app) compress.init_app(app) babel.init_app(app) api.init_app(app) login_manager.init_app(app) TALISMAN.init_app(app, content_security_policy=CSP, force_https=False) return app
def register_extensions(app: Flask) -> None: db.init_app(app) login.init_app(app) babel.init_app(app)
""" Create the app """ app_instance = Flask( __name__, template_folder='../templates', static_folder="../static", ) """ Bind config + security settings to app """ import app.core as app_core """ Init + Bind extensions to app """ # Ordering is important. admin.init_app(app_instance) babel.init_app(app_instance) bootstrap.init_app(app_instance) db.init_app(app_instance) serializer.init_app(app_instance) mail.init_app(app_instance) moment.init_app(app_instance) health.init_app(app_instance, "/healthcheck") register_app_cdn(app_instance) assets.init_app(app_instance) # Manage JavaScript bundles templates.nav.init_app(app_instance) # Inject db session into all models BaseModel.set_session(db.session) # Enable/Disable development extensions if app_instance.debug:
def test_api(self): from flask import Flask from flask.views import MethodView from app.extensions.api import Api from app.extensions.api.decorators import paginate from app.extensions import db, babel from app.extensions.sqla import SurrogatePK, Model import marshmallow as ma from flask_smorest import Blueprint from app.extensions.marshal.bases import BasePageSchema app = Flask("TestApi") app.config["OPENAPI_VERSION"] = "3.0.2" app.config["BABEL_DEFAULT_TIMEZONE"] = "Asia/Shanghai" app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite://" api = Api(app) babel.init_app(app) db.init_app(app) class TestPagination(SurrogatePK, Model): name = db.Column(db.String(10)) with app.app_context(): TestPagination.__table__.create(db.get_engine()) class TestSchema(ma.Schema): id = ma.fields.Int(dump_only=True) name = ma.fields.String() class TestPageSchema(BasePageSchema): data = ma.fields.List(ma.fields.Nested(TestSchema)) blp = Blueprint("tests", "tests") @blp.route("/") class Pets(MethodView): @blp.response(TestPageSchema) @paginate() def get(self, **kwargs): """List pets""" return TestPagination.query.order_by(TestPagination.id) api.register_blueprint(blp) with app.app_context(): db.create_all() data = [TestPagination(name=str(i + 1)) for i in range(20)] db.session.bulk_save_objects(data) db.session.commit() test_client = app.test_client() resp = test_client.get("/?page=2&per_page=5") data = resp.json assert data["meta"] == { "links": { "first": "/?page=1&per_page=5", "last": "/?page=4&per_page=5", "next": "/?page=3&per_page=5", "prev": "/?page=1&per_page=5", }, "page": 2, "pages": 4, "per_page": 5, "total": 20, }
def register_extensions(app): db.init_app(app) login_manager.init_app(app) csrf.init_app(app) babel.init_app(app)
def create_app(object_name, env='prod'): """ An flask application factory, as explained here: http://flask.pocoo.org/docs/patterns/appfactories/ Arguments: object_name: the python path of the config object, e.g. app.settings.ProdConfig env: The name of the current environment, e.g. prod or dev """ app = Flask(__name__, static_url_path='') app.config.from_object(object_name) app.config['ENV'] = env # templates and statics app.template_folder = app.config['TEMPLATE_FOLDER'] app.static_folder = app.config['STATIC_FOLDER'] # initialize the cache cache.init_app(app) # initialize the debug tool bar debug_toolbar.init_app(app) # CSRF protection csrf.init_app(app) # Oauthlib oauth.init_app(app) # initialize SQLAlchemy db.init_app(app) # Authentication login_manager.init_app(app) # Mailgun mailgun.init_app(app) # Register blueprints app.register_blueprint(main) app.register_blueprint(auth) app.register_blueprint(profile) app.register_blueprint(authorize) # Api # Extneral # Import custom template filters app.register_blueprint(tpl_filter) # Enable error logging # if app.config['ENV'] == 'prod': # file_handler = RotatingFileHandler('app.log', maxBytes=1024 * 1024 * 100, backupCount=20) # formatter = logging.Formatter( "%(asctime)s | %(pathname)s:%(lineno)d | %(funcName)s | %(levelname)s | %(message)s ") # file_handler.setFormatter(formatter) # app.logger.addHandler(file_handler) # Language babel.init_app(app) # @babel.localeselector # def get_locale(): # return g.locale # # Set lang # @app.before_request # def before_request(): # lang_cookie = request.cookies.get('locale') # locale = lang_cookie if lang_cookie else 'en' # if not lang_cookie: # for lang in request.accept_languages.values(): # if lang[:2] in ['de', 'en']: # locale = lang[:2] # break # g.locale = locale return app