使用django 1.4,当我试图从javascript do my django服务器发送帖子时,我收到一个403错误。我的get工作得很好,尽管问题只出在帖子上。还尝试了@csrf_豁免,但没有成功
更新:我现在可以发布了,我添加了{%csrf\u token%},但是发布响应是空的,尽管GET正确,有什么想法吗
我的django观点:
@csrf\u保护
def编辑城市(请求、用户名):
条件=dict()
#if request.is_ajax():
如果request.method==“GET”:
条件=request.method
elif request.method==“POST”:
打印“TIPO”,request.GET.GET('type','')
#基于http://stackoverflow.com/a/3634778/977622
对于筛选关键字,请在('type','type'),('city','city'),('pois','pois'),('poisdelete','poisdelete'),('kmz','kmz'),('kmzdelete','kmzdelete'),('limitsdelete','limitsdelete'),('area_name','area_name'),('action','action'):
value=request.GET.GET(表单_键,无)
如果值:
条件[筛选键]=值
打印筛选键,条件[筛选键]
#测试对象过滤器(**条件)
city_json=json.dumps(条件)
返回HttpResponse(city_json,mimetype='application/json')
以下是我的javascript代码:
函数getCookie(名称){
var-cookieValue=null;
如果(document.cookie&;document.cookie!=”){
var cookies=document.cookie.split(“;”);
对于(变量i=0;i<;cookies.length;i++){
var cookie=jQuery.trim(cookies[i]);
//这个cookie字符串是否以我们想要的名称开头?
if(cookie.substring(0,name.length+1)==(name+’=’)){
cookieValue=decodeURIComponent(cookie.substring(name.length+1));
打破
}
}
}
返回值;
}
var csrftoken=getCookie(’csrftoken’);
函数csrfSafeMethod(方法){
//这些HTTP方法不需要CSRF保护
返回(/^(获取|头|选项|跟踪)$/.test(方法));
}
函数sameOrigin(url){
//测试给定url是否为同一源url
//url可以是相对的、方案相对的或绝对的
var host=document.location.host;//主机+端口
var协议=document.location.protocol;
var sr_origin=’/’+主机;
var原点=协议+sr_原点;
//允许绝对或方案相对URL指向同一来源
返回(url==origin | | url.slice(0,origin.length+1)==origin+’/’))||
(url==sr_origin | | url.slice(0,sr_origin.length+1)==sr_origin+’/’))||
//或任何其他不是方案相对或绝对的URL,即相对。
!(/^(\/\/| http:| https:)./.test(url));
}
$.ajaxSetup({
发送前:功能(xhr、设置){
如果(!(/^http:.*.test(settings.url)|/^https:../.test(settings.url))){
//仅将令牌发送到相对URL,即本地。
xhr.setRequestHeader(“X-CSRFToken”,
$(’input[name=“csrfmiddlewaretoken”].val());
}
}
});
$.post(url,{type:type,city:cityStr,pois:poisStr,poisdelete:poisDeleteStr,kmz:kmzStr,kmzdelete:kmzDeleteStr,limitsStr,area_名称TR:area_名称TR,limitsdelete:limitsDeleteStr},函数(数据,状态){
警报(“数据:+数据+”\n状态:+状态);
console.log(“newdata”+data.area\u name)
});
我也曾尝试过从网站上下载,但没有成功:
$.ajaxSetup({
发送前:功能(xhr、设置){
if(!csrfSafeMethod(settings.type)和sameOrigin(settings.url)){
//将令牌发送到同一来源,仅发送相对URL。
//仅当方法保证CSRF保护时才发送令牌
//使用先前获取的CSRFToken值
setRequestHeader(“X-CSRFToken”,CSRFToken);
}
}
});
我错过了什么
实际上,您可以将其与数据一起传递{csrfmiddlewaretoken:{{{csrf_token}}},它一直都在工作