Python Pylons ブラウザから送信されたデータの取得
ブラウザから送信されるデータの取得方法です。
http://wiki.pylonshq.com/pages/viewpage.action?pageId=11174255
hello.pyコントローラーに
・入力フォームの表示を行うformメソッド
・ブラウザから送信されたデータを取得するemailメソッド
を追加します。
hello.py
def form(self):
return render('/form.mako')
def email(self):
#※requestというオブジェクトの中に、GET、POSTで送信された
#データが保存されています。
return 'Your email is: %s' % request.params['email']
/template/form.makoを作成します。
<form name="test" method="POST" action="/hello/email">
Email Address: <input type="text" name="email" />
<input type="submit" name="submit" value="Submit" />
</form>
#paster serve --reload development.ini
を実行してサーバを起動し、
http://127.0.0.1:5000/hello/form/
にアクセスすると、こんな入力画面が表示されます。

適当にメールアドレスを入力して、Submitを押すと、

ここまでで、十分アプリケーションは作れると思いますが、
サンプルでは、ブラウザの更新ボタンを押したとき・・・

POSTで送信を選択していると、こんな警告が表示されます。
これを回避する方法として
def form(self):
return render('/form.mako')
def email(self):
redirect_to(action='result')
def result(self):
#return 'Your email is: %s' % request.params['email']
return 'Your data was successfully submitted'
このように、emailメソッドでリダイレクトすればいいとのこと。
※ちなみにresultメソッドで
return 'Your email is: %s' % request.params['email']
と、requestオブジェクトに触ろうとすると
exceptions.KeyError: "'email'"
まあ、リダイレクトされているので、データは失われてますよね。
同様の動作をさせたいときには、
def email(self):
session['email'] = request.params['email']
session.save()
redirect_to(action='result')
def result(self):
return 'Your email is: %s' % session['email']
このようにセッションに保持してやる必要がありますね。
※以下の記載では、もちろん動きません・・・
def email(self):
self.email = request.params['email']
redirect_to(action='result')
def result(self):
#上のメソッドを通ったオブジェクトとは別インスタンスなので、
#中身が入ってない
return 'Your email is: %s' % self.email
もどる