Swagger API文档

4
我看到了FlaskDjango的swagger文档。在Flask中,我可以手写设计和记录我的API(在参数部分下包括哪些字段是必需的、可选的等)。
以下是我们在Flask中的做法:
class Todo(Resource):
    "Describing elephants"
    @swagger.operation(
        notes='some really good notes',
        responseClass=ModelClass.__name__,
        nickname='upload',
        parameters=[
            {
              "name": "body",
              "description": "blueprint object that needs to be added. YAML.",
              "required": True,
              "allowMultiple": False,
              "dataType": ModelClass2.__name__,
              "paramType": "body"
            }
          ],
        responseMessages=[
            {
              "code": 201,
              "message": "Created. The URL of the created blueprint should be in the Location header"
            },
            {
              "code": 405,
              "message": "Invalid input"
            }
          ]
        )

我可以选择包含哪些参数,哪些不包含。但是如何在Django中实现相同的功能呢?Django-Swagger文档并不好用。我的主要问题是如何在Django中编写原始json。在Django中,它自动化了这个过程,这使得我无法自定义我的json。如何在Django中实现相同的功能呢?
这是models.py文件。
class Controller(models.Model):
    id = models.IntegerField(primary_key = True)
    name = models.CharField(max_length = 255, unique = True)
    ip = models.CharField(max_length = 255, unique = True)
    installation_id = models.ForeignKey('Installation')

serializers.py

class ActionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Controller
        fields = ('installation',)

urls.py

from django.conf.urls import patterns, url
from rest_framework.urlpatterns import format_suffix_patterns
from modules.actions import views as views

urlpatterns = patterns('',
    url(r'(?P<installation>[0-9]+)', views.ApiActions.as_view()),
)

views.py

class ApiActions(APIView):

    """
    Returns controllers List
    """

    model = Controller
    serializer_class = ActionSerializer 

    def get(self, request, installation,format=None):

        controllers = Controller.objects.get(installation_id = installation)
        serializer = ActionSerializer(controllers)
        return Response(serializer.data)

我的问题是

1) 如果我需要添加一个字段,例如xyz,它不在我的模型中,我该如何添加?

2)第一条类似,如果我需要添加一个接受3个提供的值之间的值的字段,即下拉菜单,我该如何添加?

3) 如何添加可选字段?(因为在PUT请求的情况下,我可能只更新1个字段,其余留空,这意味着可选字段)。

4) 还有,我如何添加一个接受json字符串的字段,就像this api一样?

谢谢

我可以在Flask中通过硬编码我的API来完成所有这些事情。但是在Django中,它从我的模型自动化,这(我认为)使我无法访问自定义我的API。在Flask中,我只需要手写我的API,然后与Swagger集成。 Django中是否存在相同的功能?

我只需要在我的Flask代码中添加以下JSON,它就会回答我所有的问题。

# Swagger json:
    "models": {
        "TodoItemWithArgs": {
            "description": "A description...",
            "id": "TodoItem",
            "properties": {
                "arg1": { # I can add any number of arguments I want as per my requirements.
                    "type": "string"
                },
                "arg2": {
                    "type": "string"
                },
                "arg3": {
                    "default": "123",
                    "type": "string"
                }
            },
            "required": [
                "arg1",
                "arg2" # arg3 is not mentioned and hence 'opional'
            ]
        },

这个答案可能对你有用:这里 - Marosinho
你是否正在使用Django REST框架?如果是的话,你是否查看了他们的文档以添加Swagger?(https://www.django-rest-framework.org/topics/documenting-your-api/) - Code-Apprentice
1个回答

0
这个可以行吗:
class TriggerView(APIView):
    """
    This text is the description for this API
        mykey -- My Key parameter
    """

    authentication_classes = (BasicAuthentication,)
    permission_classes = (IsAuthenticated,)

    def post(self, request, format=None):
        print request.DATA
        return Response(status=status.HTTP_202_ACCEPTED)

POST请求:

Authorization:Basic YWRtaW46cGFzcw==
Content-Type:application/json

{"mykey": "myvalue"}

谢谢您回复。我该如何进行put请求?目前我是在Serializer类中包含所选字段,比如class ActionSerializer(serializers.ModelSerializer): class Meta: model = Controller fields = ('installation_id','ip','xyz','abc') 这样所有字段都被列出来,但没有一个字段是可选的,每个字段都是必填的1) 如何添加可选字段? 2) 另外如何添加接受json字符串的字段? 3) 如何添加接受3个指定值之间的值的字段,即下拉列表?提前感谢。 - python-coder
@python-coder 请在你的问题中提供所有细节,包括模型定义、序列化器、视图和URL。 - mariodev
请查看我的编辑后的问题。我已经添加了我的模型、序列化器、URL和视图。 - python-coder

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