Skip to main content
 首页 » 编程设计

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

2025年01月19日29lovecherry

是否可以在 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>