您的位置:首页 > Web前端 > JavaScript

django 后台与前端js数据交互对ajax封装

2014-07-16 15:24 751 查看
1、首先定义一个js数组,对业务逻辑进行分类,如二手电子市场来说,有二手单车模块、二手电器模块、二手书籍模块等。

var models = [
{ modelName:"bicycleApi",remoteUrl:'/remote/bicycleApi/'},
{ modelName:"equipmentApi",remoteUrl:'/remote/equipmentApi/'}
]

2、js封闭ajax方法
(function($){
var remote = china.nameSpace("remote");

var models = window.models || [];

for (var i = 0; i < remoteUrls.length; i++) {
var modelName = models[i]['modelName'];
var remoteUrl = models[i]['remoteUrl'];
var initRemoteClass = function(modelName, remoteUrl) {
remote[viewName] = {};

remote[viewName].c = function(method, params, dataType, async) {
if ( typeof params == 'undefined') params = {};
if (!dataType) { dataType = "json"; }
if(async !== false){async = true}

var _params = $.toJSON( typeof params === "function" ? params() : params);
var url = remoteUrl + method + '/';
return $.ajax({
url : url,
type : "POST",
async : async,
data : {
params : _params
},
dataType : dataType
});
};

remote[viewName].rc = function(method, params) {
if ( typeof params == 'undefined')
params = {};
var url = remoteUrl + method + '/';
var readConfig = {
url : url,
type : 'post',
dataType : "json",
data : {
params : typeof (params) == 'function' ? function() {
return $.toJSON(params())
} : $.toJSON(params)
}
}

return readConfig;
};

};

initRemoteClass(modelName, remoteUrl);
}

})(jQuery);

3、在django urls.py里添加如下配置
import json
apiClasses = [
bicycleApi,
equipmentApi
]

def getApiClasses(clsName):
for apiCls in apiClasses:
if apiCls.__name__ == clsName:
return apiCls
return None

def _loadParams(request, pname):
q = request.REQUEST.get(pname, "{}")
q = json.loads(q)
return q

def remoteView(request, apiClsName, methodName):
cls = getApiClasses(apiClsName)
if not cls:raise Exception("Can't find remote api class [%s]" % apiClsName)

if cls and hasattr(cls, methodName):
params = _loadParams(request, 'params')
inst = cls()
inst.request = request
m = getattr(inst, methodName)
params = dict([[str(k), v] for k, v in params.items()])
rs = m(**params)
return HttpResponse(json.dumps(rs))

raise Exception("Can't find remote method[%s] with api class [%s]" % (methodName, apiClsName))

urlpatterns = patterns('',
(r'^remote/(?P<apiClsName>\w*)/(?P<methodName>[a-zA-Z]+\w*)/', remoteView)
)
bicycleApi类实现业务逻辑,如:

#coding=utf-8

class bicycleApi(object):
def getAllBicycleS(money=None):
pass
4、然后

bicycleApi、equipmentApi 实现后台逻辑

5、这样子后,js代码编写如下代码就只可以远程调用后台方法了

china.remote.bicycleApi.c("getAllBicycles", {money:30} ).success(function(msg){

})


《完》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: