__init__.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # ********************************************************************************
  4. # Copyright © 2018 jianglin
  5. # File Name: __init__.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2018-02-11 14:52:12 (CST)
  9. # Last Update: 星期日 2018-02-11 15:31:19 (CST)
  10. # By:
  11. # Description:
  12. # ********************************************************************************
  13. from flask import request, current_app
  14. from flask_wtf.csrf import CSRFProtect
  15. from flask_avatar import Avatar
  16. from flask_maple.models import db
  17. from flask_maple.redis import Redis
  18. from flask_maple.mail import Mail
  19. from flask_principal import Principal
  20. from flask_msearch import Search
  21. from flask_caching import Cache
  22. from . import babel, login, maple
  23. db = db
  24. csrf = CSRFProtect()
  25. redis_data = Redis()
  26. cache = Cache()
  27. mail = Mail()
  28. principal = Principal()
  29. search = Search(db=db)
  30. class AvatarCache(Avatar):
  31. @cache.cached(
  32. timeout=180, key_prefix=lambda: "avatar:{}".format(request.url))
  33. def avatar(self, text, width=128):
  34. from flask import abort, make_response
  35. from flask_avatar.avatar import GenAvatar
  36. width_range = current_app.config.get('AVATAR_RANGE', [0, 512])
  37. if width < width_range[0] or width > width_range[1]:
  38. abort(404)
  39. stream = GenAvatar.generate(width, text)
  40. buf_value = stream.getvalue()
  41. response = make_response(buf_value)
  42. response.headers['Content-Type'] = 'image/jpeg'
  43. return response
  44. avatar = AvatarCache()
  45. def init_app(app):
  46. db.init_app(app)
  47. avatar.init_app(app)
  48. cache.init_app(app)
  49. csrf.init_app(app)
  50. principal.init_app(app)
  51. redis_data.init_app(app)
  52. mail.init_app(app)
  53. search.init_app(app)
  54. babel.init_app(app)
  55. login.init_app(app)
  56. maple.init_app(app)