将 Swagger 与 Django Rest Framework 一起使用,我可以在不同字段而不是一个正文中看到 POST 参数吗

Posted

技术标签:

【中文标题】将 Swagger 与 Django Rest Framework 一起使用,我可以在不同字段而不是一个正文中看到 POST 参数吗【英文标题】:Using Swagger with Django Rest Framework, can I see POST parameters in different fields instead of one body 【发布时间】:2020-06-17 01:04:27 【问题描述】:

我实际上是使用 Django Rest 框架在 Django 网站上创建 API。 我正在尝试使用 Swagger 记录它们。

我正在使用 Django 2.1、django-rest-swagger 2.2 和 djangorestframework 3.11

除了某些东西之外,一切都几乎按预期工作:

让我解释一下:

我有这个模型(models.py)

class Technology(models.Model):
    """
    This model defines the different technologies
    """
    name = models.CharField(max_length=CHAR_SHORT)
    path = models.CharField(max_length=CHAR_SHORT, validators=[validate_tech_path], help_text='this is only used to construct the url')
    image = models.ImageField()
    mailer = models.EmailField(blank=True)
    external = models.BooleanField(default=False)
    internal = models.BooleanField(default=False)

    class Meta:
        verbose_name_plural = "technologies"
        ordering = ['name']

    def __str__(self):
        return self.name

然后我就有了对应的序列化器类(serializer.py):

class TechnologySerializer(serializers.ModelSerializer):
    """
    This model defines the different technologies
    """
    class Meta:
        model = Technology
        fields = ('id', 'name', 'path', 'image', 'mailer', 'external', 'internal')

最后我对生成的 API (views.py) 有了自己的看法:

class TechnologyViewSet(viewsets.ModelViewSet):

    queryset = Technology.objects.all()
    serializer_class = TechnologySerializer
    http_method_names = ['get','post','delete','put']

结果如下:

Api description 1 Api description 2

如上图所示,参数不是json体。

是否可以为所有参数设置类似的内容:

API parameter wanted 非常感谢。

【问题讨论】:

【参考方案1】:

尝试使用ListCreateAPIView 而不是modelviewset,您将能够看到您的帖子https://www.django-rest-framework.org/api-guide/generic-views/#listcreateapiview。

from rest_framework.generics import ListCreateAPIView
class TechnologyViewSet(ListCreateAPIView):

    queryset = Technology.objects.all()
    serializer_class = TechnologySerializer

希望对您有所帮助。

【讨论】:

嗨 Rohit,首先,感谢您的回答。我已经尝试过你提到的但得到了这个错误:AttributeError: 'TechnologyViewSet' object has no attribute 'get_extra_actions'

以上是关于将 Swagger 与 Django Rest Framework 一起使用,我可以在不同字段而不是一个正文中看到 POST 参数吗的主要内容,如果未能解决你的问题,请参考以下文章

Django Rest Swagger生成api文档

django-rest-swagger对API接口注释

django-rest-swagger 是不是不适用于模型序列化器?

从 Django REST Swagger 中排除 URL

django-rest-framework 和 swagger api 文档

Django Rest framework Swagger生成api文档