Gmail에서 연락처를 가져오고 있습니다.django 응용 프로그램에서 새 사용자 생성을위한 이메일 목록에서 고유 한 사용자 이름 생성
I 가져 오기 할 수있는 연락처 중 일부를 이미 수 있습니다 :
[{'name': u'fn1 ln1', 'emails': [u'[email protected]']}, {'name': u'fn2 ln2', 'emails': [u'[email protected]']},.
는가져 연락처 두 가지 문제가 있습니다 -
c_lst
다음과 같이 사전에 이름과 이메일 주소가 목록입니다 이 경우 데이터베이스에있는, 내가 할 아니 다른 연락처를 추가하고 싶습니다.고유 사용자 이름. 도메인 이름을 제외하고 두 개의 전자 메일이 동일 할 가능성이 있습니다. 예. [email protected]을 입력 한 다음 [email protected]을 입력하면 별개의 사용자 이름이 필요하므로 첫 번째 사용자 이름은 이메일과 같을 것이고 두 번째 사용자 이름은 email1이 될 것입니다.
나는 두 가지 모두를 구현했으며 명확하게 설명했다. 더 많은 파이썬 적 방법이있을 수 있습니까?
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
다른/더 나은 흐름/접근 방식을 알려주십시오.
사용자 이름을 생성하려면 임의 번호 생성에 대한 조언을 받아야하지만 은 한 번만 활동하기 때문에 나에게 적합합니다.
더 나은 방법은 전자 메일 주소를 사용자 이름으로 사용하는 것입니다. [이전 질문] (http://stackoverflow.com/questions/16638414/set-email-as-username-in-django-1-5) 도움이 될 수 있습니다. [이 하나] (http://stackoverflow.com/questions/15597188/using-email-as-username-field-in-django-1-5-custom-user-model-results-in-fielder) 유용 할 수 있습니다. 너무. –
그것의 의식적인 디자인 결정, 그것을하지 않기. – user1629366
@ user1629366 사용자 이름에'str (idx)'를 추가하는 대신'email_1' 또는'email-1'과 같은 것을 사용할 수 있습니다. 'while' 루프를 사용하는 대신'_' 다음에 숫자를 얻을 수 있습니다 또는'-'을 사용하여 그것을 증가시키고 그것을 사용자 이름에 추가하십시오. 이것은 1000 명의 사용자가 동일한 사용자 이름 부분을 가지고 있다면 'while'루프가 1000 번 반복 할 것이기 때문에 도움이 될 것입니다. 왜냐하면 다른 유형의 사용자 이름을 사용하면 건너 뛸 수 있습니다. –