์๋
ํ์ญ๋๊น,
<form>
์๋ <button>
๋ฅผ ํด๋ฆญํ์ฌ POST๋ฅผ ๋ง๋ค๊ณ ์ถ์ django ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์ต๋๋ค.
๋ฌธ์ ๋ ๋ณด๊ธฐ ๊ธฐ๋ฅ์ผ๋ก ์ ์ก๋ ๋ฐ์ดํฐ๊ฐ ์ ๋๋ก ์ ์ก๋์ง ์๋๋ค๋ ๊ฒ์
๋๋ค.
๋ค์์ axios ์ฝ๋์ ๋๋ค.
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')
ํค๊ฐ ์ ์ฒด ์ฌ์ ์ด๊ณ ๊ฐ์ด ๋น์ด ์๊ธฐ ๋๋ฌธ์ request.POST ๋ฐ์ดํฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
<QueryDict: {u'{"obj_id":"182","content_type":"video","like":true}': [u'']}>
๋ฌธ์ ๋ 'application/x-www-form-urlencoded' ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ผ ํ๋ ๋์ ๊ฐ์ฒด๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก JSON์ผ๋ก ์ง๋ ฌํ๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ์ฅ ์ฌ์ด ํด๊ฒฐ์ฑ ์ qs ์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 });
์์ธํ ๋ด์ฉ์ ์ด ๋๊ธ ์ ์ฐธ์กฐํ์ธ์.
๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!
๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๊ฐ์ FormData ๊ฐ์ฒด์ ๋ฃ๊ณ ๊ฒ์ํ๋ ๊ฒ์ ๋๋ค.
๊ธฐ๋ณธ Django >1.8 ์ค์ ์์ ์ ์๋ํ๋ ์์ ๋ํผ aroud axios๋ฅผ ์์ฑํ์ต๋๋ค. ์ด๊ฒ์ด ๋๊ตฐ๊ฐ๋ฅผ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฌธ์ ๋ 'application/x-www-form-urlencoded' ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ผ ํ๋ ๋์ ๊ฐ์ฒด๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก JSON์ผ๋ก ์ง๋ ฌํ๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ์ฅ ์ฌ์ด ํด๊ฒฐ์ฑ ์ qs ์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
์์ธํ ๋ด์ฉ์ ์ด ๋๊ธ ์ ์ฐธ์กฐํ์ธ์.
๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!