我正在尝试使用Ajax POST
将数据发送到我的视图,这样当我点击div
类up-arrow
时,我就可以操作我的数据。
问题是,当我点击所述div并在我的视图文件中打印request.POST
时,我收到的POST
对象包含<QueryDict: {}>
。空!我似乎无法弄清楚为什么我的POST请求没有发送我的数据。
这是我的HTML ...
{% for i in post.posts %}
<li>
<div>
<div class='up-arrow'>
</div>
{{i}}
</div>
</li>
{% endfor %}
这是我的AJAX / jQuery ......
$(document).ready(function(){
$('.up-arrow').click(function(){
$(this).hide()
console.log('click')
$.ajax({
headers: {
'Content-Type':'application/json',
'X-CSRFToken': getCookie('csrftoken')
},
url: 'voteuppost',
type: 'POST',
data: {'dane': 123456789101112},
success: function(data) {
alert('success!')
},
error: function(){
alert('fail')
}
})
return false
});
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
})
以下是我的观点......
class VoteUpPost(View):
def post(self, request):
print(request.POST)
return JsonResponse({'status': True})
这是我的网址路径......
url(r'^voteuppost$', VoteUpPost.as_view()),
我尝试过的事情......
1)我使用GET
代替POST
,我可以使用request.GET.get('dane')
1)尝试使用request.POST.data
和request.POST.DATA
并获得以下内容...... AttributeError: 'QueryDict' object has no attribute 'data'
我也得到了'失败'alert
。
如何通过POST
请求将数据发送到我的视图,然后访问其中的数据?
答案 0 :(得分:16)
使用application/json
发布JSON数据时,您需要使用request.body
而不是request.POST
。
像这样:
class VoteUpPost(View):
def post(self, request):
print(request.body)
data = json.loads(request.body)
return JsonResponse({'status': True})
同样雅克提到的,请确保更新你的js以传递JSON字符串。
变化:
data: {'dane': 123456789101112},
要:
data: JSON.stringify({'dane': 123456789101112}),
答案 1 :(得分:4)
Django请求只能解析 application / x-www-form-urlencoded 和
multipart / form-data 到request.POST
。对于其他内容类型,您必须使用request.body
属性。对于内容类型的断言,您可以从request.META.get('CONTENT_TYPE')
def sample_view(request):
if request.META.get('CONTENT-TYPE') == 'application/json':
data = json.loads(request.body)
return JsonResponse({'any-message':'Hello'})