Я создаю простое приложение для рассылки новостей, которое собирает адреса электронной почты. У меня есть форма, которая отправляет значение электронной почты через ajax в мое приложение python, но я не могу, по моему мнению, выяснить, как узнать, существует ли почта. Следующий код в настоящее время функционирует, я просто не знаю, где/как добавить материал «проверить для существующей сущности».Предотвратить дублирование недвижимости в ndb datastore
import webapp2
import json
from google.appengine.ext import ndb
class Email(ndb.Model):
email = ndb.StringProperty()
subscribed = ndb.BooleanProperty()
@staticmethod
def create(email):
ekey = ndb.Key("Email", email)
entity = Email.get_or_insert(ekey)
if entity.email: ###
# This email already exists
return None
entity.email = email
entity.subscribed = True
entity.put()
return entity
class Subscribe(webapp2.RequestHandler):
def post(self):
add = Email.create(self.request.get('email'))
success = add is not None
self.response.headers['Content-Type'] = 'application/json'
obj = {
'success': success
}
self.response.out.write(json.dumps(obj))
app = webapp2.WSGIApplication([
webapp2.Route(r'/newsletter/new', Subscribe),
], debug=True)
Параметр № 2 не работает, потому что вы не можете делать запросы, не связанные с предком внутри транзакций. Кроме того, такие запросы в конечном итоге являются последовательными, поэтому дубликаты остаются возможными. –
Но это транзакция в кросс-группе, поэтому это не должно работать? –
«В транзакциях разрешены только предковые запросы». - не имеет значения, какая сделка –