webapp2 - как опубликовать данные формы - движок приложения

Возникли проблемы с отправкой данных из формы и обработкой их с помощью webapp2.

Я не уверен, как обрабатывать данные из формы в webapp2 в целом, в том числе на какой странице публиковать данные с помощью действия формы.

Моя форма находится на странице "/ расписание / создание-консультации". и я вначале тестирую отправку первых двух полей на одну и ту же страницу (т. е. имя и фамилия публикуются в / schedule / create-consults).

Моя форма выглядит так

<form method="post" action="/schedule/create-consult">
    <div class="row">
        <div class="col-md-6">
            <label>First Name</label>
            <input class="form-control input-lg" type="text" name="first_name" />
            <br/>
        </div>
        <div class="col-md-6">
            <label>Last Name</label>
            <input class="form-control input-lg" type="text" name="last_name" />
        </div>
        <input type="submit" value="save">
    </div>
</form>

Когда я нажимаю кнопку Сохранить, я получаю сообщение:

405 Метод не разрешен - метод POST не разрешен для этого ресурса.

Мои маршруты выглядят так

app = webapp2.WSGIApplication([
    ('/', MainPage),
    ('/schedule', SchedulePage),
    ('/consults', ConsultsPage),
    ('/schedule/create-consult', CreateConsultPage),
    ('/consults/john-smith-030617-0930', JohnSmithPage)
], debug=True)

Мой обработчик для CreateConsultsPage выглядит так

class CreateConsultPage(webapp2.RequestHandler):
    def get(self):
    template = JINJA_ENVIRONMENT.get_template('/templates/create-consult.html')  
    self.response.out.write(template.render())

И мой app.yaml выглядит следующим образом:

 runtime: python27
 api_version: 1
 threadsafe: true

 handlers:
 - url: /css
   static_dir: css
 - url: /images
   static_dir: images
 - url: /js
   static_dir: js
 - url: /
   script: main.app
 - url: /schedule
   script: main.app
 - url: /consults
   script: main.app
 - url: /schedule/create-consult
   script: main.app
 - url: /consults/john-smith-030617-0930
   script: main.app

 libraries:
 - name: webapp2
   version: latest
 - name: jinja2
   version: latest

2 ответа

Решение

Вы отправляете форму, используя почтовый метод. Вы должны определить функцию post в своем классе обработчика, чтобы получить отправленные данные формы. Это решит вашу проблему.

class CreateConsultPage(webapp2.RequestHandler):
    def get(self):
        template = JINJA_ENVIRONMENT.get_template('/templates/create-consult.html')  
        self.response.out.write(template.render())

    def post(self):
        first_name = self.request.get('first_name')
        last_name = self.request.get('last_name')

Он пытается сделать POST для вашего приложения, но у вас не настроен обработчик для его получения.

Где у вас есть обработчик GET:

class CreateConsultPage(webapp2.RequestHandler):
     def get(self):
         dostuf

вам также нужно иметь POST Hander:

class CreateConsultPage(webapp2.RequestHandler):
    def post(self):
        dostuff
Другие вопросы по тегам