sử dụng django 1.4 im nhận được một lỗi 403 khi tôi cố gắng làm một bài đăng từ javascript của tôi làm máy chủ django của tôi. tôi nhận được hoạt động tốt mặc dù vấn đề là chỉ với bài viết. cũng đã thử @csrf_exempt không có may mắndjango ajax post 403 bị cấm
CẬP NHẬT: Tôi có thể Đăng ngay bây giờ mà tôi đã thêm {% csrf_token %}
, nhưng phản hồi bài đăng trống, mặc dù GET đến đúng, bất kỳ ý tưởng nào?
xem django tôi:
@csrf_protect
def edit_city(request,username):
conditions = dict()
#if request.is_ajax():
if request.method == 'GET':
conditions = request.method
elif request.method == 'POST':
print "TIPO" , request.GET.get('type','')
#based on http://stackoverflow.com/a/3634778/977622
for filter_key, form_key in (('type', 'type'), ('city', 'city'), ('pois', 'pois'), ('poisdelete', 'poisdelete'), ('kmz', 'kmz'), ('kmzdelete', 'kmzdelete'), ('limits', 'limits'), ('limitsdelete', 'limitsdelete'), ('area_name', 'area_name'), ('action', 'action')):
value = request.GET.get(form_key, None)
if value:
conditions[filter_key] = value
print filter_key , conditions[filter_key]
#Test.objects.filter(**conditions)
city_json = json.dumps(conditions)
return HttpResponse(city_json, mimetype='application/json')
đây là mã của tôi javascript:
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
var csrftoken = getCookie('csrftoken');
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
function sameOrigin(url) {
// test that a given url is a same-origin URL
// url could be relative or scheme relative or absolute
var host = document.location.host; // host + port
var protocol = document.location.protocol;
var sr_origin = '//' + host;
var origin = protocol + sr_origin;
// Allow absolute or scheme relative URLs to same origin
return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
// or any other URL that isn't scheme relative or absolute i.e relative.
!(/^(\/\/|http:|https:).*/.test(url));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
// Only send the token to relative URLs i.e. locally.
xhr.setRequestHeader("X-CSRFToken",
$('input[name="csrfmiddlewaretoken"]').val());
}
}
});
$.post(url,{ type : type , city: cityStr, pois: poisStr, poisdelete: poisDeleteStr, kmz: kmzStr,kmzdelete : kmzDeleteStr,limits : limitsStr, area_nameStr : area_nameStr , limitsdelete : limitsDeleteStr},function(data,status){
alert("Data: " + data + "\nStatus: " + status);
console.log("newdata" + data.area_name)
});
tôi cũng đã cố gắng từ các trang web không có may mắn:
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {
// Send the token to same-origin, relative URLs only.
// Send the token only if the method warrants CSRF protection
// Using the CSRFToken value acquired earlier
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
gì am i thiếu ?
Bạn đã đặt DEBUG = True? Truy cập Công cụ dành cho Chrome Dev -> Mạng và nhấp vào yêu cầu không thành công của bạn. Bạn nhận được thông báo gì trong tab Xem trước hoặc phản hồi? –
tôi nhận được một "xác minh CSRF không thành công. Yêu cầu hủy bỏ." – psychok7
lạ bây giờ bài trả lời của tôi đến EMPTY, bất kỳ ý tưởng tại sao? vẫn hoạt động tốt – psychok7