嘗試在服務器端使用backbone和django製作單頁面應用程序。django-backbone應用服務器端驗證的最佳實踐是什麼?
使用Django的ModelForm進行驗證對於此目的看起來並不太好,因爲嵌套模型和向適當位置的用戶顯示錯誤消息的困難。
是否有任何良好的做法來驗證Django中的模型的屬性,並將其顯示在單頁面應用程序的頁面上?
嘗試在服務器端使用backbone和django製作單頁面應用程序。django-backbone應用服務器端驗證的最佳實踐是什麼?
使用Django的ModelForm進行驗證對於此目的看起來並不太好,因爲嵌套模型和向適當位置的用戶顯示錯誤消息的困難。
是否有任何良好的做法來驗證Django中的模型的屬性,並將其顯示在單頁面應用程序的頁面上?
我們使用經過修改的backbone.js和django-rest-framework,使用此確切設置生產單頁應用程序。
我們通過DRF資源使用ModelForm驗證(如果您想爲單個頁面應用程序設置API,那麼它非常直接並且可定製),請檢查DRF。在使用嵌套模型時,我們爲每個視圖綁定一個模型並分別處理保存,首先保存主模型,並在保存成功後保存嵌套模型,每個模型都有單獨的錯誤處理。
在骨幹端,我們有一個特殊的FormView,用於處理表單的渲染,錯誤處理等。它有一個'ubmit'-方法來序列化表單並將數據保存到模型中,看起來有點像這樣的(我們有,我剝出多一點sanitychecking邏輯,這不是我們確切的代碼,甚至可能會遇到更多的:)非常的JavaScript類僞代碼)
FormView = Backbone.View.extend({
// ... left out functionality for rendering, serializing, etc
submit: function(){
var data = form.serialize();
var self = this;
self.clearErrors();
self.model.save(data,{
success: function(model, response){
self.showSuccess(response) // displays a save-success message
},
error: function(model, response){
self.showError($.parseJSON(response.responseText)) //displays errors
}
})
},
clearErrors: function(){
var self = this;
self.$("ul.non-field-errors").empty() // Clear the main form error list
_.each(self.fields, function(field){
self.$("ul.field-errors#field-" + field.name + "]").empty();
});
},
showErrors: function(errors){
/*
Errors are given by DRF as a dict:
{
errors: [error1, error2, ...], // form level errors
field-errors: { // field level errors
field_name1 : [error1, error2, ...],
field_name2 : [error1, error2, ...],
}
}
*/
var self = this;
self.$("ul.form-errors").empty() // Clear the main form error list
_.each(errors.non-field-errors, function(error){
self.$("ul.errors").append("<li>"+error+"</li>");
});
_.each(errors.field-errors, function(error, field_name){
_.each(error, function(err){
self.$("ul.field-errors#field-" + field_name + "]").append("<li>"+error+"</li>");
});
});
}
});
在Django的一面,DRF可以處理如果您使用ModelResource和ModelForm驗證,那麼它非常適合您。