__init__.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #!/usr/bin/env python
  2. # -*- coding=UTF-8 -*-
  3. #*************************************************************************
  4. # Copyright © 2015 JiangLin. All rights reserved.
  5. # File Name: app.py
  6. # Author:JiangLin
  7. # Mail:xiyang0807@gmail.com
  8. # Created Time: 2016-03-14 21:04:34
  9. #*************************************************************************
  10. from flask import Flask
  11. from flask_assets import Environment, Bundle
  12. from flask_login import LoginManager, AnonymousUserMixin
  13. from config import load_config
  14. from redis import StrictRedis
  15. from flask_mail import Mail
  16. from flask_principal import Principal
  17. from itsdangerous import URLSafeTimedSerializer
  18. from flask_sqlalchemy import SQLAlchemy
  19. def register_login(app):
  20. login_manager = LoginManager()
  21. login_manager.login_view = "auth.login"
  22. login_manager.session_protection = "strong"
  23. login_manager.login_message = u"这个页面要求登陆,请登陆"
  24. login_manager.anonymous_user = Anonymous
  25. login_manager.init_app(app)
  26. return login_manager
  27. def register_redis(app):
  28. config = app.config
  29. redis_data = StrictRedis(db=config['REDIS_DB'],
  30. password=config['REDIS_PASSWORD'])
  31. return redis_data
  32. def register_routes(app):
  33. from maple.forums.views import site
  34. app.register_blueprint(site,url_prefix=app.config["FORUMS_URL"])
  35. from maple.auth.views import site
  36. app.register_blueprint(site, url_prefix=app.config["AUTH_URL"])
  37. from maple.question.views import site
  38. app.register_blueprint(site, url_prefix=app.config["QUESTION_URL"])
  39. from maple.group.views import site
  40. app.register_blueprint(site, url_prefix=app.config["USERGROUP_URL"])
  41. from maple.admin.views import site
  42. app.register_blueprint(site, url_prefix=app.config["ADMIN_URL"])
  43. from maple.board.views import site
  44. app.register_blueprint(site,url_prefix=app.config["BOARD_URL"] + '/<forums_url>')
  45. from maple.user.views import site
  46. app.register_blueprint(site, url_prefix=app.config["USER_URL"] + '/<user_url>')
  47. def register_db(app):
  48. db.init_app(app)
  49. def register_form(app):
  50. from flask_wtf.csrf import CsrfProtect
  51. csrf = CsrfProtect()
  52. csrf.init_app(app)
  53. def register_jinja2(app):
  54. from maple.main.records import load_online_users
  55. from maple.main.filters import (safe_markdown,
  56. safe_clean,
  57. join_time,
  58. judge, groups,
  59. load_read_count,
  60. load_user_count,
  61. load_forums_count)
  62. app.jinja_env.filters['safe_markdown'] = safe_markdown
  63. app.jinja_env.filters['safe_clean'] = safe_clean
  64. app.jinja_env.filters['judge'] = judge
  65. app.jinja_env.filters['groups'] = groups
  66. app.jinja_env.filters['load_online_users'] = load_online_users
  67. app.jinja_env.filters['join_time'] = join_time
  68. app.jinja_env.filters['load_read_count'] = load_read_count
  69. app.jinja_env.filters['load_user_count'] = load_user_count
  70. app.jinja_env.filters['load_forums_count'] = load_forums_count
  71. def register_assets(app):
  72. bundles = {
  73. 'home_js': Bundle(
  74. 'style/js/jquery.min.js',
  75. 'style/js/bootstrap.min.js',
  76. output='style/assets/home.js',
  77. filters='jsmin'),
  78. 'home_css': Bundle(
  79. 'style/css/bootstrap.min.css',
  80. output='style/assets/home.css',
  81. filters='cssmin')
  82. }
  83. assets = Environment(app)
  84. assets.register(bundles)
  85. class Anonymous(AnonymousUserMixin):
  86. id = 0
  87. name = u"Anonymous"
  88. is_superuser = False
  89. def register(app):
  90. register_routes(app)
  91. register_jinja2(app)
  92. register_assets(app)
  93. register_db(app)
  94. register_form(app)
  95. def create_app():
  96. app = Flask(__name__, static_folder='static')
  97. config = load_config()
  98. app.config.from_object(config)
  99. return app
  100. db = SQLAlchemy()
  101. app = create_app()
  102. mail = Mail(app)
  103. login_manager = register_login(app)
  104. principals = Principal(app)
  105. redis_data = register_redis(app)
  106. login_serializer = URLSafeTimedSerializer(app.config['SECRET_KEY'])
  107. register(app)
  108. from flask import (render_template,g,request,send_from_directory)
  109. from flask_login import current_user
  110. @app.before_request
  111. def before_request():
  112. g.user = current_user
  113. from maple.forums.forms import SortForm
  114. g.sortform = SortForm()
  115. from maple.main.records import mark_online
  116. mark_online(request.remote_addr)
  117. @app.errorhandler(404)
  118. def not_found(error):
  119. return render_template('templet/error_404.html'), 404
  120. @app.route('/robots.txt',methods=['GET'])
  121. @app.route('/favicon.ico',methods=['GET'])
  122. def static_from_root():
  123. return send_from_directory(app.static_folder, request.path[1:])