РЕДАКТИРОВАТЬ:
кажется, что это не обычная практика, как мало ответов найдено на форумах ... но у меня будет больше 30 аккаунтов для создания, поэтому я хочу немного автоматизировать ...
Что вы думаете об этой стратегии:
Я создаю пользователя / профиль без «пароля», используя скрипт, запущенный на postgresql database
Когда я хочу активировать учетную запись и отправить электронное письмо, я запускаю другой сценарий, который обновит атрибут pro_con в моделях профиля -> Я получаю сигнал pre_save и обновляю атрибут пароля пользователя с помощью функции make_password ();
при этом в моем методе send_user_account у меня есть незашифрованный пароль для отправки по электронной почте
К сожалению, когда я пытаюсь соединиться с паролем, он не работает ...
def send_user_account(sender,instance,**kwargs):
if not instance._state.adding and instance.pro_con == 1:
user = User.objects.get(username=instance.user)
temporary_password = user.username
user.password = make_password(temporary_password)
user.save()
#send_mail(subject, message, email_from, recipient_list)
pre_save.connect(send_user_account, sender=Profile)
Я разрабатываю проект Django и использую Django Аутентификация
Я добавил модели профиля, связанные с моделями пользователей и сайтов
Я хочу использовать сигнал для автоматической отправки c электронной почты с именем пользователя и паролем (открытым текстом) пользователю при создании учетной записи
У меня много проблем:
, поскольку пользователь связан с моделью сайта FK, атрибут сайта в профиле не может быть равен NULL; Я решил его на данный момент, добавив значение по умолчанию, но оно неудовлетворительно
Экземпляр пользователя создается в два этапа: первое имя пользователя и пароль регистрируются, и если имя пользователя и пароль действительны, пользователь экземпляр создается, и во второй форме администратора мы можем установить другой атрибут и, в частности, адрес электронной почты -> в настоящее время сигнал post_save отправляется после регистрации имени пользователя и пароля; Я хотел бы, чтобы электронная почта отправлялась, когда экземпляр USer полностью зарегистрирован, потому что мне нужно, чтобы электронная почта была доступна ...
При создании пароль кодируется pbkdf2 / sha256, поэтому kwargs ['instance '] .password вернуть зашифрованный пароль; Как я могу отправить незашифрованный пароль пользователя?
models.py
class Profile(SafeDeleteModel):
_safedelete_policy = SOFT_DELETE_CASCADE
pro_ide = models.AutoField(primary_key = True)
user = models.OneToOneField(User, on_delete = models.CASCADE)
site = models.ForeignKey(Site,default=1, on_delete = models.CASCADE)
...
class Meta:
db_table = 'adm_pro'
verbose_name_plural = 'Profils'
ordering = ['pro_ide']
def create_profile(sender,**kwargs):
if kwargs['created']:
user_profile = Profile.objects.create(user=kwargs['instance'])
subject = 'User account'
login = kwargs['instance'].username
psw = kwargs['instance'].password
message = 'Your login and password : '+login+'/'+psw
email_from = 'Your account has been created'
recipient_list = ['email@gmail.com'] *****to be recovered from User instance**
email = send_mail(subject, message, email_from, recipient_list)
post_save.connect(create_profile, sender=User)