2014-11-06 3 views
1

Я работаю над очень простой программой python, где я представляю пользователю форму для выбора Android или IPhone и для ввода адреса электронной почты. Ниже приведены коды html и python. По какой-то причине я не получаю никаких данных от self.request.get.webapp2 self.request.get возвращает nil

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 («The запрос% s», self.request) 'Я вижу все. Так что это 'self.request.get', это не работает. – learner

ответ

0

Проблемы заключается в том, что ваш enctype говорит enctype="text/plain". Просто удалите это, и он должен работать. Я не знаю никаких негативных последствий удаления enctype. Поэтому, если кто-то еще знает причину, это плохая идея, пожалуйста, поделитесь ею. Но в принципе, как только вы удалите его, ваши данные должны прийти через штраф и ваш журнал должен прочитать

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

Единственное, что выпрыгивает, это отсутствие атрибута value="" на вашем поле ввода. Если вы используете HTML5, что может быть проблемой, по крайней мере, в соответствии со строгим считыванием в spec.

+0

Вы видели мою заметку, где говорится, что 'logging.warning ('Запрос% s', self.request)' распечатывает весь запрос, включая выбранное устройство и телефон? Благодарю. – learner

+0

Также на какой строке вы ссылаетесь? У меня есть значение, определяемое везде. – learner

+0

Я имел в виду элементы ввода html. Но нет, я не видел твоей записки. –

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

Смежные вопросы