My 2c.
, . choice . , . user_id , .
3 . ? .
2.
1 - ( )
class VoteHandler(webapp2.RequestHandler):
def get(self, choice):
user = users.get_current_user()
Vote(id=user.user_id, selection=choice).put()
. , , . . , , , . , . , .
2 - Get_or_inserts ( )
class VoteHandler(webapp2.RequestHandler):
def get(self, choice):
user = users.get_current_user()
vote = Vote.get_or_insert(user.user_id())
if vote.selection is not None:
return
vote.selection = choice
vote.put()
, user_id, , .
, , .
get_or_insert, :
def txn(key_name, **kwds):
entity = Story.get_by_key_name(key_name, parent=kwds.get('parent'))
if entity is None:
entity = Story(key_name=key_name, **kwds)
entity.put()
return entity
def get_or_insert(key_name, **kwargs):
return db.run_in_transaction(txn, key_name, **kwargs)
get_or_insert('some key', title="The Three Little Pigs")
get_or_insert , , "". .
!!! vote_selection .
:
user_id, , .
, 2 , , :
, , None, .
. ( ).
3 -
class VoteHandler(webapp2.RequestHandler):
def get(self, choice):
user = users.get_current_user()
self.vote(user.user_id, choice)
@ndb.transactional()
def vote(key, choice):
vote = ndb.Key(Vote, key).get()
if vote:
return
return Vote(id=key, selection=choise).put()
, . , .
, //.