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