1

HTML フォームから投稿されたデータを処理する Python Web サービスを Google App Engine で開発しようとしています。誰かが私が間違っていることを教えてもらえますか? デスクトップ \helloworld の同じディレクトリに存在するすべてのファイル。

OS: Win 7 x64 Python 2.7 Google App Engine (ローカル)

helloworld.py

import webapp2
import logging
import cgi

class MainPage(webapp2.RequestHandler):

  def post(self):
    self.response.headers['Content-Type'] = 'text/plain'
    form = cgi.FieldStorage()
    if "name" not in form:
      self.response.write('Name not in form')
    else:
      self.response.write(form["name"].value)

app = webapp2.WSGIApplication([('/', MainPage)],debug=False)

page.html

<html>
<body>
  <form action="http://localhost:8080" method="post">
    Name: <input type="text" name="name"/>
    <input type="submit" value="Submit"/>
  </form>
</body>
</html>

ブラウザー (Chrome) を使用して page.html を表示し、フィールドにテキストを入力して送信を押します。テキストがブラウザーに表示されることを期待していますが、「名前がフォームにありません」と表示されます。HTMLのフォームメソッドをgetに、python関数をdef get(self)にすれば動くのですが、postメソッドを使いたいです。説明の助けをいただければ幸いです。

4

4 に答える 4

6

を使用するべきではありませんcgi.FieldStorage。Webapp2は、すべてのWebフレームワークと同様に、POSTデータを処理する組み込みの方法を備えています。この場合は、を介して行われrequest.POSTます。したがって、コードは次のようになります。

if "name" not in self.request.POST:
    self.response.write('Name not in form')
else:
    self.response.write(self.request.POST["name"]) 

webapp2のドキュメントを参照してください。

于 2012-10-31T21:55:34.083 に答える
2

次のようなURLを配置しない方がよい

"http:// localhost:8080"

あなたがのようなものを使用する場合

action = "/"

ローカルWebサーバー(localhost:8080)およびパブリックWebサーバー(... .appspot.com)でも機能します。

于 2012-11-02T11:55:44.533 に答える
0

試してみませんか:

name = self.request.get('name')

ソース

于 2012-10-31T21:56:22.193 に答える
0

フォームを使用して結果をデータストアに送信する完全な例は、スタート ガイドにあります: https://developers.google.com/appengine/docs/python/gettingstartedpython27/usingdatastore

HTML 出力を処理するより良い方法は、jinja 2 を使用することです。入門ガイドも参照してください。 https://developers.google.com/appengine/docs/python/gettingstartedpython27/templates この後、WTForms を見てください。

于 2012-10-31T22:33:48.407 に答える