我已經花了超過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)