2014-03-04 71 views
1

我的代碼是:如何在Python(brubeck)中解析表單發佈的數據?

class GameSession(JSONMessageHandler, UserHandlingMixin): 
    @allow_all 
    def post(self): 
     s = self.s = Session() 
     payload = self.message.body 
     # payload = json.loads(payload) 
     print 'payload start' 
     print payload 
     print 'payload end' 
     current_gamesession = self.check_gamesession(payload.prize_id, 
                  payload.publisher_id) 

我看到的是:

payload start 
prize_id=2&publisher_id=32&foreign_user_id=1234 
payload end 
ERROR:root:'str' object has no attribute 'prize_id' 
Traceback (most recent call last): 
    File "/home/vagrant/src/brubeck/brubeck/request_handling.py", line 338, in __call__ 
    rendered = fun(*self._url_args) 
    File "/vagrant/mysite/api/views.py", line 31, in wrapper 
    return func(self, *args, **kwargs) 
    File "/vagrant/mysite/api/views.py", line 629, in post 

如何獲得表單數據?

**編輯** 順便說一句,這就是如果我發送數據x-www-form-urlencoded。如果我作爲form-data送,我得到:

payload start 
------WebKitFormBoundaryFX1GuivvAA42T3uk 
Content-Disposition: form-data; name="prize_id" 

2 
------WebKitFormBoundaryFX1GuivvAA42T3uk 
Content-Disposition: form-data; name="publisher_id" 

1 
------WebKitFormBoundaryFX1GuivvAA42T3uk 
Content-Disposition: form-data; name="foreign_user_id" 

2321 
------WebKitFormBoundaryFX1GuivvAA42T3uk-- 

payload end 
+0

什麼框架,您使用的? –

+0

我正在使用'brubeck' – Shamoon

+1

您的意思是:http://brubeck.io/ – jfs

回答

2

傳統上,你會創建一個cgi.FieldStorage對象,它讀取標準輸入(通常是 - 有關於它做什麼,當CGI標準)。現在有點過時了。 Urlparse.parse_qs旨在從表格數據轉換爲字典:

>>> import urlparse 
>>> urlparse.parse_qs("prize_id=2&publisher_id=32&foreign_user_id=1234") 
{'prize_id': ['2'], 'foreign_user_id': ['1234'], 'publisher_id': ['32']} 
>>> 
+0

POST數據是否作爲查詢字符串來處理? – Shamoon

+0

是的 - 你可以看到它有OP的原始輸出。這就是我得到我解析的字符串的地方。 – holdenweb

+1

對不起,我可以更清楚地說明 - 對於POST請求,編碼的表單數據是CGI進程的標準輸入 – holdenweb