是否可以在 django-rest-auth 中以 HTML 格式发送密码重置电子邮件? 默认情况下,禁用 HTML 电子邮件,并从 password_reset_email.html 模板发送简单文本。我已经将模板复制到项目结构模板中,并且可以轻松更改电子邮件的内容。
但是,作为documented Django 可以选择发送全功能的 HTML 电子邮件来重置密码。我不知道如何从 Django-rest-auth View 发送它们。
似乎 django-rest-auth 为 def password_reset 或类 PasswordResetView 使用自定义序列化程序,它们都有属性:email_template_name、html_email_template_name。
如果我能从我的 urls.py 中传递这个属性就太好了,就在这里
from rest_auth.views import PasswordResetView,
url(r'^api/auth/reset/$', PasswordResetView.as_view(), name='rest_password_reset'),
否则,我可能应该重写序列化程序(或什至 View )或为此查看。
最佳答案
1.使用自定义的 save
方法创建您自己的 PasswordResetSerializer
。
从此处复制的基本 PasswordResetSerializer
:( https://github.com/Tivix/django-rest-auth/blob/v0.6.0/rest_auth/serializers.py#L102 )
yourproject_app/serializers.py
from django.contrib.auth.forms import PasswordResetForm
from django.conf import settings
from django.utils.translation import gettext as _
from rest_framework import serializers
###### IMPORT YOUR USER MODEL ######
from .models import ExampleUserModel
class PasswordResetSerializer(serializers.Serializer):
email = serializers.EmailField()
password_reset_form_class = PasswordResetForm
def validate_email(self, value):
self.reset_form = self.password_reset_form_class(data=self.initial_data)
if not self.reset_form.is_valid():
raise serializers.ValidationError(_('Error'))
###### FILTER YOUR USER MODEL ######
if not ExampleUserModel.objects.filter(email=value).exists():
raise serializers.ValidationError(_('Invalid e-mail address'))
return value
def save(self):
request = self.context.get('request')
opts = {
'use_https': request.is_secure(),
'from_email': getattr(settings, 'DEFAULT_FROM_EMAIL'),
###### USE YOUR HTML FILE ######
'html_email_template_name': 'example_message.html',
'request': request,
}
self.reset_form.save(**opts)
2。连接自定义 PasswordResetSerializer
以覆盖默认值
yourproject_app/settings.py
REST_AUTH_SERIALIZERS = {
'PASSWORD_RESET_SERIALIZER':
'yourproject_app.serializers.PasswordResetSerializer',
}
3。将自定义电子邮件文本文件所在目录的路径添加到 TEMPLATES
yourproject/settings.py
TEMPLATES = [
{
...
'DIRS': [os.path.join(BASE_DIR, 'yourproject/templates')],
...
}
]
4.编写自定义电子邮件消息(默认从 Django 复制)
yourproject/templates/example_message.html
<html>
<body>
...
</body>
</html>
关于python - 用于密码重置的 Django-rest-auth HTML 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49278917/