Избранное | Русский | Войти

Работа с формами в webapp

Чтобы пользователи могли отправлять собственные приветствия, необходим способ обрабатывать информацию, переданную пользователем через веб-форму. Инфраструктура webapp упрощает обработку данных форм.

Работа с веб-формами в webapp

Замените содержание helloworld/helloworld.py следующим:

import cgi

from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.out.write("""
      <html>
        <body>
          <form action="/sign" method="post">
            <div><textarea name="content" rows="3" cols="60"></textarea></div>
            <div><input type="submit" value="Sign Guestbook"></div>
          </form>
        </body>
      </html>""")


class Guestbook(webapp.RequestHandler):
  def post(self):
    self.response.out.write('<html><body>You wrote:<pre>')
    self.response.out.write(cgi.escape(self.request.get('content')))
    self.response.out.write('</pre></body></html>')

application = webapp.WSGIApplication(
                                     [('/', MainPage),
                                      ('/sign', Guestbook)],
                                     debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()

Перезагрузите страницу для появления формы и попытайтесь отправить сообщение.

В этой версии есть два обработчика: MainPage, сопоставленный с URL /, отображает веб-форму. Guestbook, сопоставленный с URL /sign, отображает данные, переданные с помощью веб-формы.

Обработчик Guestbook содержит метод post() вместо метода get(). Это связано с тем, что форма, отображаемая обработчиком MainPage, использует для отправки данных формы HTTP-метод POST (method="post"). Если по какой-то причине вам нужен один обработчик для выполнения действий GET и POST на одном URL, можно определить метод для каждого действия в одном классе.

Код метода post() получает данные формы из self.request. Перед их отображением пользователю он использует метод cgi.escape() для преобразования специальных HTML-символов в эквивалентные коды символов. cgi – это модуль стандартной библиотеки Python; подробнее см. документацию по cgi.

Примечание. Среда App Engine включает всю стандартную библиотеку Python 2.5. Однако допустимы не все действия. Приложения App Engine работают в ограниченной среде, позволяющей App Engine масштабировать их безопасным способом. Например, вызовы нижнего уровня к операционной системе, сетевые операции и некоторые операции файловой системы запрещены и при попытке выполнения приведут к ошибке. Подробнее см. раздел Среда выполнения Python.

Далее...

Теперь, когда мы можем принимать у пользователя информацию, ее нужно где-то размещать и как-то получать оттуда.

Переходите к разделу Использование хранилища данных.