0
我正在用Vue.js 2 SPA構建一個Django應用程序。這意味着一切都必須使用AJAX調用來完成。在我的情況下,這些都是用axios處理的。獲取Django Rest Framework從特定帖子變量獲取postdata
爲了方便起見,我在網上找到了ES6的Form類。這允許我有一個可重用的表單對象,我可以輕鬆地提交併仍然處理Promise
,就像直接使用axios執行操作一樣。 窗體類看起來是這樣的:
import Errors from './Errors';
export default class Form {
/**
* Create a new Form instance.
*
* @param {object} data
*/
constructor(data) {
this.originalData = data;
for (let field in data) {
this[field] = data[field];
}
this.errors = new Errors();
}
/**
* Fetch all relevant data for the form.
*/
data() {
let data = {};
for (let property in this.originalData) {
data[property] = this[property];
}
return {data};
}
/**
* Reset the form fields.
*/
reset() {
for (let field in this.originalData) {
this[field] = '';
}
this.errors.clear();
}
/**
* Send a POST request to the given URL.
* .
* @param {string} url
*/
post(url) {
return this.submit('post', url);
}
/**
* Send a PUT request to the given URL.
* .
* @param {string} url
*/
put(url) {
return this.submit('put', url);
}
/**
* Send a PATCH request to the given URL.
* .
* @param {string} url
*/
patch(url) {
return this.submit('patch', url);
}
/**
* Send a DELETE request to the given URL.
* .
* @param {string} url
*/
delete(url) {
return this.submit('delete', url);
}
/**
* Submit the form.
*
* @param {string} requestType
* @param {string} url
*/
submit(requestType, url) {
return new Promise((resolve, reject) => {
axios[requestType](url, this.data())
.then(response => {
this.onSuccess(response.data);
resolve(response.data);
})
.catch(error => {
this.onFail(error.response.data);
reject(error.response.data);
});
});
}
/**
* Handle a successful form submission.
*
* @param {object} data
*/
onSuccess(data) {
console.log(data);
this.reset();
}
/**
* Handle a failed form submission.
*
* @param {object} errors
*/
onFail(errors) {
this.errors.record(errors);
}
}
當前給我一些問題的部分是,當我將數據提交給Django的REST框架,我得到的代碼的所有操作通過使用ModelSerializer,但我似乎無法找到一個簡單的方法告訴它,POST
數據的結構與預期有些不同。 這是一個示例請求數據:
{"data":{"name":"b-0123","windfarm":2,"longtitude":"234","latitude":"345","ip_address":"10.0.0.123"}}
我知道解決方法是,讓Django的知道,它應該得到POST
數據模型,從request.POST['data']
或獲得ES6 Form類通過原料而不是將所有內容作爲數據對象發送。 我不知道的部分是如何讓這些工作。