2017-04-12 75 views
0

例如,如果用戶要到本地主機:8080/foobar228,我不需要定義一個函數在請求進行硬編碼爲foobar228頁。我想只是有一個功能,讓您所請求的網址(「foobar228」),並像GET和POST請求等信息,並返回HTML送達。任何方式來做到這一點?如何根據CherryPy中請求的URL顯示任意頁面?

回答

1

所使用的默認方法。這是一個例子。

import cherrypy 


class Root: 

    @cherrypy.expose 
    def default(self, *url_parts, **params): 
     req = cherrypy.request 
     print(url_parts) 
     body = [ 
      'Page served with method: %s' % req.method, 
      'Query string from req: %s' % req.query_string, 
      'Path info from req: %s' % req.path_info, 
      'Params (query string + body for POST): %s' % params, 
      'Body params (only for POST): %s' % req.body.params 
     ] 
     if url_parts: # url_parts is path_info but divided by "/" as a tuple 
      if url_parts[0] == 'foobar228': 
       body.append('Special foobar page') 
      else: 
       body.append('Page for %s' % '/'.join(url_parts)) 
     else: 
      body.append("No path, regular page") 
     return '<br>\n'.join(body) 

cherrypy.quickstart(Root()) 

的網址段成爲位置參數和任何查詢字符串(?foo=bar)是該方法的關鍵字參數,還爲POST方法身體參數被包括在關鍵字參數部分(在這種情況下方法定義中名稱爲params

1

特殊_cp_dispatch方法

_cp_dispatch是你在任何控制器按摩剩餘的部分CherryPy的得到處理之前的聲明的特殊方法。這爲您提供刪除,添加或以其他方式處理您希望的任何細分市場的能力,甚至可以完全改變剩餘的部分。

import cherrypy 

class Band(object): 
    def __init__(self): 
     self.albums = Album() 

    def _cp_dispatch(self, vpath): 
     if len(vpath) == 1: 
      cherrypy.request.params['name'] = vpath.pop() 
      return self 

     if len(vpath) == 3: 
      cherrypy.request.params['artist'] = vpath.pop(0) # /band name/ 
      vpath.pop(0) # /albums/ 
      cherrypy.request.params['title'] = vpath.pop(0) # /album title/ 
      return self.albums 

     return vpath 

    @cherrypy.expose 
    def index(self, name): 
     return 'About %s...' % name 

class Album(object): 
    @cherrypy.expose 
    def index(self, artist, title): 
     return 'About %s by %s...' % (title, artist) 

if __name__ == '__main__': 
    cherrypy.quickstart(Band()) 

通知控制器如何定義_cp_dispatch,它只有一個參數,該URL路徑信息分解成它的片段。

的方法,可以檢查和操縱的段的列表中,去除任何或在任何位置添加新的段。然後將新的分段列表發送給調度員,調度員將使用它來查找適當的資源。

在上面的例子中,你應該可以去以下網址:

http://localhost:8080/nirvana/

http://localhost:8080/nirvana/albums/nevermind/

的/必殺技/段被關聯到帶和/沒關係/段涉及該專輯。

爲了實現這一目標,我們_cp_dispatch方法適用於默認調度匹配對頁面處理程序簽名和它們在處理程序樹中的位置的URL的想法。

docs

+0

我正在尋找實際接收URL併發送回HTML文檔,因爲在由cherrypy託管的網站上爲每個頁面定義一個新函數似乎毫無意義,我仍然需要看起來,用這個定義每個頁面的函數。 – MiseroMCS

相關問題