Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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)
Ejemplo n.º 11
0
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'])
Ejemplo n.º 12
0
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()
Ejemplo n.º 13
0
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
Ejemplo n.º 14
0
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'])
Ejemplo n.º 15
0
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)
Ejemplo n.º 16
0
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
Ejemplo n.º 17
0
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))
Ejemplo n.º 18
0
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
Ejemplo n.º 19
0
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
Ejemplo n.º 20
0
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
Ejemplo n.º 21
0
def register_extensions(app: Flask) -> None:
    db.init_app(app)
    login.init_app(app)
    babel.init_app(app)
Ejemplo n.º 22
0
""" 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:
Ejemplo n.º 23
0
    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,
        }
Ejemplo n.º 24
0
def register_extensions(app):
    db.init_app(app)
    login_manager.init_app(app)
    csrf.init_app(app)
    babel.init_app(app)
Ejemplo n.º 25
0
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