2014-11-06 77 views
1

我正在一個非常簡單的python程序,我向用戶展示一個表單來選擇Android或IPhone並輸入一個電子郵件地址。 html和Python代碼包含在下面。無論什麼原因,我沒有從self.request.get獲得任何數據。webapp2 self.request.get返回零

HTML片段

<div id="select_OS"> 
       <form action="/optin" role="form" class="form-horizontal" method="post" enctype="text/plain"> 
        <div class="form-group"> 
        <div class="input_contents"> 
        <ul id="phone_list" class="list-unstyled"> 
         <li><label><input type="radio" class="" name="device" value="android"> Android</label></li> 
         <li><label><input type="radio" class="" name="device" value="iphone"> IPhone</label></li> 
        </ul> 
        </div> 
        </div> 
        <div class="container"> 

         <p class="info_txt_bottom"><span class="glyphicon glyphicon-asterisk"></span> 
         Instructions for 
         </p> 

         </<div> 

          <div class="form-group email_content"> 
           <div class="col-xs-6 col-sm-8 col-md-8 enteremail"><input type="email" class="form-control input-lg " id="email" name="email" placeholder="Enter Your Email" required></div> 
           <div class="col-xs-6 col-sm-4 col-dm-4" ><div class="sentbutton"> 
           <button type="submit" class="btn btn-success input-lg colorBlack">Send</button> 
           </div></div> 
          </div> 




       </form> 
      </div> 

的Python代碼片段

class ReadForm(webapp2.RequestHandler): 
    def post(self): 
     logging.warning('The email is %s',self.request.get('email')) 
     logging.warning('The device is %s',self.request.get('device')) 

app = webapp2.WSGIApplication([ 
    ('/', MainHandler), 
    ('/optin', ReadForm), 
], debug=True) 

再次,僅記錄打印「電子郵件是」不包括用戶輸入實際的電子郵件地址。 「設備是」的相同問題。爲什麼表單數據不被傳遞?

UPDATE

當我做logging.warning('The REQUEST %s',self.request),我得到

/optin HTTP/1.1 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Language: en-US,en;q=0.8 
Cache-Control: max-age=0 
Content-Length: 31 
Content-Type: text/plain 
Content_Length: 31 
Content_Type: text/plain 
Dnt: 1 

… 

device=android 
[email protected] 

通知的最後兩行。這些是我一直試圖用self.request.get提取的數據,但我一直在空回。

+0

實際上數據被通過,因爲如果我這樣做'logging.warning通過(「的請求%s」的, self.request)'我看到了一切。所以它是'self.request.get'不工作。 – learner 2014-11-06 06:12:36

回答

0

的問題是,您的enctype說enctype="text/plain"。簡單地刪除它,它應該工作。我不知道刪除enctype的任何負面影響。因此,如果其他人知道一個不好的主意,請分享。但基本上,一旦你刪除片段,您的數據應該通過罰款和您的日誌應閱讀

Content-Type: application/x-www-form-urlencoded 
1

跳出的唯一情況是輸入字段缺少value=""屬性。如果您使用HTML5,這可能是一個問題,至少根據的spec.

+0

你有沒有看到我的筆記,它說'logging.warning('請求是%s',self.request)'確實打印出包括所選設備和手機在內的整個請求?謝謝。 – learner 2014-11-06 06:18:15

+0

你還指哪一行?我有'價值'定義無處不在。 – learner 2014-11-06 06:19:18

+0

我指的是html輸入元素。但是,不,我沒有看到你的筆記。 – 2014-11-06 06:44:42

0

嚴格讀嘗試cgi.escape(self.request.get('email')),不self.request.get('email')同爲device下一行,當然import cgi

+0

我試過'cgi.escape',但當然沒有區別。正如我上面提到的那樣,日誌可以幫助我追蹤。數據的實際使用是針對數據存儲的,數據也不會持久化。 'cgi.escape'是爲了寫入字符串,所以它是一個很好的捕獲,但它遠沒有成爲問題。數據在那裏,正如我在打印'self.request'時看到的那樣。但無論出於何種原因,執行'self.request.get('emai')'不會返回電子郵件的值。 – learner 2014-11-06 14:45:31