簡體   English   中英

如何在 Django Rest Framework 中通過電子郵件發送動態數據

[英]How to send dynamic data in email in Django Rest Framework

我正在嘗試編寫一個在文件上傳后發送通知電子郵件的函數。 如果我對“發送到”電子郵件地址進行硬編碼,則我的以下代碼有效。

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,
                  ['sendto@email.com', ],
                  fail_silently=False)

我需要根據序列化程序中的 editor_email 動態設置“sendto@email.com”。 下面是序列化器。

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)
     
   
     from_email = self.request.user.email send_mail('New Files have been Uploaded', 'New files have been uploaded.', from_email, ['sendto@email.com', ], 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

我認為您可以在您的函數中獲取字段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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM