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