【发布时间】:2022-07-04 21:33:54
【问题描述】:
我构建 React&Django 项目并使用 Djoser 进行注册和身份验证。我想在 Gmail 上自定义发送的电子邮件内容。我应该在哪里更改它?
【问题讨论】:
我构建 React&Django 项目并使用 Djoser 进行注册和身份验证。我想在 Gmail 上自定义发送的电子邮件内容。我应该在哪里更改它?
【问题讨论】:
在您的 django 目录中创建一个应用程序或在现有应用程序
然后在
在
然后在 ActivationEmail.html 中添加以下代码:
{% load i18n %}
{% block subject %}
{% blocktrans %}Account activation on {{ site_name }}{% endblocktrans %}
{% endblock subject %}
{% block text_body %}
{% blocktrans %}You're receiving this email because you need to finish activation process on {{ site_name }}.{% endblocktrans %}
{% trans "Please go to the following page to activate account:" %}
{{ protocol }}://{{ domain }}/{{ url|safe }}
{% trans "Thanks for using our site!" %}
{% blocktrans %}The {{ site_name }} team{% endblocktrans %}
{% endblock text_body %}
{% block html_body %}
<p>{% blocktrans %}You're receiving this email because you need to finish activation process on {{ site_name }}.{% endblocktrans %}</p>
<p>{% trans "Please go to the following page to activate account:" %}</p>
<p><a href="{{ protocol }}://{{ domain }}/{{ url|safe }}">{{ protocol }}://{{ domain }}/{{ url|safe }}</a></p>
<p>{% trans "Thanks for using our site!" %}</p>
<p>{% blocktrans %}The {{ site_name }} team{% endblocktrans %}</p>
{% endblock html_body %}
并在您的 ConfirmationEmail.html 中添加以下代码:
{% load i18n %}
{% block subject %}
{% blocktrans %}{{ site_name }} - Your account has been successfully created and activated!{% endblocktrans %}
{% endblock %}
{% block text_body %}
{% trans "Your account has been created and is ready to use!" %}
{% trans "Thanks for using our site!" %}
{% blocktrans %}The {{ site_name }} team{% endblocktrans %}
{% endblock text_body %}
{% block html_body %}
<p>{% trans "Your account has been created and is ready to use!" %}</p>
<p>{% trans "Thanks for using our site!" %}</p>
<p>{% blocktrans %}The {{ site_name }} team{% endblocktrans %}</p>
{% endblock html_body %}
然后 email.py 在您的应用
from djoser import email
from djoser import utils
from djoser.conf import settings
from django.contrib.auth.tokens import default_token_generator
class ActivationEmail(email.ActivationEmail):
template_name = '<my_app>/ActivationEmail.html'
def get_context_data(self):
# ActivationEmail can be deleted
context = super().get_context_data()
user = context.get("user")
context["uid"] = utils.encode_uid(user.pk)
context["token"] = default_token_generator.make_token(user)
context["url"] = settings.ACTIVATION_URL.format(**context)
return context
class ConfirmationEmail(email.ConfirmationEmail):
template_name = '<my_app>/ConfirmationEmail.html'
然后编辑
但是你喜欢。
那么最后一步就是在email.py中添加类来替换默认模板 在激活/确认电子邮件中。 默认值与文档中的一样:djoser docs 然后在 settings.py 文件中的 Djoser 设置中:
DJOSER = {
'USER_CREATE_PASSWORD_RETYPE': True,
'SEND_CONFIRMATION_EMAIL': True,
'SEND_ACTIVATION_EMAIL': True,
'ACTIVATION_URL': 'activate/{uid}/{token}',
'HIDE_USERS': True,
'SERIALIZERS': {
'user': 'myapp.serializers.UserCreateSerializer',
'user_create': 'myapp.serializers.UserCreateSerializer',
'current_user': 'myapp.serializers.UserSerializer',
},
(...)
}
添加这个:
DJOSER = {
'USER_CREATE_PASSWORD_RETYPE': True,
'SEND_CONFIRMATION_EMAIL': True,
'SEND_ACTIVATION_EMAIL': True,
'ACTIVATION_URL': 'activate/{uid}/{token}',
'HIDE_USERS': True,
'SERIALIZERS': {
'user': 'myapp.serializers.UserCreateSerializer',
'user_create': 'myapp.serializers.UserCreateSerializer',
'current_user': 'myapp.serializers.UserSerializer',
},
'EMAIL': {
'activation': 'myapp.email.ActivationEmail',
'confirmation': 'myapp.email.ConfirmationEmail',
},
(...)
}
然后发送电子邮件激活而不是在他/她的电子邮件中为用户发送默认模板,它将为他们发送 ActivationEmail.html 模板
请注意,Djoser 使用django-template-mail 作为其激活电子邮件模板。
【讨论】: