我为移动应用程序编写了Tastypie API,以便与我的Django后端进行通信。为此目的它正常运行,但我也想用它来发出AJAX请求。我尝试潜入JS,编写一个由AJAX POST请求提交的表单。除了在单击提交时刷新页面,这似乎什么都不做。你可以在这里找到我的JS和HTML:
Django AJAX Request Fails To Send
在那里没有达成任何解决方案后,我尝试倒退并用CURL完成相同的请求。
curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"name" : "apples"}' http://localhost:8000/api/v1/item/
只是挂起而且永远不会返回任何内容。我必须使用CTRL+C
来逃避shell。
非常感谢任何建议或协助,谢谢。
更新:
我已经安装了POSTMAN并用它来尝试发出请求。这返回了500 Internal Server Error
,并显示以下错误消息:
"The format indicated 'multipart/form-data' had no available deserialization method. Please check your ``formats`` and ``content_types`` on your Serializer."
更新II:
在POSTMAN中我尝试以各种编码格式发送数据,但是每个不同的编码选项都返回no deserialization method
错误,application/json
除外。当我以这种方式发送{name:'apples'}
时,它返回了一个错误:
"Expecting property name: line 1 column 2 (char 1)"
答案 0 :(得分:0)
而不是-H,请尝试使用-d,它只是发布数据...
curl -d "info posted on to the server" http://ur ip address
-H
将始终为您提供标题信息,并-d
直接在服务器中发布数据
答案 1 :(得分:0)
什么是返回码?没有“不返回任何东西”这样的东西。使用curl
:-v
运行curl -v --dump-header ...
以查看更多信息。您还可以查看服务器日志或Django开发服务器的控制台,看看是否有请求进入。
“表示'multipart / form-data'的格式不可用 反序列化方法。请检查您的
formats
和 您的Serializer上有content_types
。“
尝试使用
传递明确的Accept
标头
-H "Accept: application/json, text/javascript, */*; q=0.01"
同时禁用CSRF中间件(以及您可以禁用的所有其他中间件),看看它是否有帮助。
然后,您的身份验证方法是什么? Api键?会议?基本认证?您可能会收到401错误。为了查看它是否到达授权点,从Tastypie docs on authorization获取UserObjectsOnlyAuthorization
类,将其用作授权类,并在每个函数中插入print
语句。
最后,这是HTTP PUT的一个工作示例:
curl -v --dump-header - -H "Content-Type: application/json" -X PUT "https://website.com/api/v1/3/?username=<user>&api_key=<api_key>" --data '{"apple": "banana"}'