Sac*_*hin 6 django ajax jquery django-csrf csrf-protection
我有以下ajax调用来更新模型的特定字段
$("#updateLink").click(function(){
var dec_text = $('#desc_text').val();
$.ajax({
type: "POST",
url:"/users/update_desc/",
data: {
'val': dec_text,
},
success: function(){
$(".display, .edit").toggle();
$("#descText").html(dec_text);
},
error: function(){
alert("Error");
},
});
return false;
});
Run Code Online (Sandbox Code Playgroud)
我的观点是这样的
@csrf_exempt
def update_desc(request):
if request.is_ajax():
if request.method == 'POST':
desc_text = request.POST.get('val', False)
if desc_text:
profile = user.profile
profile.desc = desc_text
profile.save()
return_message = "Sent mail"
return HttpResponse(return_message,mimetype='application/javascript')
Run Code Online (Sandbox Code Playgroud)
我不断收到错误消息,我不知道如何解决这个问题.我甚至使用csrf_exempt装饰器来解决问题,如果问题是由于缺失引起的,csrf token但问题仍然存在.
除了ajax post在我的base模板中所有ajax调用都失败的情况.任何人都可以帮助了解这里发生的事情.如果需要,我可以提供更多细节.
编辑:
我在我的基本模板中添加了一个js包含此https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax的文件,因此这意味着它存在于我的所有模板中.我正在使用django 1.3版本.
首先,您使用的是POST而不是发送csrf令牌.尝试显式发送csrf令牌而不是使用装饰器csrf_exempt.
这样做的一种方法是我在数据方面所做的工作.这是获取csrf标记(或从您自己的方法)并在您的参数中传递它.
$.ajax({
url : url,
type: "POST",
data : {csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value},
dataType : "json",
success: function( data ){
// do something
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
663 次 |
| 最近记录: |