首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于密码重置的Django-rest-auth HTML电子邮件

用于密码重置的Django-rest-auth HTML电子邮件
EN

Stack Overflow用户
提问于 2018-03-14 21:22:35
回答 2查看 2.2K关注 0票数 3

可以在django-rest-auth中以HTML格式发送密码重置电子邮件吗?默认情况下,超文本标记语言的电子邮件是禁用的,并以简单的文本从password_reset_email.html模板发送。我已经将模板复制到项目结构模板,并且可以很容易地更改电子邮件的内容。

但是,作为documented Django可以选择发送功能齐全的超文本标记语言电子邮件的密码重置。我不知道如何从Django-rest-auth视图发送它们。

看起来django-rest-auth使用了自定义的串行化程序来定义password_reset或PasswordResetView类,它们都有属性: email_template_name,html_email_template_name。

如果我能从我的urls.py中传递这个属性,那就太好了,如下所示

代码语言:javascript
复制
from rest_auth.views import PasswordResetView, 
url(r'^api/auth/reset/$', PasswordResetView.as_view(), name='rest_password_reset'),

否则,我可能应该重写序列化程序(甚至是视图),甚至是视图。

EN

回答 2

Stack Overflow用户

发布于 2018-08-31 17:01:56

  1. 使用自定义的save方法创建自己的PasswordResetSerializer

从此处复制的基本PasswordResetSerializer:(https://github.com/Tivix/django-rest-auth/blob/v0.6.0/rest_auth/serializers.py#L102)

代码语言:javascript
复制
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)

  1. 连接自定义PasswordResetSerializer以覆盖默认

代码语言:javascript
复制
yourproject_app/settings.py

REST_AUTH_SERIALIZERS = {
    'PASSWORD_RESET_SERIALIZER': 
        'yourproject_app.serializers.PasswordResetSerializer',
}

将自定义电子邮件文本文件所在目录的路径添加到TEMPLATES中的

代码语言:javascript
复制
yourproject/settings.py

TEMPLATES = [
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'yourproject/templates')],
        ...
    }
]

  1. 写入自定义电子邮件(默认从Django复制)

代码语言:javascript
复制
yourproject/templates/example_message.html

<html>
  <body>
    ...
  </body>
</html>
票数 2
EN

Stack Overflow用户

发布于 2019-06-18 02:00:39

最简单的解决方案是:

  1. First:

在项目文件夹中创建此目录,

myProjectName/templates/注册

  1. Second:

转到这个目录(在本例中我使用的是Python 3.6),

"C:\Python36\Lib\site-packages\django\contrib\admin\templates\registration“

将password_reset_email.html文件复制到您在第一步中创建的目录中。

  1. Third:

转到项目中的"setting.py“文件,并通过添加模板目录告诉django在哪里可以找到"password_reset_email.html”文件:

代码语言:javascript
复制
TEMPLATES = [
{
    ...
    'DIRS': [os.path.join(BASE_DIR, 'myProjectName/templates')],
    ...
}

]

现在,您可以在项目目录中打开"password_reset_email.html“并根据需要对其进行修改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49278917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档