AngularJS restmod:POST 向 Django REST 请求带有“?a=b”的字符串
AngularJS restmod: POST request to Django REST of string with "?a=b"
我正在使用 angular-restmod
向 Django REST Framework
后端发送 POST
请求。但是每当包含 ?
的字符串将导致损坏的 POST 数据(收到时):例如,假设我正在发送 POST
数据
{"properties": "values", "status": "?a=3", "other properties": "other values"}
后端会收到request.data
MergeDict(<QueryDict: {u'{"properties": "values", "status": "?a': [u'3", "other properties": "other values"']}>, <MultiValueDict: {}>)
事情在 =
开始分崩离析。
PUT
方法在这种情况下效果很好。我想知道如何解决这个问题?
==========编辑==========
最后我找到了 $http
的旧设置:
# $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"
它会覆盖 restmod
的默认 JSON
内容类型。我去掉了,问题解决了
虽然我不知道 anuglar-restmod 的确切工作原理,但看起来您正在尝试发送类似 JSON 的数据,但它实际上是作为表单编码数据发送的。数据经过表单编码后,会组合成 key1=val1[&key2=val2...]
并在请求正文中作为一个长字符串发送。
因此,当您期望 JSON 数据作为
发送时
{"properties": "values", "status": "?a=3", "other properties": "other values"}
它实际上是作为表单编码数据发送的,采用
的形式
{"properties": "values", "status": "?a=3", "other properties": "other values"
这应该使您的问题实际变得有些明显:它不是实际上是形式编码的。这被分解为 {"properties": "values", "status": "?a
是键,3", "other properties": "other values"
是值。
这是 may be the fault of the tools you are using, but there is one easy way to fix it: make sure you are using JSON 的一部分。
我正在使用 angular-restmod
向 Django REST Framework
后端发送 POST
请求。但是每当包含 ?
的字符串将导致损坏的 POST 数据(收到时):例如,假设我正在发送 POST
数据
{"properties": "values", "status": "?a=3", "other properties": "other values"}
后端会收到request.data
MergeDict(<QueryDict: {u'{"properties": "values", "status": "?a': [u'3", "other properties": "other values"']}>, <MultiValueDict: {}>)
事情在 =
开始分崩离析。
PUT
方法在这种情况下效果很好。我想知道如何解决这个问题?
==========编辑==========
最后我找到了 $http
的旧设置:
# $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"
它会覆盖 restmod
的默认 JSON
内容类型。我去掉了,问题解决了
虽然我不知道 anuglar-restmod 的确切工作原理,但看起来您正在尝试发送类似 JSON 的数据,但它实际上是作为表单编码数据发送的。数据经过表单编码后,会组合成 key1=val1[&key2=val2...]
并在请求正文中作为一个长字符串发送。
因此,当您期望 JSON 数据作为
发送时{"properties": "values", "status": "?a=3", "other properties": "other values"}
它实际上是作为表单编码数据发送的,采用
的形式{"properties": "values", "status": "?a=3", "other properties": "other values"
这应该使您的问题实际变得有些明显:它不是实际上是形式编码的。这被分解为 {"properties": "values", "status": "?a
是键,3", "other properties": "other values"
是值。
这是 may be the fault of the tools you are using, but there is one easy way to fix it: make sure you are using JSON 的一部分。