HandlerBase.py 4.8 KB

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