【问题标题】:Django rest swagger post parameter not getting displayed on Swagger docsDjango rest swagger post 参数未显示在 Swagger 文档上
【发布时间】:2017-03-21 18:21:10
【问题描述】:

我已将 swagger 与 django rest 框架集成,但 swagger 文档没有创建输入框来发布数据以进行发布请求。

我的解析器设置,

REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': (
    'rest_framework.parsers.JSONParser',
    'rest_framework.parsers.FormParser',
    'rest_framework.parsers.MultiPartParser',
),

}

这是我的视图类 sn-p,`

class TeamViewList(APIView, BaseView):
"""
    Class based view to handle all operations related to Team Model
"""
logger = logging.getLogger(__name__)

def get_serializer(self):
    return serializers.TeamSerializer

def post(self, request):
    """
    To create a new  team
    """
    try:

网址映射:

urlpatterns = [
url(r'^role/$', rest_views.UserTeamRoleView.as_view(), name='user_team_role'),
url(r'^teams/$', rest_views.TeamViewList.as_view(), name='team_list'),
url(r'^teams/(?P<name>[_a-zA-Z0-9\-]+)$', rest_views.TeamViewDetail.as_view(), name='team_detail'),

]

我的 swagger 文档生成,

无法将 json 有效负载作为输入传递给发布请求。

【问题讨论】:

    标签: django django-rest-framework swagger-2.0 django-swagger


    【解决方案1】:

    您必须为您的视图选择一个PARSER 或将DEFAULT_PARSER_CLASSES 添加到您的 DRF 设置中才能在 Swagger 上查看表单或 json 对象。

    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES': (
            'rest_framework.permissions.IsAuthenticated',
        ),
        'DEFAULT_FILTER_BACKENDS': (
            'rest_framework.filters.SearchFilter',
            'rest_framework.filters.OrderingFilter',
        ),
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'helpers.authentication.TokenAuthentication',
        ),
        'DEFAULT_MODEL_SERIALIZER_CLASS': (
            'rest_framework.serializers.ModelSerializer',
        ),
        'DEFAULT_PARSER_CLASSES': (
            'rest_framework.parsers.JSONParser',
            'rest_framework.parsers.FormParser',
            'rest_framework.parsers.MultiPartParser',
        ),
    }
    

    【讨论】:

    • 我的设置文件中已经有了,REST_FRAMEWORK = { 'DEFAULT_PARSER_CLASSES': ( 'rest_framework.parsers.JSONParser', 'rest_framework.parsers.FormParser', 'rest_framework.parsers.MultiPartParser', ) , }
    • 我发现 django-rest-swagger 仅适用于 viewset 而不适用于 APIView。对吗?
    • 你可以试试 ModelViewSet 吗?
    • 继承自 GenericViewSet 而不是 ViewSet。
    【解决方案2】:

    以下方法应该返回一个实例而不是一个类:

    def get_serializer(self): return serializers.TeamSerializer

    顺便说一句,即使使用实例而不是类,我在 DRF 3.6.2 上也失败了。但是,它看起来像has been fixed here

    【讨论】:

    • 这不是问题。仅当视图类扩展 ViewSet 或 GenericViewset 时,swagger 文档才理解 get_serializer 方法。但就我而言,我使用的是 APIView。 swagger 不支持 APIview。
    • 我不这么认为。我正在使用APIView,它正在调用get_serializer() 方法
    • 能否请您发布一个使用 APIView 的工作示例。这对许多人会有帮助
    • 您可以使用return serializers.TeamSerializer() 并确保您的TeamSealizer 类正常工作
    • 但在更改def get_serializer(self): return serializers.TeamSerializer() 后显示{ "detail": "Could not satisfy the request Accept header." }
    猜你喜欢
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2019-06-01
    • 2014-06-05
    • 1970-01-01
    • 2022-01-05
    • 2017-01-19
    • 2017-04-09
    相关资源
    最近更新 更多