__init__.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2017 jianglin
  5. # File Name: __init__.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2017-01-25 20:10:50 (CST)
  9. # Last Update:星期日 2017-4-2 12:23:43 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. import os
  14. from flask import Flask
  15. from flask_maple.lazy import LazyExtension
  16. from forums.admin.urls import admin
  17. from .app import register_app
  18. from .filters import register_jinja2
  19. from .logs import register_logging
  20. def create_app(config):
  21. templates = os.path.abspath(
  22. os.path.join(os.path.dirname(__file__), os.pardir, 'templates'))
  23. static = os.path.abspath(
  24. os.path.join(os.path.dirname(__file__), os.pardir, 'static'))
  25. app = Flask(__name__, template_folder=templates, static_folder=static)
  26. app.config.from_object(config)
  27. if app.config['SUBDOMAIN']['forums']:
  28. app.url_map._rules.clear()
  29. app.url_map._rules_by_endpoint.clear()
  30. app.url_map.default_subdomain = 'forums'
  31. app.add_url_rule(
  32. app.static_url_path + '/<path:filename>',
  33. endpoint='static',
  34. view_func=app.send_static_file,
  35. subdomain='forums')
  36. register(app)
  37. return app
  38. def register(app):
  39. register_extension(app)
  40. register_router(app)
  41. register_logging(app)
  42. register_jinja2(app)
  43. register_app(app)
  44. def register_router(app):
  45. from forums.api.urls import api_routers
  46. from forums.docs.urls import docs_routers
  47. api_routers(app)
  48. docs_routers(app)
  49. def register_extension(app):
  50. extension = LazyExtension(
  51. module='forums.extension.',
  52. extension=['db', 'avatar', 'cache', 'csrf', 'bootstrap', 'captcha',
  53. 'error', 'redis_data', 'principal', 'babel',
  54. 'login_manager', 'maple_app', 'mail', 'middleware'])
  55. extension.init_app(app)
  56. admin.init_app(app)