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

问题描述 投票:1回答:2

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

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,
                  ['[email protected]', ],
                  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的新手,在这里一定缺少我想要的东西。我已经花了数小时阅读文档并尝试了不同的方法,但是似乎没有任何效果。

请,有人可以告诉我如何基于序列化程序设置此电子邮件吗?

python django django-rest-framework django-views django-serializer
2个回答
1
投票

views.py中删除邮件发送代码段,然后将其作为[移到serilizers中]

# views.py
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,
              ['[email protected]', ],
              fail_silently=False)


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


    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

1
投票

我认为您可以在函数中获取字段editor_email数据。如果仅字符串数据,则可以这样:

def perform_create(self, serializer):
        serializer.save(owner=self.request.user)
        to_email = serializer.data['editor_email']

        if to_email:
            from_email = self.request.user.email
            send_mail('New Files have been Uploaded',
                      'New files have been uploaded.',
                      from_email,
                      [to_email, ],
                      fail_silently=False)
© www.soinside.com 2019 - 2024. All rights reserved.