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



もどる