#django #django-forms #django-admin
Вопрос:
Я новичок в Django и изучаю его документацию. В моем приложении Django я пытаюсь заставить администратора создать пользователей, и как только они будут созданы, я хотел бы, чтобы им было отправлено электронное письмо, содержащее ссылку, которая позволяет пользователю установить свой собственный пароль для входа в систему.
Ниже приведен мой admin.py
файл:
class UserAuthenticationAdmin(admin.ModelAdmin):
list_display = ('first_name','last_name','email','department',)
list_filter = ('date_joined',)
ordering = ('first_name',)
search_fields = ('email',)
add_form_template = 'admin/change_form.html'
form = UserAuthenticationForm
fieldsets = (
(None, {
'fields': (('first_name','last_name','password'),'email','department','is_active','is_staff','groups',)
}),
)
Ниже приведен html-шаблон электронной почты:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Successful Account Creation</title>
</head>
<body>
<p>Dear {{ first_name }} {{ last_name }},</p>
<p>Your account has successfully been created.</p>
<p>Please follow this link,
<a href="{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}"> your account </a>, to set up your password.
</p><br>
<p>Thanks</p>
</body>
</html>
Ниже приведен UserAuthenticationForm
класс в forms.py
файле, который создает пароль по умолчанию для пользователя:
class UserAuthenticationForm(forms.ModelForm):
password = forms.CharField(
widget=forms.PasswordInput(
attrs={
"placeholder" : "Password",
"class": "form-control",
"value":"pass@123",
}
))
class Meta:
model = UserAuthentication
fields = '__all__'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].widget.attrs.update({
'class': 'form-control'
})
def save(self, commit=True):
user = super().save(commit=False)
user.set_password(self.cleaned_data["password"])
subject = "Account Creation"
email_template_name = "emails/successfull_creation.html"
from_email = app.EMAIL_HOST_USER
c = {
'first_name': user.first_name,
'last_name': user.last_name,
"email":user.email,
'domain':'127.0.0.1:8000',
'site_name': 'Website',
"uid": urlsafe_base64_encode(force_bytes(user.email)),
"user": user,
'token': default_token_generator.make_token(user),
'protocol': 'http',
}
email_html = render_to_string(email_template_name, c)
email = EmailMultiAlternatives(subject=subject, to=[user.email])
email.attach_alternative(email_html, 'text/html')
email_sent = email.send(fail_silently=False)
if commit:
user.save()
return user
Приведенный выше код отправляет электронное письмо созданному пользователю, но ссылка на сброс пароля в приведенном выше html-шаблоне недействительна.
Я попытался заменить save()
функцию в UserAuthenticationForm
классе приведенным ниже кодом, но электронное письмо не отправляется созданному пользователю.
def save(self, commit=True):
user = super().save(commit=False)
user.set_password(self.cleaned_data["password"])
if commit:
new_user = user.save()
reset_form = PasswordResetForm({'email': new_user.email})
assert reset_form.is_valid()
reset_form.save(
email_template_name='emails/successfull_creation.html',
)
return user
Я хотел бы получить любую помощь в том, чтобы в бэкэнде было отправлено электронное письмо со ссылкой для пользователя, чтобы установить свой пароль. Заранее спасибо.
Комментарии:
1. это может помочь вам на данный момент: simpleisbetterthancomplex.com/tutorial/2017/02/18/… но вы должны изменить код для своего варианта использования.
2. Привет! вы нашли какую-нибудь статью или руководство по этому поводу?