أهلا،
لدي تطبيق django حيث أريد إجراء POST بالنقر فوق <button>
وهو ليس في <form>
المشكلة هي أن البيانات المرسلة لعرض وظيفة لا يتم إرسالها بشكل صحيح.
هنا هو كود أكسيوس:
axios({
method: 'post',
url: '/url/to/view'
data: {
obj_id: objectid,
content_type: contenttype,
like: !is_liked
},
xsrfCookieName: 'csrftoken',
xsrfHeaderName: 'X-CSRFToken',
headers: {'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
}).then(function (response) {
console.log(response);
});
وهنا رمز العرض:
def my_view(request):
print request.POST
return HttpResponse('XX')
لا يمكنني الوصول إلى بيانات post.POST لأن المفتاح عبارة عن قائمة ديكت بالكامل وقيمة فارغة:
<QueryDict: {u'{"obj_id":"182","content_type":"video","like":true}': [u'']}>
تكمن المشكلة في أن الكائنات يتم تسلسلها إلى JSON افتراضيًا بينما تحتاج إلى إرسال البيانات بتنسيق "application / x-www-form-urlencoded". أسهل حل هو استخدام مكتبة مثل qs :
var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 });
انظر الى هذا التعليق لمزيد من التفاصيل.
أتمنى أن يساعدك هذا!
هناك طريقة أخرى وهي وضع القيم في كائن FormData ونشرها
لقد كتبت محاور أرود مغلفة صغيرة تعمل بشكل جيد مع إعدادات Django الافتراضية> 1.8. أتمنى أن يساعد هذا شخص ما!
التعليق الأكثر فائدة
تكمن المشكلة في أن الكائنات يتم تسلسلها إلى JSON افتراضيًا بينما تحتاج إلى إرسال البيانات بتنسيق "application / x-www-form-urlencoded". أسهل حل هو استخدام مكتبة مثل qs :
انظر الى هذا التعليق لمزيد من التفاصيل.
أتمنى أن يساعدك هذا!