ハンドラーが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)