Django rest APIs,自动化文档?

28

我尝试在编写视图集并使用 django rest docs 的同时记录API。我遇到了以下问题:

  • 如果我尝试发送反向关联字段的值,它会采用值列表,但是当在表单数据中发送数据时,它会作为字符串出现。

  • 文档UI中没有文件上传选项。

以下是我的代码:

models.py

class Area(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=100)
    address = models.TextField()
    image = models.ImageField(upload_to='area/')
    created_on = models.DateTimeField(auto_now_add=True)
    modified_on = models.DateTimeField(auto_now=True)
    zipcode = models.CharField(max_length=15, null=True)
    is_verified = models.BooleanField(default=False)

    class Meta:
        ordering = ('-modified_on',)



class Email(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    email = models.EmailField()
    area = models.ForeignKey(Area, on_delete=models.CASCADE, null=True, related_name='email')


class Phone(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    phone = models.CharField(max_length=15)
    area = models.ForeignKey(Area, on_delete=models.CASCADE, null=True, related_name='phone')

查看.py文件

class AreaViewSet(viewsets.ModelViewSet):
    """
    create:
    Create a new area instance.

    """
    serializer_class = AreaSerializer
    parser_classes = (FormParser, MultiPartParser,FileUploadParser)
    queryset = User.objects.all()
    permission_classes = [AllowAny, ]
    filter_backends = (DjangoFilterBackend,)
    filter_fields = ('first_name',)

    def create(self, request):
        data = self.request.data
        with transaction.atomic():
            name = data['name']
            address = data['address']
            email = json.loads(data['email'])
            phone = json.loads(data['phone'])
            zipcode = data['zipcode']

            area = Area.objects.create(name=name,address=address, zipcode=zipcode)

            for i in email:
                Email.objects.create(email=i['email'], area = area)

            for i in phone:
                Phone.objects.create(phone=i['phone'], area=area)

            return Response({'status': {'code': status.HTTP_200_OK,
                                        'error': None,
                                        'message':' Area has been added.'
                                        },
                             'data': None})

序列化器.py

class AreaSerializer(serializers.ModelSerializer):
    email = EmailSerializer(many=True)
    phone = PhoneSerializer(many=True)

    class Meta:
        model = Area
        fields = '__all__'

我正在使用http://www.django-rest-framework.org/topics/documenting-your-api/

默认文档中的图像字段没有文件上传功能。

enter image description here

谢谢


你可以提供你的区域模型吗? - Josef Korbel
是的,我已经更新了问题并添加了模型。 - Ravi Bhushan
1
请尝试此链接:https://pastebin.com/Cbzyh0CT - Josef Korbel
你尝试了上面的解决方案,但它并没有起作用,而且还会出现错误。嵌套序列化器不允许对电话和电子邮件进行写操作。 - Ravi Bhushan
你使用的 DRF 版本是什么? - Paras Jain
显示剩余2条评论
2个回答

2
另一个好的想法是使用Swagger。在Django中,特别是使用DRF时,您有机会与Django Rest Swagger集成,并为您的端点生成自动文档。唯一的要求是提供API类和方法的docstrings文档。注:我与django rest swagger包或作者没有任何关联,只是一个频繁的用户。

4
自2019年6月4日起,Django Rest Swagger已被弃用。库的开发者以及DRF文档建议用户改用drf-yasg(又一个Swagger生成器)代替。 - Omar Hafez

-4

好的,首先,为了更加实用,您的create函数需要像这样:

def create(self,request, *args,**kwargs):
       data = request.data
       logger.debug("%s" % data)
       request = (self.__dict__['request'])
       #parse the rest of your code here 

另外,为什么你不能轻松地设置你的文档呢?这样对你来说会更容易,或者可能是你的要求。

我不明白 :D - wdfc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接