Flask框架基本模型

从Flask切换到FastAPI,备份一下。估计以后不会再用到Flask框架了。主要看中FastAPI的异步编程模型,可以和其它程序如mitmproxy比较好的融合在一个进程中。

主程序

python 复制代码
import os.path
import threading
from importlib import import_module

from flask import Flask
from flask_cors import CORS

import platform
import logging

# if platform.system() == 'Darwin':
#     logging_conf = os.path.join(os.path.dirname(__file__), '..', 'logging-dev.conf')
# else:
#     logging_conf = os.path.join(os.path.dirname(__file__), '..', 'logging-server.conf')
#
# logging.config.fileConfig(logging_conf)
# logger = logging.getLogger(__name__)


from twisted.web import server, wsgi
from twisted.internet import endpoints, reactor
class Main:
    def __init__(self):
        self.app = self.create_app()

        # self.messaging_methods = []
        # logger.info('CMS app initialized successfully.')

    def create_app(self):
        app = Flask(__name__)
        CORS(app, supports_credentials=True)  # 支持跨域请求
        # app.config.from_object('config')
        # self.register_database(app)
        self.register_blueprint(app)
        # init_login(app)
        # init_crawler(app)

        return app



    def register_blueprint(self, app):
        from qmtagent.api import api
        app.register_blueprint(api, url_prefix='/api')


    def start(self):
        root_resource = wsgi.WSGIResource(reactor, reactor.getThreadPool(), self.app)
        factory = server.Site(root_resource)
        # reactor.listenTCP(5000, factory)
        http_server = endpoints.TCP4ServerEndpoint(reactor, 5000)
        http_server.listen(factory)

        print("服务启动,监听端口为5000 ...")
        # start event loop
        reactor.run()

if __name__ == '__main__':
    Main().start()

Controller

python 复制代码
from . import api
from flask import jsonify, request
from playhouse.shortcuts import model_to_dict
from ..qmtclient import QMTClient


@api.route('/version')
def version():
    return 'v0.0.1'

@api.route('/acc_info')
def show_account():
    client = QMTClient()
    client.connect()
    accinfo = client.get_account_info()
    # json_obj = model_to_dict(accinfo.__class__, accinfo, recurse=False, only=['account_id', 'cash', 'market_value', 'total_asset'])
    json_obj = {'account_id': accinfo.account_id, 'cash':accinfo.cash, 'market_value': accinfo.market_value}
    response = jsonify(json_obj)
    return response


@api.route('/position')
def get_positions():
    return 'v0.0.1'

@api.route('/buy', methods=['POST'])
def buy():
    json_data = request.get_json()
    code = json_data['code']
    volume = json_data['volume']
    price = json_data['price']
    client = QMTClient()
    client.connect()
    client.buy(code, int(volume), float(price))


@api.route('/sell', methods=['POST'])
def sell():
    json_data = request.get_json()
    code = json_data['code']
    volume = json_data['volume']
    price = json_data['price']
    client = QMTClient()
    client.connect()
    client.sell(code, int(volume), float(price))


@api.route('/cancel')
def cancel_order():
    json_data = request.get_json()
    order_id = json_data['order_id']
    client = QMTClient()
    client.connect()
    client.cancel_order(order_id)

controller目录下放__init__.py,内容为:

python 复制代码
from flask import Blueprint

api = Blueprint('api', __name__)

from . import qmt_api
# from . import ebook_api
# from . import scrapy_api
相关推荐
THMAIL6 分钟前
深度学习从入门到精通 - AutoML与神经网络搜索(NAS):自动化模型设计未来
人工智能·python·深度学习·神经网络·算法·机器学习·逻辑回归
山烛29 分钟前
深度学习:残差网络ResNet与迁移学习
人工智能·python·深度学习·残差网络·resnet·迁移学习
eleqi40 分钟前
Python+DRVT 从外部调用 Revit:批量创建梁(2)
python·系统集成·revit·自动化生产流水线·外部访问
BYSJMG1 小时前
计算机毕设大数据方向:基于Spark+Hadoop的餐饮外卖平台数据分析系统【源码+文档+调试】
大数据·hadoop·分布式·python·spark·django·课程设计
OC溥哥9992 小时前
Flask论坛与个人中心页面开发教程完整详细版
后端·python·flask·html
Rhys..2 小时前
python + Flask模块学习 2 接收用户请求并返回json数据
python·学习·flask
Enougme2 小时前
python-虚拟试衣
python
nightunderblackcat3 小时前
新手向:Python制作贪吃蛇游戏(Pygame)
python·游戏·pygame
迷知悟道3 小时前
java面向对象四大核心特征之抽象---超详细(保姆级)
java·后端
flysh053 小时前
pyAutoGUI 模块主要功能介绍-(1)鼠标功能
python·计算机外设·鼠标控制