Вопрос:

Документация по Swagger API

python django rest flask swagger

8203 просмотра

1 ответ

920 Репутация автора

Я видел развязную документацию Flask и Django . В 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 Документ не очень хороший. Моя главная проблема заключается в том, как мне написать мой сырой JSON в Django.

В 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) Тихо, как 1-й , если мне нужно добавить поле, которое принимает значения ч / б 3 предоставленных значений, то есть раскрывающийся список. как мне это добавить?

3) Как добавить необязательное поле? (поскольку в случае PUTзапроса я могу обновить только 1 поле, а остальные оставить пустым, что означает optional поле).

4) Также, как мне добавить поле, которое принимает строку json, как это делает API?

Спасибо

Я могу делать все эти вещи во Flask, жестко программируя мой API. Но в Django он автоматизируется из моих моделей, что не дает (как я считаю) доступа к настройке моего API. Во Flask мне просто нужно написать свой API руками, а затем интегрировать с Swagger. Существует ли то же самое в Django?

Как будто мне просто нужно добавить следующий json в мой код Flask, и он ответит на все мои вопросы.

# 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'
            ]
        },
Автор: python-coder Источник Размещён: 30.01.2014 11:22

Ответы (1)


0 плюса

11561 Репутация автора

Будет ли это работать:

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"}
Автор: mariodev Размещён: 30.01.2014 01:25
Вопросы из категории :
32x32