无法发布到 Django REST API
Posted
技术标签:
【中文标题】无法发布到 Django REST API【英文标题】:Not able to post to Django REST API 【发布时间】:2020-06-16 05:55:09 【问题描述】:我想创建一个 ViewSet,它在执行 GET 请求时返回对象列表,如果是 POST 请求,它将执行该函数,并且只有在此之后才会返回此列表。 我在文档中这样做了,但是不允许接收该“帖子”。
views.py
class CloudViewSetHosts(viewsets.ModelViewSet):
queryset = CloudModelHost.objects.all()
serializer_class = CloudSerializerHosts
@action(methods=['POST'], detail=True,
url_path='autodiscovery', url_name='autodiscovery')
def autodiscovery(self, request, requestDataName=None):
...
some actions
...
return CloudModelHost.objects.all()
urls.py
router = routers.DefaultRouter()
router.register(r'hosts', CloudViewSetHosts)
urlpatterns = [
path('', include(router.urls)),
]
然后卷起来:
curl -X POST -H 'Accept: application/json; indent=4'
http://IP/api/hosts/test/ -vvv * 正在尝试 IP:80... * TCP_NODELAY 设置 * 连接到 IP (IP) 端口 80 (#0)
POST /api/hosts/test/HTTP/1.1 主机:IP 用户代理:curl/7.65.3 接受:应用程序/json;缩进=4
将捆绑包标记为不支持多用途 与主机 IP 的连接 #0 保持不变
【问题讨论】:
【参考方案1】:尝试添加
http_method_names = ['post', ]
直接在查询集和序列化器赋值语句下:
queryset = CloudModelHost.objects.all()
serializer_class = CloudSerializerHosts
http_method_names = ['post', ]
【讨论】:
感谢您的帮助,但没有帮助 相同的 405 HTTP 响应 好的,因为这是一个 POST 端点并且您已经设置了detail=True
,所以您需要在 url 中包含一个 pk 值。所以尝试 curl api/hosts/test/pk
其中pk
是您尝试创建/发布的对象的 id/主键。如果您不需要或不需要 pk,请尝试 detail=False以上是关于无法发布到 Django REST API的主要内容,如果未能解决你的问题,请参考以下文章
django rest api:JSON 解析错误 - 无法解码 JSON 对象
如何使用相关模型发布到 Django REST 框架 API
无法在 React 中呈现来自 REST API GET(在 Django 中管理)响应的数据
Django Rest 框架:XMLHttpRequest 无法加载 http://127.0.0.1:8000/xyz/api/abc