Swagger 不允许 post 方法将数据发送到 django RestAPI

问题描述 投票:0回答:1

尝试使用 swagger 发送数据,但 POST 方法未显示任何发送数据的数据输入选项。为什么?

这是我的观点:

from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework import status

from .models import Blog
from .serializer import BlogSerializer

@api_view(['GET'])
def get_blogs(request):
    blogs = Blog.objects.all()
    serializer = BlogSerializer(blogs, many=True)
    return Response({
        'Blogs':serializer.data
    }, status.HTTP_200_OK)
    
@api_view(['POST'])
def create_blog(request):
    data = request.data
    serializer = BlogSerializer(data=data)
    if serializer.is_valid():
        serializer.save()
        return Response({
            'data':serializer.data
        }, status.HTTP_201_CREATED)
    return Response(serializer.errors)

这是我的网址:


schema_view = get_schema_view(
   openapi.Info(
      title="Blog API",
      default_version='v1',
      description="Test description",
   ),
   public=True,
   permission_classes=(permissions.AllowAny,),
)

urlpatterns = [
    path("admin/", admin.site.urls),
    path("api/", include('app.urls')),
    path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
    path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),

]

swagger中如何通过post方法发送数据?

如何通过post方法发送输入数据。

django django-rest-framework swagger
1个回答
0
投票

drf_yasg.utils 导入 swagger_auto_schema

使用装饰器来提供序列化器。

from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework import status

from .models import Blog
from .serializer import BlogSerializer

from drf_yasg.utils import swagger_auto_schema

@api_view(['GET'])
def get_blogs(request):
    blogs = Blog.objects.all()
    serializer = BlogSerializer(blogs, many=True)
    return Response({
        'Blogs':serializer.data
    }, status.HTTP_200_OK)
    

@swagger_auto_schema(method='POST', request_body=BlogSerializer)
@api_view(['POST'])
def create_blog(request):
    data = request.data
    serializer = BlogSerializer(data=data)
    if serializer.is_valid():
        serializer.save()
        return Response({
            'data':serializer.data
        }, status.HTTP_201_CREATED)
    return Response(serializer.errors)

© www.soinside.com 2019 - 2024. All rights reserved.