__init__.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from flask import Flask, render_template
  2. from flask_moment import Moment
  3. from flask_sqlalchemy import SQLAlchemy
  4. from config import config
  5. from flask_login import LoginManager
  6. import flask_excel as excel
  7. from flask import json
  8. from datetime import datetime, date
  9. from flask_login import current_user
  10. from flask import jsonify
  11. from functools import wraps
  12. def permission(permission_id):
  13. def need_permission(func):
  14. @wraps(func)
  15. def inner(*args, **kargs):
  16. if not current_user.ID:
  17. return jsonify(401, {"msg": "认证失败,无法访问系统资源"})
  18. else:
  19. resources = []
  20. resourceTree = []
  21. resources += [res for org in current_user.organizations for res in org.resources if org.resources]
  22. resources += [res for role in current_user.roles for res in role.resources if role.resources]
  23. # remove repeat
  24. new_dict = dict()
  25. for obj in resources:
  26. if obj.ID not in new_dict:
  27. new_dict[obj.ID] = obj
  28. for resource in new_dict.values():
  29. resourceTree.append(resource.PERMS)
  30. if permission_id in resourceTree:
  31. return func(*args, **kargs)
  32. else:
  33. return jsonify({'msg': '当前操作没有权限', 'code': 403})
  34. return inner
  35. return need_permission
  36. JSONEncoder = json.JSONEncoder
  37. class CustomJSONEncoder(JSONEncoder):
  38. def default(self, obj):
  39. if isinstance(obj, datetime):
  40. return obj.strftime('%Y-%m-%d %H:%M:%S')
  41. elif isinstance(obj, date):
  42. return obj.strftime('%Y-%m-%d')
  43. else:
  44. return JSONEncoder.default(self, obj)
  45. loginmanager = LoginManager()
  46. loginmanager.session_protection = 'strong'
  47. #loginmanager.login_view = 'base.login'
  48. moment = Moment()
  49. db = SQLAlchemy()
  50. def create_app(config_name):
  51. app = Flask(__name__)
  52. # 替换默认的json编码器
  53. app.json_encoder = CustomJSONEncoder
  54. app.config.from_object(config[config_name])
  55. config[config_name].init_app(app)
  56. moment.init_app(app)
  57. db.init_app(app)
  58. loginmanager.init_app(app)
  59. from .base import base as base_blueprint
  60. app.register_blueprint(base_blueprint)
  61. excel.init_excel(app)
  62. return app