暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Flask + Ant Vue 实战 (12)-flask 多应用隔离类似蓝图模式(看情况使用)

小儿来一壶枸杞酒泡茶 2021-02-26
1242

前言

应该隔离主要是为了独立使用自己自有的模块下的相关的资源信息,比如之前我们的后台的Aai和前台的Api,如果需要进行在同一个进程进行整合的时候,就需要把两个应该整合一起,不需要单独的分开独立部署。

这种方式有利有弊,这个需要结合自身的业务进行取舍。

Flask 中的应该隔离应用到了DispatcherMiddleware技术进行隔离。DispatcherMiddleware技其实是根据URL分割,然后请求分发给指定的不同的app,当然这种隔离形式其实和我蓝图模式差不多,但是蓝图和我们的App隔离是不一样,每个属于自己的资源也是不一样。

之前我们的业务就遇到过这种情况,很多的独立的App独立进行部署了,但是在测试环境上我们不希望又再进行一个一个App进行独立部署,这时候我们就可以整合到一个整体的App上进行直接部署。

简单的Dispatcher应用实例

PS:不同的版本引入的包的方式不同了,旧的版本下

from werkzeug.wsgi import DispatcherMiddleware

新的版本

from werkzeug.middleware.dispatcher import DispatcherMiddleware

完整示例1演示:

#!/usr/bin/evn python
# coding=utf-8
from werkzeug.serving import run_simple
from werkzeug.middleware.dispatcher import DispatcherMiddleware

# from werkzeug.wsgi import DispatcherMiddleware
from werkzeug.serving import run_simple
from flask import Flask, current_app

app1 = Flask('app01')
app2 = Flask('app02')


@app1.route('/index')
def index():
    return "app01"


@app2.route('/index')
def index():
    return "app2"


# http://www.oldboyedu.com/index
# http://www.oldboyedu.com/sec/index2
dm = DispatcherMiddleware(app1, {
    '/sec': app2,
})

if __name__ == "__main__":
    run_simple('localhost', 5000, dm)



相关的URL请求示例:

访问:http://localhost:5000/index

访问:http://localhost:5000/sec/index

上面的这种形式需要额外的单独开启另一个Url来标记区分开。如果我们的两个app服务下同时存在一个的路径的话好像就有点无法区分开了。

需要另外想想设计我们的切分规则:

#!/usr/bin/evn python
# coding=utf-8
from werkzeug.serving import run_simple
from werkzeug.middleware.dispatcher import DispatcherMiddleware

# from werkzeug.wsgi import DispatcherMiddleware
from werkzeug.serving import run_simple
from flask import Flask, current_app

appindex = Flask('appindex')

# ===============

app1 = Flask(__name__)
@app1.route('/api/app01')
def index():
    return "app01"


# ===============
app2 = Flask(__name__)
@app2.route('/api/app02')
def index():
    return "app02"


# ===============
dm = DispatcherMiddleware(appindex, {
    '/1': app1,
    '/2': app2,
})

if __name__ == "__main__":
    run_simple('localhost', 5000, dm)


挂载其他的子App到一个总的下面,然后给每个子APP做前缀路由的标记,然后再Nginx做相关根据路由转发。

上面的示例访问如下:

http://localhost:5000/1/api/app01

http://localhost:5000/2/api/app02

END

小钟同学 | 文  【原创】【转载请联系本人】| QQ:308711822



文章转载自小儿来一壶枸杞酒泡茶,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论