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 0000000..ec54978
Binary files /dev/null and b/flask_app/data.db differ
diff --git a/flask_app/model.py b/flask_app/model.py
new file mode 100644
index 0000000..e03bf1f
--- /dev/null
+++ b/flask_app/model.py
@@ -0,0 +1,13 @@
+# encoding=utf8
+# 储存数据库模型
+from . import db
+from datetime import datetime
+
+class Apis(db.Model):
+ id = db.Column(db.Integer, primary_key=True) # 主键
+ desc = db.Column(db.String(100)) # 描述
+ url = db.Column(db.String(100)) # 链接
+ method = db.Column(db.String(10)) # 请求方法
+ header = db.Column(db.String(9999)) # 请求头
+ data = db.Column(db.String(9999)) # 请求数据
+ add_time = db.Column(db.DateTime(), default=datetime.now()) # 添加时间
diff --git a/flask_app/views/__init__.py b/flask_app/views/__init__.py
new file mode 100644
index 0000000..cd43d14
--- /dev/null
+++ b/flask_app/views/__init__.py
@@ -0,0 +1,6 @@
+from flask import Blueprint
+
+main = Blueprint("main",__name__)
+
+from . import views
+from .. import db
\ No newline at end of file
diff --git a/flask_app/views/views.py b/flask_app/views/views.py
new file mode 100644
index 0000000..961f098
--- /dev/null
+++ b/flask_app/views/views.py
@@ -0,0 +1,9 @@
+# encoding=utf8
+# flask app views
+from . import main
+from .. import db
+
+@main.route("/",methods=['GET','POST'])
+def index():
+ return "index"
+
diff --git a/run.py b/run.py
new file mode 100644
index 0000000..45762ab
--- /dev/null
+++ b/run.py
@@ -0,0 +1,62 @@
+# encoding=utf8
+# flask app 主文件
+import click
+from loguru import logger
+from pathlib import Path
+import json
+from flask_app import db, app
+from flask_app.model import Apis
+
+
+@click.command()
+@click.option('--drop', is_flag=True, help='重建数据库') # 设置选项
+def init(drop):
+ """初始化数据库"""
+ if drop:
+ db.drop_all()
+ logger.info("删除数据库...准备重建..")
+ db.create_all()
+ logger.success("数据库创建成功")
+
+
+@click.command()
+@logger.catch()
+def json2sqlite():
+ """将json数据转为sqlite数据库"""
+ j = Path(app.root_path).parent.joinpath(
+ "api.json").read_text(encoding="utf8")
+
+ jss = json.loads(j)
+ for js in jss:
+ api = Apis(
+ desc=str(js['desc']),
+ url=str(js['url']),
+ method=str(js['method']),
+ data=str(js['data']),
+ header=str(js['header'])
+ )
+ # print(api.desc)
+ db.session.add(api)
+ db.session.commit()
+ logger.success("json To sqlite 成功!")
+
+
+@click.command()
+@click.option('--host', '-h', help='监听地址', default="0.0.0.0")
+@click.option('--port', '-p', help='监听端口', default=9090)
+def start(host, port):
+ """启动 flask app"""
+ app.run(host=host, port=port, debug=True)
+
+
+@click.group()
+def cli():
+ pass
+
+
+cli.add_command(init)
+cli.add_command(start)
+cli.add_command(json2sqlite)
+
+if __name__ == "__main__":
+ cli()