我正在构建一个收集电子邮件地址的简单时事通讯应用程序。我有一个表单,通过ajax将电子邮件值发送到我的python应用程序,但我不能,在我的生活中,弄清楚如何查看电子邮件是否已存在。以下代码目前正在运行,我只是不知道在哪里/如何添加"检查预先存在的实体"东西。
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)
答案 0 :(得分:1)
根据Dan的评论更新了答案。丹,谢谢你纠正我。进一步更新,以回应更新的问题。
您可以将电子邮件地址设置为电子邮件实体的ID,然后使用get_or_insert
。这里的电子邮件存储是多余的,因为它是id和属性。你可以通过检查下面###的另一个属性来摆脱这种冗余。
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))
我还没有对上面的代码进行测试,因此可能会出现错误,但它应该引导您走上正确的道路。
答案 1 :(得分:1)
这是一种始终创建单独模型类的好方法。我创建了单独的模型类并更新了您的Subscribers类post方法,如果电子邮件存在,它将返回false,否则它将返回true。我希望它能解决你的问题。
class EmailModel(ndb.Model):
email = ndb.StringProperty()
subscribed = ndb.BooleanProperty()
class Subscribe(webapp2.RequestHandler):
def post(self):
email = self.request.get('email')
entity = EmailModel.query(EmailModel.email == email).get()
if entity:
# Duplicate
check = False
else:
add = Email()
add.email = self.request.get('email')
add.subscribed = True
add.put()
check = True
if check:
self.response.headers['Content-Type'] = 'application/json'
obj = {
'success': True
}
self.response.out.write(json.dumps(obj))
else:
self.response.headers['Content-Type'] = 'application/json'
obj = {
'success': False
}
self.response.out.write(json.dumps(obj))