123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- from flask import request, g
- from flask.json import JSONEncoder
- from flask_wtf.csrf import CsrfProtect
- from flask_maple import Bootstrap, Error, Captcha
- from flask_login import LoginManager
- from flask_babelex import Babel
- from flask_babelex import lazy_gettext as _
- from flask_mail import Mail
- from flask_principal import Principal
- from flask_avatar import Avatar
- from flask_cache import Cache
- from redis import StrictRedis
- def register_avatar(app):
- Avatar(app)
- def register_form(app):
- csrf = CsrfProtect()
- csrf.init_app(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)
- except NameError:
- return str(obj)
- return super(CustomJSONEncoder, self).default(obj)
- app.json_encoder = CustomJSONEncoder
- @babel.localeselector
- def get_locale():
- return 'zh'
-
-
-
-
-
-
- @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 register_maple(app):
- Bootstrap(app,
- css=('styles/monokai.css', 'styles/mine.css',
- 'tags/css/bootstrap-tokenfield.css'),
- js=('styles/upload.js', 'styles/forums.js', 'styles/mine.js',
- 'styles/topic.js', 'tags/bootstrap-tokenfield.min.js'),
- use_auth=True)
- Captcha(app)
- Error(app)
- def register_redis(app):
- redis_data = StrictRedis(db=app.config['CACHE_REDIS_DB'],
- password=app.config['CACHE_REDIS_PASSWORD'])
- return redis_data
- def register_cache(app):
- cache = Cache(config={'CACHE_TYPE': 'null'})
- cache.init_app(app)
- return cache
- def register_principal(app):
- principal = Principal()
- principal.init_app(app)
- def register_mail(app):
- mail = Mail()
- mail.init_app(app)
- return mail
- def register_login(app):
- login_manager = LoginManager()
- login_manager.init_app(app)
- login_manager.login_view = "auth.login"
- login_manager.session_protection = "strong"
- login_manager.login_message = _("Please login to access this page.")
-
- from maple.user.models import User
-
-
-
-
-
-
-
-
- @login_manager.user_loader
- def user_loader(id):
- user = User.query.get(int(id))
- return user
- return login_manager
- def register_jinja2(app):
- from maple.main.records import load_online_users
- from .filters import Filters, safe_clean
- app.jinja_env.globals['Title'] = Filters.Title
- app.jinja_env.globals['hot_tags'] = Filters.hot_tags
- app.jinja_env.globals['recent_tags'] = Filters.recent_tags
- app.jinja_env.globals['notice_count'] = Filters.notice_count
- app.jinja_env.filters['get_last_reply'] = Filters.get_last_reply
- app.jinja_env.filters['get_user_infor'] = Filters.get_user_infor
- app.jinja_env.filters['get_read_count'] = Filters.get_read_count
- app.jinja_env.filters['timesince'] = Filters.timesince
- app.jinja_env.filters['get_online_users'] = load_online_users
- app.jinja_env.filters['markdown'] = Filters.safe_markdown
- app.jinja_env.filters['safe_clean'] = safe_clean
- app.jinja_env.filters['is_collected'] = Filters.is_collected
|