gpt4 book ai didi

django - 使用 django-backbone 应用程序进行服务器端验证的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-04 05:41:46 28 4
gpt4 key购买 nike

尝试在服务器端使用 Backbone 和 django 制作单页应用程序。

使用 Django 的 ModelForm 进行验证看起来不太适合该目的,因为嵌套模型和在适当位置向用户显示错误消息的困难。

是否有任何好的做法可以在 Django 中验证模型的属性并将其显示在单页应用程序的页面上?

最佳答案

我们有一个使用修改过的backbone.js 和django-rest-framework 的单页应用程序。

我们通过 DRF 资源使用 ModelForm 验证(查看 DRF,如果您想为单页应用程序设置 API,它非常简单且可定制)。当使用嵌套模型时,我们为每个 View 绑定(bind)一个模型并分别处理保存,首先我们保存主模型,保存成功后,我们保存嵌套模型,每个模型都有单独的错误处理。

在主干端,我们有一个特殊的 FormView 来处理表单的呈现、错误处理等。它有一个“提交”方法,可以序列化表单并将数据保存到模型中,看起来有点像这样(我们我去掉了更多的完整性检查逻辑,这不是我们的确切代码,更像是 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 方面,如果您使用 ModelResource 和 ModelForm 验证,DRF 可以为您很好地处理它。

关于django - 使用 django-backbone 应用程序进行服务器端验证的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11170560/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com