def create_app(config_name): app = Flask(__name__) app.config.from_object(config[config_name]) config[config_name].init_app(app) db.init_app(app) bcrypt.init_app(app) login_manager.init_app(app) babel = Babel() babel.init_app(app) from api.main import main app.register_blueprint(main) from api.auth import auth app.register_blueprint(auth) from api.flask_admin import create_admin_page create_admin_page(app) from api.page_route import meinv, link app.register_blueprint(meinv) app.register_blueprint(link) return app
def register_babel(app): babel = Babel() babel.init_app(app) class CustomJSONEncoder(JSONEncoder): """This class adds support for lazy translation texts to Flask's JSON encoder. This is necessary when flashing translated texts.""" def default(self, obj): from speaklater import is_lazy_string if is_lazy_string(obj): try: return unicode(obj) # python 2 except NameError: return str(obj) # python 3 return super(CustomJSONEncoder, self).default(obj) app.json_encoder = CustomJSONEncoder @babel.localeselector def get_locale(): user = getattr(g, 'user', None) if user is not None: if g.user.is_authenticated: return user.setting.locale or 'zh' return request.accept_languages.best_match(app.config[ 'LANGUAGES'].keys()) @babel.timezoneselector def get_timezone(): user = getattr(g, 'user', None) if user is not None: if g.user.is_authenticated: return user.setting.timezone or 'UTC' return 'UTC'
def create_app(settings_ns): babel = Babel() app = Flask( __name__, static_url_path="/static", static_folder="static", instance_relative_config=False, ) app.config.from_object(settings_ns) app.register_blueprint(main_bp) app.jinja_env.filters["clean_uri"] = clean_uri app.context_processor(utility_processor) babel.init_app(app) if app.config["DEBUG"]: try: from flask_debugtoolbar import DebugToolbarExtension except ImportError: LOGGER.info('cannot import lib "flask_debugtoolbar". ' 'Make sure it is installed and available in the ' 'import path.') else: toolbar = DebugToolbarExtension() toolbar.init_app(app) return app
def creat_app(): app = Flask(__name__) app.config.from_object('app.secure') app.config.from_object('app.setting') register_blueprint(app) # 数据库 插件 db.init_app(app) db.create_all(app=app) migtate = Migrate(app,db) # migtate.add_command('db', MigrateCommand) # login 登录插件初始化 login_manager.init_app(app) # 没登录,将其引导到登录页面 login_manager.login_view = 'web.login' login_manager.login_message='请先登录' # admin 注册 from .admin import admin admin.init_app(app) # 汉化 babel = Babel(app) babel.init_app(app) return app
def register_babel(app): translations = os.path.abspath(os.path.join( os.path.dirname(__file__), os.pardir, 'translations')) domain = Domain(translations) babel = Babel(default_domain=domain) babel.init_app(app) class CustomJSONEncoder(JSONEncoder): """This class adds support for lazy translation texts to Flask's JSON encoder. This is necessary when flashing translated texts.""" def default(self, obj): from speaklater import is_lazy_string if is_lazy_string(obj): try: return unicode(obj) # python 2 except NameError: return str(obj) # python 3 return super(CustomJSONEncoder, self).default(obj) app.json_encoder = CustomJSONEncoder @babel.localeselector def get_locale(): return request.accept_languages.best_match(['zh', 'en']) @babel.timezoneselector def get_timezone(): return 'UTC'
def register_babel(app): babel = Babel() babel.init_app(app) class CustomJSONEncoder(JSONEncoder): """This class adds support for lazy translation texts to Flask's JSON encoder. This is necessary when flashing translated texts.""" def default(self, obj): from speaklater import is_lazy_string if is_lazy_string(obj): try: return unicode(obj) # python 2 except NameError: return str(obj) # python 3 return super(CustomJSONEncoder, self).default(obj) app.json_encoder = CustomJSONEncoder @babel.localeselector def get_locale(): user = getattr(g, 'user', None) if user is not None: if g.user.is_authenticated: return user.setting.locale or 'zh' return request.accept_languages.best_match( app.config['LANGUAGES'].keys()) @babel.timezoneselector def get_timezone(): user = getattr(g, 'user', None) if user is not None: if g.user.is_authenticated: return user.setting.timezone or 'UTC' return 'UTC'
def create_app(): from app.web.util.util import refresh_control_info app = Flask(__name__) app.config.from_pyfile('secure.py') app.config.from_pyfile('settings.py') # 注册SQLAlchemy db.init_app(app) # 注册login模块 login_manager.init_app(app) login_manager.login_view = 'web.login' login_manager.login_message = '请先登录或注册' # 注册admin模块 from app.model.user import User from app.model.vote import VoteEvent admin = Admin(app=app, name='后台管理系统', template_mode='bootstrap3') admin.add_view(UserModelView(User, db.session, name='用户管理')) admin.add_view(VoteEventModelView(VoteEvent, db.session, name='投票管理')) # 国际化 babel = Babel() babel.init_app(app) # 刷新投票控制信息 with app.app_context(): refresh_control_info() return app
def register_babel(app): translations = os.path.abspath( os.path.join(os.path.dirname(__file__), os.pardir, 'translations')) domain = Domain(translations) babel = Babel(default_domain=domain) babel.init_app(app) class CustomJSONEncoder(JSONEncoder): """This class adds support for lazy translation texts to Flask's JSON encoder. This is necessary when flashing translated texts.""" def default(self, obj): from speaklater import is_lazy_string if is_lazy_string(obj): try: return unicode(obj) # python 2 except NameError: return str(obj) # python 3 return super(CustomJSONEncoder, self).default(obj) app.json_encoder = CustomJSONEncoder @babel.localeselector def get_locale(): return request.accept_languages.best_match(['zh', 'en']) @babel.timezoneselector def get_timezone(): return 'UTC'
def register_babel(app): translations = os.path.abspath( os.path.join(os.path.dirname(__file__), os.pardir, 'translations')) domain = Domain(translations) babel = Babel(default_domain=domain) babel.init_app(app) # class CustomJSONEncoder(JSONEncoder): # """This class adds support for lazy translation texts to Flask's # JSON encoder. This is necessary when flashing translated texts.""" # def default(self, obj): # from speaklater import is_lazy_string # if is_lazy_string(obj): # try: # return unicode(obj) # python 2 # except NameError: # return str(obj) # python 3 # return super(CustomJSONEncoder, self).default(obj) # app.json_encoder = CustomJSONEncoder @babel.localeselector def get_locale(): user = getattr(g, 'user', None) if user is not None: if request.path.startswith('/admin'): return 'zh_Hans_CN' if g.user.is_authenticated: return user.setting.locale or 'zh' return request.accept_languages.best_match( app.config['LANGUAGES'].keys()) @babel.timezoneselector def get_timezone(): user = getattr(g, 'user', None) if user is not None: if g.user.is_authenticated: return user.setting.timezone or 'UTC' return 'UTC'
def creat_app(config_name): app = Flask(__name__) app.config.from_object(config[config_name]) bootstrap = Bootstrap(app) db.init_app(app) db.create_all(app=app) register_blueprint(app) moment.init_app(app) # 让python支持命令行工作 manager = Manager(app) # 使用migrate绑定app和db migrate = Migrate(app, db) # 添加迁移脚本的命令到manager中 manager.add_command('db', MigrateCommand) # login 登录插件初始化 login_manager.init_app(app) # 没登录,将其引导到登录页面 login_manager.login_view = 'web.login' login_manager.login_message = '请先登录' # admin 注册 from .admin import admin admin.init_app(app) # 汉化 babel = Babel(app) babel.init_app(app) ''' app_context_processor在flask中被称作上下文处理器,借助app_context_processor 可以让所有自定义变量在模板中可见 函数的返回结果必须是dict,dict中的key将作为变量在所有模板中可见 ''' app.context_processor(utility_processor) return app
class InvenioI18N(object): """Invenio I18N module.""" def __init__( self, app=None, date_formats=None, localeselector=None, timezoneselector=None, entrypoint="invenio_i18n.translations", ): """Initialize extension.""" self.babel = Babel(date_formats=date_formats, configure_jinja=True, default_domain=MultidirDomain()) self.localeselector = localeselector self.timezoneselector = timezoneselector self.entrypoint = entrypoint self._locales_cache = None if app: self.init_app(app) def init_app(self, app): """Flask application initialization.""" # Initialize Flask-BabelEx app.config.setdefault("I18N_LANGUAGES", []) # TODO: allow to plug custom localeselector and timezoneselector self.babel.init_app(app) self.babel.localeselector(self.localeselector or get_locale) self.babel.timezoneselector(self.timezoneselector or get_timezone) # Add paths to search for message catalogs domain = self.babel._default_domain # 1. Paths listed in I18N_TRANSLATIONS_PATHS for p in app.config.get("I18N_TRANSLATIONS_PATHS", []): domain.add_path(p) # 2. <app.root_path>/translations app_translations = os.path.join(app.root_path, "translations") if os.path.exists(app_translations): domain.add_path(app_translations) # 3. Entrypoints if self.entrypoint: domain.add_entrypoint(self.entrypoint) # Register Jinja2 template filters for date formatting (Flask-Babel # already installs other filters). app.add_template_filter(filter_to_utc, name="toutc") app.add_template_filter(filter_to_user_timezone, name="tousertimezone") # Lazy string aware JSON encoder. app.json_encoder = get_lazystring_encoder(app) app.extensions["invenio-i18n"] = self def get_locales(self): """Get a list of supported locales.""" if self._locales_cache is None: langs = [self.babel.default_locale] for l in current_app.config.get("I18N_LANGUAGES", []): langs.append(self.babel.load_locale(l)) self._locales_cache = langs return self._locales_cache
import app.config as config app.config.from_object(config) app.jinja_env.filters['substring'] = jinja2_filter_substring app.jinja_env.filters['startswith'] = jinja2_filter_startswith app.jinja_env.filters['datedelta'] = jinja2_filter_date_with_delta app.jinja_env.filters['heatmap'] = jinja2_filter_photo_collection_heat_map app.jinja_env.filters['averagerating'] = jinja2_filter_get_average_rating app.jinja_env.filters['numberoforder'] = jinja2_filter_get_number_of_order from flask_babelex import Babel babel = Babel(default_locale='zh_Hans_CN') babel.init_app(app) from flask.ext.sqlalchemy import SQLAlchemy db = SQLAlchemy(app) from app.app_provider import AppInfo AppInfo.set_app(app) AppInfo.set_db(db) # 初始化云端的图片存储服务 image_store = ImageStore(app) # 初始化Gallery存储的服务,用于存储所有的用户上传的头像 AppInfo.set_galleries_store_service(image_store) # 初始化Image存储的服务,用于存储所有摄影师上传的作品图像 AppInfo.set_image_store_service(image_store)
class InvenioI18N(object): """Invenio I18N extension.""" def __init__(self, app=None, date_formats=None, localeselector=None, timezoneselector=None, entry_point_group='invenio_i18n.translations'): """Initialize extension. :param app: Flask application. :param data_formats: Override default date/time formatting. :param localeselector: Callback function used for locale selection. (Default: :func:`invenio_i18n.selectors.get_locale()`) :param timezoneselector: Callback function used for timezone selection. (Default: ``BABEL_DEFAULT_TIMEZONE``) :param entry_point_group: Entrypoint used to load translations from. Set to ``None`` to not load translations from entry points. """ self.domain = MultidirDomain() self.babel = Babel( date_formats=date_formats, configure_jinja=True, default_domain=self.domain, ) self.localeselector = localeselector self.timezoneselector = timezoneselector self.entry_point_group = entry_point_group self._locales_cache = None self._languages_cache = None if app: self.init_app(app) def init_app(self, app): """Flask application initialization. The initialization will: * Set default values for the configuration variables. * Load translations from paths specified in ``I18N_TRANSLATIONS_PATHS``. * Load translations from ``app.root_path>/translations`` if it exists. * Load translations from a specified entry point. * Add ``toutc`` and ``tousertimezone`` template filters. * Install a custom JSON encoder on app. """ self.init_config(app) # Initialize Flask-BabelEx self.babel.init_app(app) self.babel.localeselector(self.localeselector or get_locale) self.babel.timezoneselector(self.timezoneselector or get_timezone) # 1. Paths listed in I18N_TRANSLATIONS_PATHS for p in app.config.get('I18N_TRANSLATIONS_PATHS', []): self.domain.add_path(p) # 2. <app.root_path>/translations app_translations = os.path.join(app.root_path, 'translations') if os.path.exists(app_translations): self.domain.add_path(app_translations) # 3. Entrypoints if self.entry_point_group: self.domain.add_entrypoint(self.entry_point_group) # Register blueprint if URL is set. if app.config['I18N_SET_LANGUAGE_URL'] \ and app.config['I18N_LANGUAGES']: app.register_blueprint( blueprint, url_prefix=app.config['I18N_SET_LANGUAGE_URL']) # Register Jinja2 template filters for date formatting (Flask-Babel # already installs other filters). app.add_template_filter(filter_to_utc, name='toutc') app.add_template_filter(filter_to_user_timezone, name='tousertimezone') app.add_template_filter(filter_language_name, name='language_name') app.add_template_filter( filter_language_name_local, name='language_name_local') app.context_processor(lambda: dict(current_i18n=current_i18n)) # Lazy string aware JSON encoder. app.json_encoder = get_lazystring_encoder(app) app.extensions['invenio-i18n'] = self def init_config(self, app): """Initialize configuration.""" for k in dir(config): if k.startswith('I18N_'): app.config.setdefault(k, getattr(config, k)) def iter_languages(self): """Iterate over list of languages.""" default_lang = self.babel.default_locale.language default_title = self.babel.default_locale.get_display_name( default_lang) yield (default_lang, default_title) for l, title in current_app.config.get('I18N_LANGUAGES', []): yield l, title def get_languages(self): """Get list of languages.""" if self._languages_cache is None: self._languages_cache = list(self.iter_languages()) return self._languages_cache def get_locales(self): """Get a list of supported locales. Computes the list using ``I18N_LANGUAGES`` configuration variable. """ if self._locales_cache is None: langs = [self.babel.default_locale] for l, dummy_title in current_app.config.get('I18N_LANGUAGES', []): langs.append(self.babel.load_locale(l)) self._locales_cache = langs return self._locales_cache @property def locale(self): """Get current locale.""" return get_current_locale() @property def language(self): """Get current language code.""" return get_current_locale().language @property def timezone(self): """Get current timezone.""" return get_current_timezone()
# Login Manager login_manager = LoginManager() login_manager.init_app(app) # Bcrypt bcrypt = Bcrypt() bcrypt.init_app(app) # QRCode qrcode = QRcode() qrcode.init_app(app) # Babel domain = Domain(dirname='translations') babel = Babel(default_domain=domain) babel.init_app(app) # Flask-Assets from .assets import bundles assets = Environment(app) assets.append_path(os.path.join(os.path.dirname(__file__), './static')) assets.append_path( os.path.join(os.path.dirname(__file__), './static/bower_components')) assets.register(bundles) # Flask-Admin admin = Admin(app, name='Interface Admin', index_view=StatisticsView(url='/admin', name='Vue générale')) admin.add_view(CompanyView(get_db().companies, name='Entreprises')) admin.add_view(UserView(get_db().users, name='Utilisateurs'))
class InvenioI18N(object): """Invenio I18N module.""" def __init__(self, app=None, date_formats=None, localeselector=None, timezoneselector=None, entrypoint='invenio_i18n.translations'): """Initialize extension.""" self.babel = Babel(date_formats=date_formats, configure_jinja=True, default_domain=MultidirDomain()) self.localeselector = localeselector self.timezoneselector = timezoneselector self.entrypoint = entrypoint self._locales_cache = None if app: self.init_app(app) def init_app(self, app): """Flask application initialization.""" # Initialize Flask-BabelEx app.config.setdefault("I18N_LANGUAGES", []) # TODO: allow to plug custom localeselector and timezoneselector self.babel.init_app(app) self.babel.localeselector(self.localeselector or get_locale) self.babel.timezoneselector(self.timezoneselector or get_timezone) # Add paths to search for message catalogs domain = self.babel._default_domain # 1. Paths listed in I18N_TRANSLATIONS_PATHS for p in app.config.get("I18N_TRANSLATIONS_PATHS", []): domain.add_path(p) # 2. <app.root_path>/translations app_translations = os.path.join(app.root_path, 'translations') if os.path.exists(app_translations): domain.add_path(app_translations) # 3. Entrypoints if self.entrypoint: domain.add_entrypoint(self.entrypoint) # Register Jinja2 template filters for date formatting (Flask-Babel # already installs other filters). app.add_template_filter(filter_to_utc, name="toutc") app.add_template_filter(filter_to_user_timezone, name="tousertimezone") # Lazy string aware JSON encoder. app.json_encoder = get_lazystring_encoder(app) app.extensions['invenio-i18n'] = self def get_locales(self): """Get a list of supported locales.""" if self._locales_cache is None: langs = [self.babel.default_locale] for l in current_app.config.get('I18N_LANGUAGES', []): langs.append(self.babel.load_locale(l)) self._locales_cache = langs return self._locales_cache
class InvenioI18N(object): """Invenio I18N extension.""" def __init__(self, app=None, date_formats=None, localeselector=None, timezoneselector=None, entry_point_group='invenio_i18n.translations'): """Initialize extension. :param app: Flask application. :param data_formats: Override default date/time formatting. :param localeselector: Callback function used for locale selection. (Default: :func:`invenio_i18n.selectors.get_locale()`) :param timezoneselector: Callback function used for timezone selection. (Default: ``BABEL_DEFAULT_TIMEZONE``) :param entry_point_group: Entrypoint used to load translations from. Set to ``None`` to not load translations from entry points. """ self.domain = MultidirDomain() self.babel = Babel( date_formats=date_formats, configure_jinja=True, default_domain=self.domain, ) self.localeselector = localeselector self.timezoneselector = timezoneselector self.entry_point_group = entry_point_group self._locales_cache = None self._languages_cache = None if app: self.init_app(app) def init_app(self, app): """Flask application initialization. The initialization will: * Set default values for the configuration variables. * Load translations from paths specified in ``I18N_TRANSLATIONS_PATHS``. * Load translations from ``app.root_path>/translations`` if it exists. * Load translations from a specified entry point. * Add ``toutc`` and ``tousertimezone`` template filters. * Install a custom JSON encoder on app. """ self.init_config(app) # Initialize Flask-BabelEx self.babel.init_app(app) self.babel.localeselector(self.localeselector or get_locale) self.babel.timezoneselector(self.timezoneselector or get_timezone) # 1. Paths listed in I18N_TRANSLATIONS_PATHS for p in app.config.get('I18N_TRANSLATIONS_PATHS', []): self.domain.add_path(p) # 2. <app.root_path>/translations app_translations = os.path.join(app.root_path, 'translations') if os.path.exists(app_translations): self.domain.add_path(app_translations) # 3. Entrypoints if self.entry_point_group: self.domain.add_entrypoint(self.entry_point_group) # Register Jinja2 template filters for date formatting (Flask-Babel # already installs other filters). app.add_template_filter(filter_to_utc, name='toutc') app.add_template_filter(filter_to_user_timezone, name='tousertimezone') app.add_template_filter(filter_language_name, name='language_name') app.add_template_filter(filter_language_name_local, name='language_name_local') app.add_template_global(current_i18n, name='current_i18n') # Lazy string aware JSON encoder. app.json_encoder = get_lazystring_encoder(app) app.extensions['invenio-i18n'] = self def init_config(self, app): """Initialize configuration.""" for k in dir(config): if k.startswith('I18N_'): app.config.setdefault(k, getattr(config, k)) def iter_languages(self): """Iterate over list of languages.""" default_lang = self.babel.default_locale.language default_title = self.babel.default_locale.get_display_name( default_lang) yield (default_lang, default_title) for l, title in current_app.config.get('I18N_LANGUAGES', []): yield l, title def get_languages(self): """Get list of languages.""" if self._languages_cache is None: self._languages_cache = list(self.iter_languages()) return self._languages_cache def get_locales(self): """Get a list of supported locales. Computes the list using ``I18N_LANGUAGES`` configuration variable. """ if self._locales_cache is None: langs = [self.babel.default_locale] for l, dummy_title in current_app.config.get('I18N_LANGUAGES', []): langs.append(self.babel.load_locale(l)) self._locales_cache = langs return self._locales_cache @property def locale(self): """Get current locale.""" return get_current_locale() @property def language(self): """Get current language code.""" return get_current_locale().language @property def timezone(self): """Get current timezone.""" return get_current_timezone()
from flask_babelex import Babel, Domain, _ """An example for creating LinkCol or ButtonCol with translations. You have to call ./babel.sh lncompile before using this example. """ # Setup the flask app app = Flask(__name__) # Setup babel app.config['BABEL_DEFAULT_LOCALE'] = 'en_GB' app.config['BABEL_TRANSLATION_DIRECTORIES'] = 'translations' language_domain = Domain(dirname='translations', domain='messages') language = Babel(default_locale='en_GB', configure_jinja=True, default_domain=language_domain) language.init_app(app) # This class shows how to use translations for columns and tables class TranslatedTable(Table): name = Col('name') button = ButtonCol('button_name', 'some_url', translation_enabled=True) def __init__(self, items): super(TranslatedTable, self).__init__(items, translation_enabled=True) # The main page @app.route('/', methods=['GET', 'POST']) def index(): # The column names will be translated by flask_table