【问题标题】:webapp2 - how to post form data - app enginewebapp2 - 如何发布表单数据 - 应用引擎
【发布时间】:2017-07-07 00:49:08
【问题描述】:

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

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

我的表单在“/schedule/create-consult”页面上。我最初正在测试将前两个字段提交到同一页面(即,将名字和姓氏发布到 /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 Method Not Allowed - 该资源不允许使用 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

【问题讨论】:

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


【解决方案1】:

您正在使用 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')

【讨论】:

    【解决方案2】:

    它正在尝试向您的应用发送 POST,但您没有配置处理程序来接收它。

    您的 GET 处理程序在哪里:

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

    您还需要一个 POST 处理程序:

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

    【讨论】:

      猜你喜欢
      • 2012-12-09
      • 2012-09-21
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多