Django rest API, автоматизировать документацию?

Я попытался задокументировать API во время написания наборов представлений и с помощью django rest docs. У меня есть следующие проблемы:

  • если я пытаюсь отправить значения для обратно связанного поля, он принимает список значений, но при отправке данных в данные формы он приходит в виде строки.

  • В пользовательском интерфейсе документации нет возможности загрузки файлов.

Ниже приведен мой код:

модели.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')

view.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/

В документах по умолчанию нет загрузки файла в поле изображения.

введите описание изображения здесь

Спасибо


person Ravi Bhushan    schedule 16.05.2018    source источник
comment
Можете ли вы предоставить модель вашей области?   -  person Josef Korbel    schedule 16.05.2018
comment
да, я обновил вопрос с моделями   -  person Ravi Bhushan    schedule 16.05.2018
comment
Попробуйте serializer = AreaSerializer(data=request.data) и return Response(serializer.data, status=status.HTTP_201_CREATED)   -  person Josef Korbel    schedule 16.05.2018
comment
pastebin.com/Cbzyh0CT попробуйте это   -  person Josef Korbel    schedule 16.05.2018
comment
Я пробовал это решение выше, оно не работало, оно также будет выдавать ошибки, операции записи вложенного сериализатора не разрешены для телефона и электронной почты.   -  person Ravi Bhushan    schedule 16.05.2018
comment
Какую версию DRF вы используете?   -  person Paras Jain    schedule 26.05.2018
comment
дрф 3.7 и джанго 2.0.4   -  person Ravi Bhushan    schedule 28.05.2018


Ответы (2)


Еще одна хорошая идея — использовать Swagger. В Django, особенно при использовании DRF, у вас есть возможность интегрироваться с Django Rest Swagger и создавать автоматическую документацию для ваших конечных точек. Единственное требование — предоставить docstrings-документацию ваших классов и методов API.

ps: я не имею отношения к пакету django rest swagger или авторам, просто частый пользователь

person Kostas Livieratos    schedule 19.08.2018
comment
Django Rest Swagger устарел с 4 июня 2019 г. Разработчик библиотеки, а также документы DRF, рекомендуют пользователям использовать drf-yasg — еще один генератор Swagger вместо этого. - person Omar Hafez; 28.03.2020

Хорошо, во-первых, чтобы быть более практичным, ваша функция создания должна быть такой

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

Кроме того, почему вы не можете легко настроить свою документацию, это будет проще для вас, или, может быть, это требование для вас

person Jonas Amara    schedule 22.05.2018
comment
я не понимаю :Д - person wdfc; 12.08.2018