HandlerBase.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import simplejson as json
  2. import traceback
  3. from concurrent.futures import ThreadPoolExecutor
  4. from tornado.web import RequestHandler
  5. from model.log import logger
  6. import time
  7. import base64
  8. import pandas as pd
  9. from model.DateUtils import DateUtils
  10. from pandas.io.excel import ExcelWriter
  11. log = logger()
  12. class BaseHandler(RequestHandler, DateUtils):
  13. def __init__(self, application, request, **kwargs):
  14. RequestHandler.__init__(self, application, request, **kwargs)
  15. self._status_code = 200
  16. self.executor = ThreadPoolExecutor(200)
  17. self.set_default_headers()
  18. self._au = self.get_auth() if self.settings.get('auth') else True
  19. def options(self):
  20. # 返回方法1
  21. self.set_status(200)
  22. self.finish()
  23. def set_default_headers(self):
  24. super().set_default_headers()
  25. # 设置允许的请求头
  26. self.set_header("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS")
  27. self.set_header("X-XSS-Protecion", "1")
  28. self.set_header("Content-Security-Policy", "default-src 'self'")
  29. self.set_header("Access-Control-Allow-Credentials", "true")
  30. # 设置一些自己定义的请求头
  31. self.set_header("Access-Control-Allow-Headers",
  32. "Content-Type, Depth, User-Agent, Token, Origin, X-Requested-With, Accept, Authorization")
  33. self.set_header("Content-Type", "application/json; charset=UTF-8")
  34. self.set_header("Access-Control-Allow-Origin", "*")
  35. def write_json_tmp_java(self, data, status_code=200, msg='SUCCESS', total=1, total_data={}):
  36. self.write(json.dumps({'code': status_code, 'data': data, 'msg': msg}))
  37. def write_json(self, data, status_code=200, msg='success', total=1, total_data={}):
  38. self.write(json.dumps(
  39. {'status': {'msg': msg, "RetCode": status_code}, 'total': total, 'data': data, "total_data": total_data}))
  40. def write_fail(self, code=400, msg='error'):
  41. self.write(json.dumps({'status': {'msg': msg, "RetCode": code}}))
  42. def write_download(self, filename, data):
  43. self.set_header('Content-Type', 'application/octet-stream')
  44. self.set_header('Content-Disposition', f'attachment; filename={filename}.csv')
  45. self.set_header("Pargam", "no-cache")
  46. self.set_header("Cache-Control", "no-cache")
  47. df = pd.DataFrame(data).to_csv(encoding='utf-8')
  48. print(df)
  49. # with open(f'./{pitcher}_{start}_{end}.csv','w',newline='') as f:
  50. # f.write(df)
  51. with ExcelWriter("xxxx.xlsx") as ew:
  52. xs=pd.DataFrame(data).to_excel(ew,sheet_name="1",index=False)
  53. self.write(xs)
  54. def get_args(self):
  55. di = json.loads(self.request.body.decode(encoding='utf-8'))
  56. if isinstance(di, str):
  57. di = json.loads(di)
  58. return di
  59. def write_error(self, status_code, msg=None, **kwargs):
  60. if self.settings.get("serve_traceback") and "exc_info" in kwargs:
  61. # in debug mode, try to send a traceback
  62. lines = []
  63. for line in traceback.format_exception(*kwargs["exc_info"]):
  64. lines.append(line)
  65. self.write_json(dict(traceback=''.join(lines)), status_code, self._reason)
  66. elif msg:
  67. self.write_json(None, status_code, msg)
  68. else:
  69. self.write_json(None, status_code, self._reason)
  70. def _authentication(self):
  71. """
  72. :return: True, 认证通过, False 认证不通过
  73. """
  74. return True
  75. log.info("author %s" % self.request.headers)
  76. # log.info(self.request.remote_ip)
  77. if self.request.headers.get("Gip_real") == '183.129.168.74':
  78. return True
  79. if not self.request.headers.get("Authorization"):
  80. return False
  81. else:
  82. # redis 中判断值是否存在
  83. # ur = UserRedisComm()
  84. # key = "admin_account_check%s" % (self.request.headers.get("Authorization"))
  85. # return True if ur.r.get(key) else False
  86. return True
  87. def get_auth(self):
  88. # 不需要验证的请求
  89. authless = ['/api/get_yangguang_data', '/api/git_hook/data_center', '/api/git_hook/qc_web']
  90. url = self.request.full_url().split(str(self.settings.get('port')) + '/')[1]
  91. if url in authless:
  92. return True
  93. else:
  94. Authorization = self.request.headers.get('Authorization')
  95. if not Authorization:
  96. return False
  97. print(Authorization)
  98. try:
  99. origStr = Authorization.split(' ')[1][::-1]
  100. except:
  101. return False
  102. origStr += (4 - len(origStr) % 4) * "="
  103. print(origStr)
  104. print(float(base64.b64decode(origStr.encode('utf-8')).decode(encoding='utf-8', errors='ignore')))
  105. b = str(float(base64.b64decode(origStr.encode('utf-8')).decode(encoding='utf-8', errors='ignore')) * int(
  106. self.now.day))[:10]
  107. print("b:", b)
  108. diff = int(time.mktime(time.localtime())) - int(b)
  109. print(diff)
  110. if diff < 10:
  111. return True
  112. else:
  113. return False