From 5438746a2e59d8795f792dc1e96506c72159d2e3 Mon Sep 17 00:00:00 2001 From: AdminWhaleFall Date: Sat, 16 Apr 2022 11:33:36 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix:=20flask=5Fapp=20=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api.json | 1 - flask_app/__init__.py | 40 ++++++++++++ flask_app/app.py | 122 ------------------------------------ flask_app/data.db | Bin 0 -> 40960 bytes flask_app/model.py | 13 ++++ flask_app/views/__init__.py | 6 ++ flask_app/views/views.py | 9 +++ run.py | 62 ++++++++++++++++++ 8 files changed, 130 insertions(+), 123 deletions(-) create mode 100644 flask_app/__init__.py delete mode 100644 flask_app/app.py create mode 100644 flask_app/data.db create mode 100644 flask_app/model.py create mode 100644 flask_app/views/__init__.py create mode 100644 flask_app/views/views.py create mode 100644 run.py diff --git a/api.json b/api.json index d92294f..fba3228 100644 --- a/api.json +++ b/api.json @@ -5,7 +5,6 @@ "method": "POST", "header": { "Referer": "https://fanyi.caiyunapp.com/", - "Cookie": "UM_distinctid=17fd5c7a9ba69a-0200a7005bf45a-56171958-146d15-17fd5c7a9bb749; _gid=GA1.2.2046680529.1648971157; _gat_gtag_UA_185151443_2=1; _ga=GA1.2.44459633.1648559084; _ga_65TZCJSDBD=GS1.1.1648971156.4.1.1648971164.0; _ga_R9YPR75N68=GS1.1.1648971156.4.1.1648971164.52", "Cy-Token": "token 9876032166" }, "data": { diff --git a/flask_app/__init__.py b/flask_app/__init__.py new file mode 100644 index 0000000..01e1d78 --- /dev/null +++ b/flask_app/__init__.py @@ -0,0 +1,40 @@ +# encoding=utf8 +# app 工厂函数 +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +import sys,os +from loguru import logger + + +# 判断系统 +WIN = sys.platform.startswith('win') +if WIN: # 如果是 Windows 系统,使用三个斜线 + prefix = 'sqlite:///' +else: # 否则使用四个斜线 + prefix = 'sqlite:////' + +# 日志处理 +logger.remove() +logger.add( + sink=sys.stdout, + format="{time:YYYY-MM-DD at HH:mm:ss} - {level} - {message}", + colorize=True, + backtrace=True +) + + + +app = Flask(__name__) +app.config['SQLALCHEMY_DATABASE_URI'] = prefix + \ + os.path.join(app.root_path, 'data.db') +app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 关闭对模型修改的监控 +db = SQLAlchemy(app) + +# buleprint +from .views import main as main_blueprint +app.register_blueprint(main_blueprint) + + + + + diff --git a/flask_app/app.py b/flask_app/app.py deleted file mode 100644 index b74fa83..0000000 --- a/flask_app/app.py +++ /dev/null @@ -1,122 +0,0 @@ -# encoding=utf8 -import json -import time -from flask import Flask, make_response, request, jsonify, render_template -from flask_cors import CORS -from urllib3 import disable_warnings - -from utils import * - -disable_warnings() - -app = Flask(__name__) -CORS(app, supports_credentials=True, resources="/*") # 跨域 - -# 解决与 vue 冲突 -app.jinja_env.variable_start_string = '[[' -app.jinja_env.variable_end_string = ']]' - -def request_parse(req_data: request) -> dict: - '''解析请求数据并以字典的形式返回''' - if req_data.method == 'POST': - data = req_data.form - - elif req_data.method == 'GET': - data = req_data.args - - return dict(data) - - -class BaseResponse(BaseModel): - """返回的响应""" - status: int = 0 # 状态码 0-->成功 1-->失败 - msg: str = "前端显示的简短信息" - data: Optional[str] - - @property - def resp(self): - '''BaseModel类型返回json''' - response = make_response( - json.dumps( - self.dict(), - ensure_ascii=False, - sort_keys=False - ), - ) - response.mimetype = 'application/json' - # 跨域设置 - response.headers['Access-Control-Allow-Origin'] = '*' - response.headers['Access-Control-Allow-Methods'] = 'OPTIONS,HEAD,GET,POST' - response.headers['Access-Control-Allow-Headers'] = 'x-requested-with' - return response - - -@app.route("/", methods=['GET']) -def index(): - return render_template('admin.html') - -@app.route("/testapi/", methods=['POST']) -@logger.catch -def testapi(): - brs = BaseResponse() - # 需要传入 json 数据 - try: - jsonData = request.get_json() - api = API(**jsonData) - phone = jsonData.get('phone') - if not phone: - raise ValueError("参数 phone 没有!") - try: - resp = test_resq(api, phone) - brs.status = 0 - brs.msg = f"请求成功!{resp}" - brs.data = resp.text - except Exception as why: - brs.status = 1 - brs.msg = f"请求失败:{why}" - except Exception as why: - brs.status = 1 - brs.msg = f"参数有误:{why}" - return brs.resp - - -@app.route("/submitapi/", methods=['POST']) -def submitapi(): - """提交API到json文件""" - # 需要传入 json 数据 - jsonData = request.get_json() - api = API(**jsonData).handle_API() - data = json.loads(json_path.read_text(encoding='utf8')) - with open(json_path, mode="w", encoding="utf8") as j: - try: - data.append(api.dict()) - json.dump(data, j, ensure_ascii=False, sort_keys=False) - return BaseResponse(status=0, msg="写入成功!").resp - except Exception as why: - return BaseResponse(status=1, msg=f"写入失败!{why}").resp - - -@app.route("/backapi/", methods=['GET', 'POST']) -def backjson(): - """备份json文件""" - try: - timeStruct = time.localtime(int(time.time())) - strTime = time.strftime("%Y_%m_%d_%H_%M_%S", timeStruct) - Path(json_path.parent, 'apiback').mkdir(exist_ok=True) - json_back_path = Path(json_path.parent, 'apiback', - f"api_back_{strTime}.json") - with open(json_back_path, mode="w") as j: - j_data = json.loads(json_path.read_text(encoding='utf8')) - json.dump(j_data, j, ensure_ascii=False, sort_keys=False) - return BaseResponse(status=0, msg="备份成功!").resp - except Exception as why: - return BaseResponse(status=1, msg=f"备份失败{why}").resp - - -@app.route("/downloadapi/", methods=['GET']) -def downloadapi(): - """下载接口文件""" - return json_path.read_text(encoding='utf8') - - -app.run(host="0.0.0.0", port=10981, debug=True) diff --git a/flask_app/data.db b/flask_app/data.db new file mode 100644 index 0000000000000000000000000000000000000000..ec549782519f505446f8466032c6bc94d353ec88 GIT binary patch literal 40960 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