extension.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2016 jianglin
  5. # File Name: extension.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2016-10-25 21:57:10 (CST)
  9. # Last Update:星期日 2017-4-16 17:37:40 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import request, g, current_app
  14. from flask_wtf.csrf import CsrfProtect
  15. from flask_admin import Admin
  16. from flask_babelex import Babel, Domain
  17. from flask_babelex import lazy_gettext as _
  18. from flask_avatar import Avatar
  19. from flask_maple.middleware import Middleware
  20. from flask_maple.models import db
  21. from flask_maple.app import App
  22. from flask_maple.json import CustomJSONEncoder
  23. from flask_maple.bootstrap import Bootstrap
  24. from flask_maple.error import Error
  25. from flask_maple.captcha import Captcha
  26. from flask_maple.redis import Redis
  27. from flask_maple.mail import Mail
  28. from flask_cache import Cache
  29. from flask_principal import Principal
  30. from flask_login import LoginManager
  31. from flask_msearch import Search
  32. import os
  33. def register_babel():
  34. base_path = os.path.abspath(os.path.dirname(__file__))
  35. translations = os.path.join(base_path, os.pardir, 'translations')
  36. domain = Domain(translations)
  37. babel = Babel(default_domain=domain)
  38. @babel.localeselector
  39. def get_locale():
  40. user = getattr(g, 'user', None)
  41. if user is not None:
  42. if request.path.startswith('/admin'):
  43. return 'zh_Hans_CN'
  44. if g.user.is_authenticated:
  45. return user.setting.locale or 'zh'
  46. return request.accept_languages.best_match(current_app.config[
  47. 'LANGUAGES'].keys())
  48. @babel.timezoneselector
  49. def get_timezone():
  50. user = getattr(g, 'user', None)
  51. if user is not None:
  52. if g.user.is_authenticated:
  53. return user.setting.timezone or 'UTC'
  54. return 'UTC'
  55. return babel
  56. def register_login():
  57. login_manager = LoginManager()
  58. login_manager.login_view = "auth.login"
  59. login_manager.session_protection = "strong"
  60. login_manager.login_message = _("Please login to access this page.")
  61. # login_manager.anonymous_user = Anonymous
  62. @login_manager.user_loader
  63. def user_loader(id):
  64. from forums.api.user.models import User
  65. user = User.query.get(int(id))
  66. return user
  67. # @login_manager.token_loader
  68. # def load_token(token):
  69. # return None
  70. return login_manager
  71. babel = register_babel()
  72. db = db
  73. admin = Admin(name='HonMaple', template_mode='bootstrap3')
  74. avatar = Avatar()
  75. csrf = CsrfProtect()
  76. bootstrap = Bootstrap(
  77. css=('styles/monokai.css', 'styles/mine.css',
  78. 'tags/css/bootstrap-tokenfield.css', 'select2/css/select2.min.css'),
  79. js=('styles/upload.js', 'styles/forums.js', 'styles/following.js',
  80. 'styles/topic.js', 'tags/bootstrap-tokenfield.min.js',
  81. 'select2/js/select2.min.js'),
  82. use_auth=True)
  83. captcha = Captcha()
  84. error = Error()
  85. redis_data = Redis()
  86. cache = Cache()
  87. mail = Mail()
  88. principal = Principal()
  89. login_manager = register_login()
  90. maple_app = App(json=CustomJSONEncoder)
  91. middleware = Middleware()
  92. search = Search()