2011-01-25 103 views
17

也許這是一個愚蠢的問題,但我無法弄清楚如何在webpy一個HTTP狀態代碼。Webpy:如何設置HTTP狀態代碼300

在文檔中,我可以看到主狀態代碼的類型列表,但是是否有通用函數來設置狀態代碼?

我試圖實現一個unAPI服務器,它需要回復一個300 Multiple Choices只有一個標識符的請求。更多信息here

謝謝!

編輯:我剛剛發現,我可以將它通過web.ctx

web.ctx.status = '300 Multiple Choices'

這是最好的解決辦法嗎?

回答

18

web.py爲301和其他重定向類型執行此操作的方式是通過子類web.HTTPError(依次設置web.ctx.status)。例如:

class MultipleChoices(web.HTTPError): 
    def __init__(self, choices): 
     status = '300 Multiple Choices' 
     headers = {'Content-Type': 'text/html'} 
     data = '<h1>Multiple Choices</h1>\n<ul>\n' 
     data += ''.join('<li><a href="{0}">{0}</a></li>\n'.format(c) 
         for c in choices) 
     data += '</ul>' 
     web.HTTPError.__init__(self, status, headers, data) 

然後輸出此狀態代碼,你raise MultipleChoices在你的處理器:

class MyHandler: 
    def GET(self): 
     raise MultipleChoices(['http://example.com/', 'http://www.google.com/']) 

這將需要調整您的特定應用unAPI當然。

the source for web.HTTPError in webapi.py見。

+0

這種方法也可以做304的工作未修改的情況下,你以編程方式提供一些圖像 – 2016-03-03 03:42:50