0

ハンドラーが2つあります。1つはMainHandlerと呼ばれ、ユーザーをサインアップする(アカウントを作成する)ための小さなフォームをレンダリングします。電子メールとpwdを送信すると、MainHandlerはアカウントがまだ存在しないことを確認し、フィールドを検証してから、新しいユーザーエンティティを作成します。次に、HomeHandler(/ home)にリダイレクトし、ユーザーの電子メールをURLクエリパラメーターとして送信します。つまり、「http:// localhost:8000 / home?email =jack@smith.com」

私の質問は、それを行うための最良の方法ですか?HomeHandlerには、ユーザーがユーザーの子となるアドレスを入力できる別のフォームがあります。電子メールを使用して、ユーザーを見つけるためにクエリを実行します。ユーザーの電子メールを送信しない場合、HomeHandlerはどのユーザーがアドレスを入力しているかをどのように知るのですか?保存してユーザーに関連付ける他のデータを受信する他のハンドラーがある場合、毎回ユーザーの電子メールを送信し続ける必要がありますか?それを行うためのより良い方法があるはずのようですが、私はそれを理解することができません。

class User(db.Model):
    email = db.EmailProperty()
    password = db.StringProperty()

class Address(db.Model):
    line1 = db.StringProperty()
    line2 = db.StringProperty()

class MainHandler(webapp2.RequestHandler):
    def get(self):
        renders a template with a form requesting email and pwd
    def post(self):
        Validates form and checks account doesn't already exist
        if (user doesn't already exist and both email and pwd valid):
            newuser = User(email=email, password=password);
            newuser.put();
            self.redirect("/home?email=%s"%email)

class HomeHandler(webapp2.RequestHandler):
    def get(self):
        Renders another form requesting a physical address (2 lines)
    def post(self):
        email=self.request.get("email")
            addressLine1 = self.request.get("address1")
            addressLine2 = self.request.get("address2")
            q = db.Query(User).filter('email =', email)#Construct query
            userMatchResults = q.fetch(limit=1)#Run query
            homeAddress = Address(parent=userMatchResults[0])
            homeAddress.line1 = addressLine1
            homeAddress.line2 = addressLine2
            homeAddress.put()

app = webapp2.WSGIApplication([('/', MainHandler), ('/home', HomeHandler)], debug=True)
4

1 に答える 1

1

リダイレクトする必要はありません。Mainhandlerの投稿で2番目のフォームを送信できます。また、両方のハンドラーを組み合わせることができます。メインハンドラーのPOSTが、POSTリクエストの発信元が最初のフォームか2番目のフォームかを検出できる場合。これを行う簡単な方法は、フォームの名前を使用して、両方のフォームに非表示の入力フィールドを追加することです。このフィールドは投稿データの一部になります。

ただし、リクエスト間の状態を保持する方法は他にもたくさんあります。

于 2012-12-19T01:17:34.387 に答える