Python(tastypie) - POST上的错误请求,返回"错误"字典

时间:2014-04-05 12:25:51

标签: python json django http tastypie

我尝试使用Tastypie将数据发送到基于Django的服务器。

我有这个模型

class Open(models.Model):
    name=models.TextField()

和这个URLconf

open_resource=OpenResource()

urlpatterns = patterns('',
    url(r'^api/', include(open_resource.urls)),
    url(r'^admin/', include(admin.site.urls)),
)

当我运行tastypie curl命令时

curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"name","awdawd"}' http://localhost:8000/api/open/

我收到错误

HTTP/1.0 400 BAD REQUEST
Date: Sat, 05 Apr 2014 12:18:48 GMT
Server: WSGIServer/0.1 Python/2.7.3
X-Frame-Options: SAMEORIGIN
Content-Type: application/json

{"error": ""}

我已经尝试了一切,但似乎无法实现这一目标。

有没有人对这个有线索?

提前多多感谢

2 个答案:

答案 0 :(得分:2)

每当我提供无效的JSON数据时,我都会收到这个无用的错误。

正确 JSON格式为:

{"foo": "bar"}                     // correct!

[{"foo": "bar"}, {"fiz": "baz"}]   // correct!

{"foo": "bar", "fiz": "baz"}       // correct!

常见错误的例子

{'foo': 'bar'}    // error is using single quotes instead of double quotes
{foo: "bar"}      // error is not using double quotes for "foo"
{"foo", "bar"}    // error is using a comma (,) instead of a colon (:)  ← Your error

更复杂的错误的例子

[{"foo": "bar"}, {"fiz": "baz"},]
// error is using a comma at the end of a list or array

{"foo": "bar", "fiz": "baz",}  // courtesy @gthmb
// error is using a comma at the end of the final key-value pair

认为您的JSON有效吗?请使用JSON validator进行仔细检查。

答案 1 :(得分:0)

由于tastypie适用于JSON数据,您还必须提供此格式。 试试这个数据:

--data '{"name": "myName"}'

此外,我不确定您如何构建您的网址,但我可以向您显示正在设置的网址:

v1_api = Api(api_name='v1')
v1_api.register(OpenResource())
urlpatterns = patterns('',
url(r'^api/', include(v1_api.urls)),
...
}

这会创建以下网址来访问您的资源:

/api/v1/open/?format=json

最终会出现这个卷曲命令:

curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"name": "myName"}' http://localhost:8000/api/v1/open/

并且不要忘记在资源的元数据中添加授权和身份验证

OpenResource(ModelResource)
    class Meta:
    queryset = Open.objects.all()
    authorization = Authorization()  

默认情况下,tastypie使用ReadOnlyAuthorization设置资源,禁止发布,放置访问权限。

有关详情,请参阅文档:https://django-tastypie.readthedocs.org

希望这有所帮助,欢呼!