封装传入的参数
main.py文件from base.views import asapi from flask import Flask, request, jsonify from flask_cors import CORS from base.views import ApiException as ex app = Flask(__name__) # CORS(app, resources={r"/*": {"origins": ["http://localhost:63343"]}}) CORS(app, resources={r"/*": {"origins": "*"}}) def checker1(param): # print("checker", param) return True @app.route("/test", methods=['get', 'post']) @asapi(checker=checker1) def test(param): return param if __name__ == '__main__': # en = Encipher() # res = en.getDatas({"1": "123"}) # print(res) # print(en.encode_data(res)) app.run( host="0.0.0.0", port=6003, debug=False )
main.py文件下,新建一个base目录,创建文件views.py,写入下面内容
from flask import request, jsonify from lxml.html.clean import clean_html import inspect class SiteException(Exception): def __init__(self, message=None, code=None): self.message = message self.code = code def to_json(self): pass def __str__(self): # return jsonify({"code": self.code, "msg": self.message}) return self.message class ApiException(SiteException): def __init__(self, message, code=1001): self.message = message self.code = code def to_json(self): return {"code": self.code, "msg": self.message} # return self.message def raiseApiEx(e, c=1001): raise ApiException(e, c) def asapi(a=None, checker=None): def param_handler(func): def wrapper(*args, **kwargs): def __func(**kvargs): try: req = kvargs.get("param") if checker and not checker(req): raiseApiEx('检查不通过') params = req datas = {} for k, v in list(params.items()): if v == 'undefined': # 排除JS值空 params[k] = '' for k in list(params.keys()): v = params[k] if isinstance(v, str) and '<' in v and '>' in v: lv = v.lower() if 'script' in lv or 'cookie' in lv: params[k] = clean_html(v) # arginfos = getattr(func, 'arginfos') arginfos = inspect.signature(func).parameters for param_name, param_info in arginfos.items(): if param_name != "param" and param_name not in params: params[param_name] = param_info.default if param_name == "param": datas['param'] = params elif param_info.default == inspect.Parameter.empty and param_name not in params: raise raiseApiEx(f"{func.__name__}缺少参数:{param_name}") else: datas[param_name] = params.get(param_name, param_info.default) res = func(**datas) return apiReaspone(en.getDatas(res)) except ApiException as e: return jsonify(e.to_json()) param = dict(request.values.items()) setattr(__func, 'checker', checker) kwargs.setdefault("param", param) # 在这里可以对参数进行处理,比如验证、转换等操作 # 将参数传递给路由处理函数 return __func(**kwargs) return wrapper return param_handler def apiReaspone(data): return jsonify({"code": 200, "data": data})
版权属于:
geteshi
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
评论 (0)