- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
# Generate a unique username from the first part of the email address
base_name = email.split('@')[0][:25]
if User.objects.filter(username=base_name).count() == 0:
username = base_name
else:
for ii in range(1, 99999+1):
if User.objects.filter( username = base_name + str(ii) ).count() == 0:
username = email.split('@')[0][:25] + str(ii)
break
2. в чем говнокод? Вижу только неиспользование `base_name` в строке 8
Может добавили после того, как один раз сбойнуло?
2. md5 от const - const, то есть в выражении нет смысла уже так как или count() будет равен нулю или будет бесконечный цикл.
В качестве альтернативы лучше использовать uuid
2) в данном случае это кусок backendа для мобильного приложения, там регистрации случались бы очень часто
Почему 4-5? А потому что емейлов с одинаковым префиксом не так много как кажется. Ну будет [email protected], [email protected] ну еще штуки 2-3..., а тут и популярные домены кончились. Поэтому цикл отработает быстро, в 99% случаев за 1 итерацию.
Разве что злодей захочет заддосить сайт путем регистрации пачки почти одинаковых емейлов...
> там регистрации случались бы очень часто
Чаще чем пачки других запросов, порожденные работой юзера с приложением? Ну-ну. Ну и нахрен тогда нужно приложение, на котором регистрируются чаще чем им пользуются?
P.S. Оптимизните лучше более "горячий" код. Пользы будет на порядки больше.
Буду рад выслушать ваше решение данной задачи.
User.objects делает запрос к базе каждый раз без кеширования?
ps стоит заметить, что возможности к кешированию фреймворком заложены. но django не делает этого за программиста.
там как бы разные запросы.