Flask快速入门(20) — 多app应用

Flask快速入门(20) — 多app应用

之前一直是一个app,如果有多个app该怎么进行分发呢?

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

# 注册两个app
app1 = Flask('app01')
app2 = Flask('app02')

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

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

dm = DispatcherMiddleware(app1,{
    '/sec':app2,
})
if __name__ == '__main__':
    run_simple('localhost',5000,dm)

dm是DispatcherMiddleware实例化对象,所以dm()调用时执行的是__call__方法。源码:

# dm = DispatcherMiddleware(app1,{'/sec':app2})

def __init__(self, app, mounts=None):
    self.app = app
    self.mounts = mounts or {}

def __call__(self, environ, start_response):
    script = environ.get("PATH_INFO", "")  # 获取url信息,如url为http://127.0.0.1:5000/sec/index;此时获取到的script为‘/sec/index’
    path_info = ""

    while "/" in script:
        # 此时 self.mounts = {'/sec':app2}
        if script in self.mounts:
            app = self.mounts[script]
            break

        script, last_item = script.rsplit("/", 1)  # 循环从右边以/切分1次,给script重新赋值
        path_info = "/%s%s" % (last_item, path_info)
    else:
        # 如果没有匹配上,app = app1,如果匹配上了app = self.mounts[script] 即app2
        app = self.mounts.get(script, self.app)

    original_script_name = environ.get("SCRIPT_NAME", "")
    environ["SCRIPT_NAME"] = original_script_name + script
    environ["PATH_INFO"] = path_info
    return app(environ, start_response)

原文地址:https://www.cnblogs.com/863652104kai/p/11708508.html

时间: 2024-08-01 18:51:13

Flask快速入门(20) — 多app应用的相关文章

网站后端_Python+Flask.0003.FLASK快速入门之Hello Word?

框架特点: 1. 非常小, 小到可称为微型框架 2. 可扩展, 设计初衷就是不会替开发者做太多决策,支持随时更换或动手实现扩展模块 3. 三依赖, 路由/调试/WSGI(由WERKZEUG提供的WEB服务器网关接口实现),模版系统(由JINJA2实现),签名(由ITSDANGEROUS实现) 快速安装: pip install flask 快速入门: #!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: 

Flask快速入门(17) — flask_session

Flask快速入门(17) - flask_session 作用:将默认保存的签名cookie中的值,保存到 redis/memcached/file/Mongodb/SQLAlchemy 安装:pip install flask-session 使用1: from flask import Flask,session from flask_session import RedisSessionInterface import redis app = Flask(__name__) conn=r

Flask快速入门(18) — 信号

Flask快速入门(18) - 信号 作用:Flask框架中的信号基于blinker,其主要就是让开发者可以在flask请求过程中定制一些用户行为 安装:pip install blinker 内置信号: request_started = _signals.signal('request-started') # 请求到来前执行 request_finished = _signals.signal('request-finished') # 请求结束后执行 before_render_templ

【转】Flask快速入门

迫不及待要开始了吗?本页提供了一个很好的 Flask 介绍,并假定你已经安装好了 Flask.如果没有,请跳转到 安装 章节. 一个最小的应用 一个最小的 Flask 应用看起来会是这样: from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run() 把它保存为 hello.py 

Flask快速入门,知识整理

一.Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来) Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器. “微”

第二章 Vue快速入门--20 品牌案例-完成品牌列表的添加功能+ 21 品牌案例-根据Id完成品牌的删除

1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width,initial-scale=1.0"> 7 <title>Document</title> 8

flask快速入门笔记三_上下文对象:Flask核心机制

首先声明:内容大部分来自huizhiwang,只是单纯记笔记. 1 请求 :WSGI WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的Web服务器和Web应用程序之间的一种简单而通用的接口. WSGI将Web服务分成两个部分:服务器和应用程序.WGSI服务器只负责与网络相关的两件事:接收浏览器的 HTTP请求.向浏览器发送HTTP应答:而对HTTP请求的具体处理

flask快速入门

概述: Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 (类似于php中的smarty,旨在让程序实现界面与数据分离). Flask使用 BSD 授权. WSGI(Python Web Server Gateway Interface),是Python应用程序或框架和Web服务器之间的一种接口,已经被广泛接受.类似于java中的servelet api. 一个最简单的应用: from flask im

二 Flask快速入门

1: 外部可访问的服务器: 如果你运行了这个服务器,你会发现它只能从你自己的计算机上访问,网络中其它任何的地方都不能访问.在调试模式下,用户可以在你的计算机上执行任意 Python 代码.因此,这个行为是默认的.如果你禁用了 debug 或信任你所在网络的用户,你可以简单修改调用 run() 的方法使你的服务器公开可用,如下: app.run(host='0.0.0.0'),这会让操作系统监听所有公网 IP. 2: 调试模式 虽然 run() 方法适用于启动本地的开发服务器,但是你每次修改代码后