2017-02-15 17 views
1

.ajaxを使用してビューにデータを送信しようとしていますが、CSRFトークンが見つからないか間違っています。 @sure_csrf_cookieデコレータをビューに追加して、csrfクッキーがあることを確認するページをレンダリングしました。 私はそれが送信されるDjangoの1.10.5とjQuery 3.1.1CSRFトークンが抜けているか不正なdjango

Javascriptを

var csrftoken = Cookies.get('csrftoken'); 

function csrfSafeMethod(method) { 
    // these HTTP methods do not require CSRF protection 
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); 
} 
$.ajaxSetup({ 
    beforeSend: function(xhr, settings) { 
     if (!csrfSafeMethod(settings.type) && !this.crossDomain) { 
      xhr.setRequestHeader("X-CSRFToken", csrftoken); 
     } 
    } 
}); 

function updateWaypoints(){ 

    var routeArray =Array(), 
    routeArray = control.getWaypoints(); 
    routeArray.push({route_id:routeId}); 
    console.log(routeArray); 
    console.log(JSON.stringify(routeArray)); 
    var newData = JSON.stringify(routeArray); 

    $.ajax({ 
     type: 'POST', 
     url: '/routes/savemaproute/', 
     data: newData, 
    }); 
} 

ビュー機能を使用していた:

@login_required 
def save_map_route(request): 
    if request.user in route.owner_user.all(): 
     if request.POST: 
      recieved_json_data = request.POST['data'] 
      route_id = request.POST['route_id'] 
      route = get_object_or_404(Route, pk=route_id) 
      route.map_waypoints = recieved_json_data 
      route.save() 
      return HttpResponseRedirect(reverse('route:details', args=(route_new.pk,))) 

urls.py

urlpatterns =[ 
    url(r'^$', views.index, name='index'), 
    url(r'^savemaproute/$', views.save_map_route, name='save_map_route'), 
    ] 

答えて

0

ビューに送信されたデータにcsrftokenがありません:

var routeArray =Array(), 
    routeArray = control.getWaypoints(); 
    routeArray.push({route_id:routeId}); 
    console.log(routeArray); 
    console.log(JSON.stringify(routeArray)); 
    var newData = JSON.stringify(routeArray); 

あなたはcsrftoken変数を定義しているが、それはあなたのnewDataには含まれていません。

あなたnewDataオブジェクトは、次のようになります。

{ 
    // ... your key-value pairs 
    csrftoken: csrftoken 
} 
関連する問題