2009-05-30 10 views
2

私は例を確認してGoogleは、どのようにPythonを使用して開始するかを示しています。特にここにコードが掲載されています。彼らは、コメントを保存しているユーザーがログインしている場合、我々はユーザーを保存Python AppEngine;ユーザー情報を取得し、パラメータを投稿しますか?

class Guestbook(webapp.RequestHandler): 
    def post(self): 
    greeting = Greeting() 

    if users.get_current_user(): 
     greeting.author = users.get_current_user() 

    greeting.content = self.request.get('content') 
    greeting.put() 
    self.redirect('/') 

;:http://code.google.com/appengine/docs/python/gettingstarted/usingdatastore.html

私は傾くしたい事はここに、ということです我々は、DBの外にそれを得るとき、私たちが実際にそのここをチェックし、その空でない場合:

if greeting.author: 
    self.response.out.write('<b>%s</b> wrote:' % greeting.author.nickname()) 
    else: 
    self.response.out.write('An anonymous person wrote:') 

をだから私は希望のものを、このように、情報を取得するために、Userオブジェクトを使用することです:

class Guestbook(webapp.RequestHandler): 
    def post(self): 
     user = users.get_current_user() 
     if user: 
      greeting = Greeting() 
     if users.get_current_user(): 
      greeting.author = users.get_current_user() 
      greeting.content = self.request.get('content') 
      greeting.put() 
      self.redirect('/') 
     else: 
      self.redirect(users.create_login_url(self.request.uri)) 

私はそのコードで何をしたいのですか?ログインしていない場合はログインURLにユーザを送ります。彼が投稿したものを元に戻って実際に投稿します。しかし、何が起こるかということは、それがその行動にも及ばないということです。cozは何のポストでもありません。 私はセッションに何かを入れてゲストブックのアクションを確認することができますが、誰かがより良い解決策を見出せるかどうか確認したいと思っていました!

おかげ

答えて

3

問題があり、self.redirectは(postメソッドから)ので、POST HTTPリクエストのペイロード「に沿って運ぶ」ことができない& cが誤動作することが起こっているのログイン、URLへのリダイレクト(実際にはログインURLにはgetが使用され、完了したら続行し、代わりにpostを実行するよう求められます)。あなたの周りのどこかで(セッションまたはそうでなければ)そのPOSTペイロードを隠しておくにしたくない場合は

、あなたはdef getに上記のスニペットでdef postを変更することによって、あなたのコードを動作させることができ、そしてもちろんHTMLでaction="post"はで書かれましたaction="get"にスナップしていないサンプルの他の部分。その他の軽微な回避策があります(ログインしたユーザーからの "通常"のメッセージに対してはpostを受け入れ、まだログインしていなければもっと簡単なものになるgetにリダイレクトすることができます)。しかし、この情報で十分ですあなたはここから続けますよね?

+0

このソリューションにはいくつかの大きな注意点があります.GETは長いデータでは貧弱な選択肢であり、それらは冪等であることを意図しています。偶数以外のもの(ゲストブックのエントリなど)を提出すると、XSRFの問題が発生します。 –

+0

@Nick、良い点 - 「どこかに隠れたペイロードがある」というアプローチも考慮する価値があります(例えば、データが長くなる可能性があるときや、「ログインユーザー」の条件にもかかわらず潜在的な偽造が問題になるときなど)。 GETが受け入れられる)。 –

関連する問題