You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swagger向Django REST API发POST请求无输入选项问题求助

问题原因及解决方法

原因

你用@api_view装饰的函数视图,DRF的Swagger生成工具(drf-yasg)无法自动识别请求体需要的序列化器结构,所以Swagger界面不会显示POST请求的输入选项。类视图(如APIView)能自动推断序列化器,但函数视图需要手动标注。

解决步骤

1. 确保已安装drf-yasg

如果还没安装,先执行:

pip install drf-yasg

2. 修改视图代码,添加Swagger装饰器

在你的views.py中导入swagger_auto_schema,并给create_blog视图添加装饰器,明确指定请求体的序列化器:

from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework import status
from drf_yasg.utils import swagger_auto_schema  # 新增导入

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)

# 新增swagger_auto_schema装饰器,指定请求体和响应序列化器
@swagger_auto_schema(
    method='post',
    request_body=BlogSerializer,
    responses={status.HTTP_201_CREATED: 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)

3. 验证配置

重启Django服务,打开Swagger页面(/swagger/),找到create_blog对应的POST接口,现在应该能看到输入表单了,你可以填写字段后提交请求。

额外检查

  • 确保你的BlogSerializer正确定义了模型的字段,比如:
    from rest_framework import serializers
    from .models import Blog
    
    class BlogSerializer(serializers.ModelSerializer):
        class Meta:
            model = Blog
            fields = '__all__'  # 或指定具体字段
    
  • 确认app/urls.py中已经正确配置了create_blog的路由,比如:
    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('blogs/', views.get_blogs, name='get-blogs'),
        path('blogs/create/', views.create_blog, name='create-blog'),
    ]
    

内容的提问来源于stack exchange,提问作者sai Rohit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:32:49