¿Cómo implementar el Despacho de Aplicaciones de Frasco por Ruta con WSGI?

Me gustaría usar un solo dominio como entorno de ensayo para varias aplicaciones de matraz que eventualmente se ejecutarán en sus propios dominios.

Algo como:

  • example_staging.com/app1
  • example_staging.com/app2
  • example_staging.com/app3

dónde:

  • example_staging.com/app1 actúa igual que app1.example_staging.com
  • example_staging.com/app2 actúa igual que app2.example_staging.com
  • example_staging.com/app3 actúa igual que app3.example_staging.com

o:

  • example_staging.com/app1 actúa igual que app1.com
  • example_staging.com/app2 actúa igual que app2.com
  • example_staging.com/app3 actúa igual que app3.com

Aplicación de inicio:

from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello from Flask!' 

Archivo de configuración de inicio WSGI:

 import sys project_home = u'/home/path/sample1' if project_home not in sys.path: sys.path = [project_home] + sys.path from app import app as application 

Refiriéndose a:

http://flask.pocoo.org/docs/0.10/patterns/appdispatch/

No sé dónde agregar el código dado en los documentos como ejemplo y cómo debería ser create_app, default_app, get_user_for_prefix.

Nota: Usar PythonAnywhere

SOLUCIÓN

Archivo de configuración WSGI después de la entrada de Glenns:

 import sys # add your project directory to the sys.path project_home = u'/home/path/app1' if project_home not in sys.path: sys.path = [project_home] + sys.path from werkzeug.wsgi import DispatcherMiddleware from app import app as app1 from app2.app import app as app2 from app3.app import app as app3 application = DispatcherMiddleware(app1, { '/app2': app2, '/app3': app3 }) 

Estructura de la carpeta:

 app1 folder app2 folder app3 folder 

La clave a tener en cuenta, aquí, es que en realidad tendrás 4 aplicaciones (3 aplicaciones individuales y una aplicación combinada). Esto es ignorar la distinción de puesta en escena / en vivo porque la puesta en escena y en vivo son solo copias entre sí en diferentes directorios.

Cree cada una de las aplicaciones individuales y haga que respondan en sus dominios individuales. Luego, cree una nueva aplicación que importe las variables de la aplicación de las aplicaciones individuales y las combine utilizando DispatcherMiddleware como en el ejemplo bajo el título “Combinación de aplicaciones” en la página de documentos a la que se vincula.

Esto funcionó para mí:

Estructura de la carpeta

 DISPATCHER (folder) dispatcher.py app1 (folder) __init__.py app2 (folder) __init__.py app3 (folder) __init__.py 

dispatcher.py

 from flask import Flask from werkzeug.wsgi import DispatcherMiddleware from werkzeug.exceptions import NotFound from app1 import app as app1 from app2 import app as app2 from app3 import app as app3 app = Flask(__name__) app.wsgi_app = DispatcherMiddleware(NotFound(), { "/app1": app1, '/app2': app2, '/app3': app3 }) if __name__ == "__main__": app.run() 

app1 a app3 __init__.py

 from flask import Flask app = Flask(__name__) @app.route("/") def index_one(): return "Hi im 1 or 2 or 3" if __name__ == "__main__": app.run() 

Trabajando

 python app.py localhost:5000/app1 "Hi im one" localhost:5000/app2 "Hi im two" localhost:5000/app3 "Hi im three" 

Otra configuracion

Puede importar otra aplicación, como app0 y agregar un menú a las aplicaciones, cambiando esto con NotFound()

Esto ayudó

Despacho de aplicaciones