如何处理Hyphen和Django rest modelseriiz

2024-09-30 01:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试实现一个端点来接收来自邮箱:mailgun.com应用程序编程接口。基本上,当一封电子邮件被发送到邮件列表时,他们会用POST请求调用您的端点https://host/messages/。你知道吗

问题是,它们不使用标准REST,而且有些键包含连字符。这是我收到的请求的一个例子:

{
  'Date': [
    'Fri, 26 Apr 2013 11:50:29 -0700'
  ],
  'From': [
    'Bob <bob@sandbox9cbe4c2829ed44e98c8ebd0c26129004.mailgun.org>'
  ],
  'Sender': [
    'bob@sandbox9cbe4c2829ed44e98c8ebd0c26129004.mailgun.org'
  ],
  'Subject': [
    'Re: Sample POST request'
  ],
  'To': [
    'Alice <alice@sandbox9cbe4c2829ed44e98c8ebd0c26129004.mailgun.org>'
  ],
  'body-plain': [
    'Hi Alice,\n\nThis is Bob.\n\nI also attached a file.\n\nThanks,\nBob\n\nOn 04/26/2013 11:29 AM, Alice wrote:\n> Hi Bob,\n>\n> This is Alice. How are you doing?\n>\n> Thanks,\n> Alice\n\n'
  ],

我写了一个序列,并设法获得所有字段没有连字符,如FromTo,等等,但经过几个小时的试验后,我无法获得body-plain。你知道吗

我试过这个:

class MessageSerializer(serializers.ModelSerializer):
    Text = serializers.CharField(source='body-plain')

    class Meta:
        model = Message
        fields = ['From', 'To', 'Subject', 'Text']

但是我得到了错误{"Text":["This field is required."]}

在我看来,Django rest可能正在修改钥匙。有人知道如何处理这个问题吗?你知道吗


Tags: totextfromorgisbody端点字符
1条回答
网友
1楼 · 发布于 2024-09-30 01:22:53

我找到了一个可以帮助其他人解决这个问题的方法。尽管如此,我仍然不明白为什么我的问题代码不能工作。如果你有更好的办法,我还在找:)

你知道吗

其思想是重写ViewSet中的POST创建,并绕过ModelSerializer。你知道吗

class MessageViewSet(viewsets.ModelViewSet):
    queryset = Message.objects.all()
    serializer_class = MessageSerializer

    def perform_create(self, serializer):
        msg = Message.objects.create(Subject=self.request.data['Subject'], To=self.request.data['To'], From=self.request.data['From'], Text=self.request.data['stripped-text'])
        msg.save()


class MessageSerializer(serializers.ModelSerializer):
    Text = serializers.CharField(source='body-plain')

    class Meta:
        model = Message
        fields = ['From', 'To', 'Subject', 'Text']
        read_only_fields = ['Text']


class Message(BaseModel):
    From = models.CharField(max_length=500)
    To = models.CharField(max_length=500)
    Subject = models.CharField(max_length=500)
    Text = models.CharField(max_length=10000)
    timestamp = models.DateTimeField(auto_now=True)

相关问题 更多 >

    热门问题