Source

CherryPy Recipes / deployment / vhost / __init__.py

# -*- coding: utf-8 -*-
""" CherryPy provides some support for virtual hosting
of multi-applications on one single server instance.

You need a base application:

 * attach instances of other apps to that application
 * create a mapping between domains/sub-domains
   to path that match the instances of your sub-apps.

To run this example, add the following lines to your
hosts file:

127.0.0.1       my.example.com
127.0.0.1       www.example.com

Then start the server and go to:

http://my.example.com:8090/
http://www.example.com:8090/
"""
import cherrypy

class Root(object):
    def __init__(self):
        self.app1 = App1()
        self.app2 = App2()

class App1(object):
    @cherrypy.expose
    def index(self):
        return "Hello world from app1"
    
class App2(object):
    @cherrypy.expose
    def index(self):
        return "Hello world from app2"

if __name__ == '__main__':
    cherrypy.config.update({'server.socket_port': 8090})

    hostmap = {
        'my.example.com:8090': '/app1',
        'www.example.com:8090': '/app2',
    }
    
    config = {
        'request.dispatch': cherrypy.dispatch.VirtualHost(**hostmap)
    }
     
    cherrypy.quickstart(Root(), '/', {'/': config})
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.