我正在从 gmail 导入联系人。c_lst
是在字典中包含姓名和电子邮件地址的列表,如下所示 -[{'name': u'fn1 ln1', 'emails': [u'email1@gmail.com']}, {'name': u'fn2 ln2', 'emails': [u'email2@gmail.com']},.
导入联系人有两个问题:
我可能正在导入的一些联系人可能已经存在于数据库中,在这种情况下,我不想添加另一个联系人。
唯一的用户名。有可能两封电子邮件相同,但域名除外。例如。email@gmail.com 然后 email@outlook.com 在这种情况下,我需要有不同的用户名,所以第一个用户名就像电子邮件,第二个用户名是 email1。
我已经实现了它们,并评论说清楚了。可以有更多的pythonic方式吗?
for contact in c_lst:
email = contact.get('emails')[0]
name = contact.get('name').split(' ')
first_name, last_name = name[0], name[-1]
try:
# check if there is already a user, with that email address
# if yes then ignore.
u = Users.objects.get(email = email)
print "user exists"
except:
while True:
username = email.split('@')[0]
name, idx = username, 1
try:
# user with current username exists, so add numeral
Users.objects.get(username = username)
name = username + str(idx)
except User.DoesNotExist:
username = name
u = User.objects.create(username = username, email = email, first_name = first_name, last_name = last_name)
u.save()
break
请让我知道任何其他/更好的流程/方法。
对于生成用户名,可能会建议生成随机数,但我可以按顺序进行,因为它只是一次活动。