python - 如何在 Django Rest Framework 中通过电子邮件发送动态数据

标签 python django django-rest-framework django-views django-serializer

我正在尝试编写一个在文件上传后发送通知电子邮件的函数。如果我对“发送至”电子邮件地址进行硬编码,我的以下代码将有效。

def perform_create(self, serializer):
        serializer.save(owner=self.request.user)
        from_email = self.request.user.email
        send_mail('New Files have been Uploaded',
                  'New files have been uploaded.',
                  from_email,
                  ['<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b6c5d3d8d2c2d9f6d3dbd7dfda98d5d9db" rel="noreferrer noopener nofollow">[email protected]</a>', ],
                  fail_silently=False)

我需要根据序列化程序中的 editor_email 动态设置“[email protected] ”。下面是序列化器。

class VideoSerializer(serializers.ModelSerializer):
    projectName = serializers.SerializerMethodField(allow_null=True)
    editor_email = serializers.EmailField(
        source='editor.email', required=False)

    class Meta:
        model = Video
        # fields = '__all__'
        fields = [
            'url',
            'handle',
            'filename',
            'size',
            'source',
            'uploadId',
            'originalPath',
            'owner',
            'project',
            'uploadDate',
            'editor',
            'projectName',
            'editor_email'
        ]

    def get_projectName(self, obj):
        return obj.project.projectName

当我在应用前端检查 JSON 响应时,“editor_email”的值正是我所期望的。

我对 Django Rest Framework 比较陌生,这里肯定缺少一些东西。我花了几个小时阅读文档并尝试不同的事情,但似乎没有任何效果。

请问有人可以告诉我如何根据序列化程序设置此电子邮件吗?

最佳答案

views.py 中删除邮件发送代码片段,并将其移动到 serilizers

# views.py
def perform_create(self, serializer):
    serializer.save(owner=self.request.user)
    <b><strike>from_email = self.request.user.email
    send_mail('New Files have been Uploaded',
              'New files have been uploaded.',
              from_email,
              ['<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="582b3d363c2c37183d35393134763b3735" rel="noreferrer noopener nofollow">[email protected]</a>', ],
              fail_silently=False)</strike></b>


# serializers.py
class VideoSerializer(serializers.ModelSerializer):
    # your code


    <b>def send_dynamic_mail(self, video_instance):
        from_email = video_instance.owner.email
        send_mail('New Files have been Uploaded',
                  'New files have been uploaded.',
                  from_email,
                  [video_instance.editor.email, ],
                  fail_silently=False)

    def create(self, validated_data):
        video_instance = super().create(validated_data)
        self.send_dynamic_mail(video_instance)
        return video_instance</b>

关于python - 如何在 Django Rest Framework 中通过电子邮件发送动态数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59314605/

相关文章:

python - py-me 抛出 Unpermitted modules 导入 itertools 异常

django - 为什么用户模型具有字符串类型?

python - 如何更改 Django Rest Framework 中多对多相关对象的表示

django - DRF - 序列化多个模型

python - 如何在管理更新方法中从 Django 查询集中提取 id?

django - 通过Django create方法传递save参数

python - 从 XML 文档中获取所有文本?

python - CherryPy + Jinja,在哪里初始化环境

python - Jenkinsfile 语法 - 是否有共享 python 构建步骤的 DRY 示例?

python - Django uniqe 按日期查询集过滤