2014-04-14 83 views
0

我已經花了超過4天試圖找出這一點,但我的每一次嘗試都失敗了,所以我想我可以真正使用你的一些幫助。路由CherryPy網絡應用(路由資源故障)

在下面的代碼,Storm與功能submit_data()根據pagename參數在實例化傳遞和idx參數從在Javascript XMLHTTP GET請求中傳遞,其獲取從數據庫中的數據的應用程序。

基本上我想要有一個索引頁,其中Root類,以及一堆類似的Storm頁面,其中有不同的pagename參數從一個XML文件中讀取。

我正在使用RoutesDispatcher,因爲我正在使用XML文件參數化頁面名稱(地址)。

當我使用/storm作爲地址它甚至沒有工作可能是因爲名稱衝突,所以我設置地址爲/st/

現在它顯示標題,但它根本找不到submit_data函數。 Chrome控制檯會引發以下錯誤。

Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/st/submit_data?idx=0 
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/st/submit_data?idx=2 
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/st/submit_data?idx=1 

我怎樣組織會這樣,當我輸入localhost:在我的瀏覽器8080 /短噸,在HTML/JavaScript的模板storm.html查找submit_data功能,並調用它,並在網頁上顯示呢?在我開始路由之前,它工作得很好。

class Storm(object): 
    pagename = "" 
    def __init__(self, pagename): 
     self.pagename = pagename 

    @cherrypy.expose 
    @cherrypy.tools.mako(filename="storm.html", directories=MEDIA_DIR) 
    def index(self, name=None): 
     return {'size': len(params["dashboards"][self.pagename])} 

    @cherrypy.expose 
    def submit_data(self, idx): 
     idx = int(idx) 
     chart = params["dashboards"][self.pagename][idx] 
     # Sample page that displays the number of records in "table" 
     # Open a cursor, using the DB connection for the current thread 
     c = cherrypy.thread_data.dbdict[chart["dbname"]].cursor() 
     print 'query being executed......' 
     c.execute(chart["command"]) 
     print 'query being fetched......' 
     res = c.fetchall() 
     c.close() 

     # construct a JSON object from query result 
     jsres = [] 
     jsres.append(chart["selected"]) 
         . 
         . 
         . 

     return json.dumps(jsres) 

class Root(object): 
    #storm = Storm("first") 
    @cherrypy.expose 
    @cherrypy.tools.mako(filename="index.html", directories=MEDIA_DIR) 
    def index(self, name=None): 
     return {} 

config = {'/media': 
       {'tools.staticdir.on': True, 
       'tools.staticdir.dir': MEDIA_DIR, 
       } 
     } 

root = Root() 
storm = Storm("first") 
mapper = cherrypy.dispatch.RoutesDispatcher() 
mapper.connect('home','/',controller=root, action='index') 
mapper.connect('st','/st/',controller=storm, action='index') 
conf = {'/': {'request.dispatch': mapper}} 
app=cherrypy.tree.mount(root=None,config=conf) 
cherrypy.quickstart(app) 

回答

1
mapper.connect('st','/st/submit_data',controller=storm, action='submit_data') 

Routes明確列出他們所有的處理程序,正因爲如此也不必暴露。基於這個例子,你可能不需要路由調度器。安裝了多個根的默認調度程序可以正常工作。