我看到了Flask和Django的swagger文档。在Flask中,我可以手写设计和记录我的API(在参数部分下包括哪些字段是必需的、可选的等)。
以下是我们在Flask中的做法:
我可以选择包含哪些参数,哪些不包含。但是如何在Django中实现相同的功能呢?Django-Swagger文档并不好用。我的主要问题是如何在Django中编写原始json。在Django中,它自动化了这个过程,这使得我无法自定义我的json。如何在Django中实现相同的功能呢?
这是models.py文件。
以下是我们在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'
]
},