希望有人向我展示如何通过Django REST框架使用JSON发出简单的POST请求。 我在本教程的任何地方都看不到任何示例吗?
这是我要发布的角色模型对象。 这是一个全新的角色,我想添加到数据库中,但出现500错误。
{
"name": "Manager",
"description": "someone who manages"
}
这是我在bash终端提示下的curl请求:
curl -X POST -H "Content-Type: application/json" -d '[
{
"name": "Manager",
"description": "someone who manages"
}]'
http://localhost:8000/lakesShoreProperties/role
网址
http://localhost:8000/lakesShoreProperties/roles
DOES可以处理GET请求,我可以下拉数据库中的所有角色,但是似乎无法创建任何新的Roles。 我没有权限设置。 我在views.py中使用标准视图
class RoleDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Role.objects.all()
serializer_class = RoleSerializer
format = None
class RoleList(generics.ListCreateAPIView):
queryset = Role.objects.all()
serializer_class = RoleSerializer
format = None
在我的@csrf_exempt这个应用程序中,相关的url-视图映射是正确的:
url(r'^roles/$', views.RoleList.as_view()),
url(r'^role/(?P[0-9]+)/$', views.RoleDetail.as_view()),
错误信息是:
{
"detail": "CSRF Failed: CSRF token missing or incorrect."
}
这是怎么回事,这有什么解决办法? 本地主机是跨站点请求吗? 我在RoleDetail和RoleList中添加了@csrf_exempt,但似乎没有任何改变。 可以将此装饰器添加到类中,还是必须将其添加到方法中?添加@csrf_exempt装饰,我的错误变成:
Request Method: POST
Request URL: http://127.0.0.1:8000/lakeshoreProperties/roles/
Django Version: 1.5.1
Exception Type: AttributeError
Exception Value:
'function' object has no attribute 'as_view'
然后,我在整个应用程序中禁用CSRF,现在我收到以下消息:
{“ non_field_errors”:[“ Invalid data”]}当我知道的JSON对象为有效json时。 这是一个非字段错误,但是我被困在这里。
好吧,事实证明我的json无效吗?
{
"name": "admin",
"description": "someone who administrates"
}
与
[
{
"name": "admin",
"description": "someone who administrates"
}
]
带有括号[]会导致POST请求失败。 但是使用jsonlint.com验证器,我的两个json对象都可以验证。
更新:问题在于与PostMan发送POST,而不是在后端。 参见[https://stackoverflow.com/a/17508420/203312]