我在我的 Django 项目中使用私有视图来处理 AJAX 请求。
def HereIsSomeJSON(request, label):
if not request.method == "POST":
raise PermissionDenied
# Here is the job of my AJAX, basically feeding a JSON
json = {...}
return HttpResponse(json, "application/json")
使用 JavaScript,我请求使用 jQuery 的 AJAX,如下所示:
function FeedMeWithJSON() {
// Django needs his Cross-Site Request Forgery token to welome POST datas
oPostDatas = {
'csrfmiddlewaretoken': '{{ csrf_token }}'
};
jQuery.post("/url/to/HereIsSomeJSON", oPostDatas, function(oData, sStatus) {
// Here is the job to be done with the fetched JSON
}, "json");
}
由于request.method
我在视图中进行的验证,一切正常。用户无法手动(通过在浏览器中输入我的 AJAX url)访问我的视图。
但是,由于我需要更多 AJAX 视图,我想知道我是否做对了。所以我想创建一个自定义的 Django 装饰器,我可以在我的每一个 AJAX 视图上方使用它。
是保护我的私人意见的好方法吗?如果是这样,我该怎么做?
谢谢,
编辑
显然,这还不够清楚。我正在使用 Django 视图来执行 AJAX 请求。但我不希望用户能够输入 URL 来读取数据库内容。我知道人们总是可以使用curl
或类似的东西来发送 POST 数据,从而绕过我的东西,即使他必须发送正确的{% csrf_token %}
.
另外,在不久的将来,登录功能将被实现,我将添加@login_required
装饰器。
谢谢,