webapp2 - 如何发布表单数据 - 应用程序引擎

时间:2017-02-17 13:10:38

标签: python-2.7 google-app-engine webapp2

在从表单发布数据并使用webapp2处理它时遇到一些麻烦。

我不确定如何处理webapp2中表单中的数据,包括使用表单操作将数据发布到哪个页面。

我的表单在页面上' / schedule / create-consult'。我最初测试将前两个字段提交到同一页面(即名字和姓氏发布到/ schedule / create-consultults)。

我的表单看起来像这样

<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 个答案:

答案 0 :(得分:2)

您使用post方法提交表单。您必须在处理程序类中定义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')

答案 1 :(得分:1)

它正在尝试对您的应用进行POST,但您没有配置处理器来接收它。

你有GET处理程序的地方:

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

你也需要有一个POST人员:

class CreateConsultPage(webapp2.RequestHandler):
    def post(self):
        dostuff