[Python] Swagger API documentation

Discussão em 'Python' iniciado por Stack, Julho 20, 2025.

  1. Stack

    Stack Membro Participativo

    I saw swagger documentation of Flask and Django. In Flask I can design and document my API hand-written.(Include which fields are required, optional etc. under parameters sections).

    Here's how we do in 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"
    }
    ]
    )


    I can chose which parameters to include, and which not. But how do I implement the same in Django? Django-Swagger Document in not good at all. My main issue is how do I write my raw-json in Django.

    In Django it automates it which does not allows me to customize my json. How do I implement the same kind of thing on Django?

    Here is models.py file

    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)


    My questions are

    1) If I need to add a field say xyz, which is not in my models how do I add it?

    2) Quiet similar to 1st, If i need to add a field which accepts values b/w 3 provided values,ie a dropdown. how do I add it?

    3) How I add an optional field? (since in case of PUT request, I might only update 1 field and rest leave it blank, which means optional field).

    4) Also how do I add a field that accepts the json string, as this api does?

    Thanks

    I can do all of these things in Flask by hardcoding my api. But in Django, it automates from my models, which does not(as I believe) gives me the access to customize my api. In Flask, I just need to write my API with hands and then integrate with the Swagger. Does this same thing exist in Django?

    Like I just need to add the following json in my Flask code and it will answer all my questions.

    # 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'
    ]
    },

    Continue reading...

Compartilhe esta Página