find-object-bundle-builder/FindObjectBundleBuilder/Tools/server/handler/base.py

81 lines
2.6 KiB
Python
Raw Permalink Normal View History

2025-04-18 07:35:35 +00:00
#!/usr/bin/python
# encoding:utf-8
from curses import nocbreak
import sys
from tornado import gen
from tornado.web import RequestHandler
from tornado.escape import json_decode, json_encode, utf8
import json, simplejson
class BaseHandler(RequestHandler):
"""解决JS跨域请求问题"""
def set_default_headers(self):
# 设置允许请求的方法
self.set_header('Access-Control-Allow-Methods', 'POST, DELETE, PUT, GET, OPTIONS')
# Tornado获取请求'origin'的方法
origin = self.request.headers.get('Origin', '')
# 设置允许的'origin',只设置'*'时某些特定情况下会失败故最好优先获取请求的域加入允许组中
self.set_header('Access-Control-Allow-Origin', origin or "*")
# 设置是否允许客户端携带证书式访问。通过对 Credentials 参数的设置,就可以保持跨域 Ajax 时的 Cookie
self.set_header('Access-Control-Allow-Credentials', 'true')
self.set_header('Access-Control-Allow-Headers', '*')
self.set_header("Access-Control-Max-Age", 1000)
self.set_header("Content-type", "application/json")
# vue一般需要访问options方法 如果报错则很难继续所以只要通过就行了当然需要其他逻辑就自己控制。因为vue访问时会先执行一次预加载直接放过就好了
def options(self):
# 返回方法1
self.set_status(204) # 这里的状态码一定要设置200建议
self.finish()
def get_post_data(self, *params):
post_data = self.request.body_arguments
post_data = {x: post_data.get(x)[0].decode("utf-8") for x in post_data.keys()}
if not post_data:
post_data = self.request.body.decode('utf-8')
post_data = simplejson.loads(post_data)
print("post_data", post_data)
valus = {}
msg = ''
for key in params:
if key in post_data:
valus[key] = post_data[key]
else:
msg = key + ' not found'
break
return msg, valus
def get_get_data(self, *params):
valus = {}
msg = ''
for key in params:
value = self.get_argument(key, None)
if value != None:
valus[key] = value
else:
msg = key + ' not found'
break
return msg, valus
def error(self, code, msg):
result = {
'status': False,
'code': code,
'msg': msg
}
self.write(json_encode(result))