コミュニティのアドバイスAJAXは、クライアントのブラウザのスクリプトがあなたと「バックグラウンドで」通信する方法であるためです。しかし、それを使用するには、Ajaxのリクエストを取得し、操作を行い、応答を送るDjango ViewsやAPIが必要です。 AJAXの詳細についてはw3schoolsとjQuery docsをご覧ください。
しかし、基本的な解決策のためには、適切なAJAXリクエストとそれらを処理するViewsを持つDjangoのAPIの2つが必要です。
私たちのスクリプトのための2つのURLを作成し、APIで始まるのをしてみましょう:
url(r'^api/get_array/(?P<uid>\d+)$', views.GetArrayView.as_view(), name='get_array'),
url(r'^api/save_array$', views.SaveArrayView.as_view(), name='save_array'),
最初のビューは、(JSONとして)それの配列を送り返し、指定されたidによってユーザーを取得します。
2番目のビューはPOSTデータを取得し、データベースに保存します。
from django.http import JsonResponse
class GetArrayView(View):
def get(self, request, uid):
# some operations to get array from database using user ID given in uid parameter
# array is a list, just like one in your question
return JsonResponse({'array': array})
class SaveArrayView(View):
def post(self, request):
post = request.POST
changed_array = post.get('array')
user_id = post.get('uid')
# some operations to save your array into database
return JsonResponse({'status': OK})
JSONの応答については、read thisです。 そして今、AJAX。スクリプトの使用中の配列、取得するには:
$.ajax({
type: "GET",
url: '/api/get_array/'+user_id,
success: function(response){
// your array is in the response.array
},
error: function(jqXHR, textStatus, errorThrown){
// handle any errors here
}
});
$.ajax({
type: "POST",
url: '/api/save_array/',
data:{
array: your_changed_array,
uid: user_id,
some_other_data: other_data,
},
success: function(response){
if(response.status == "OK"){
// everything went fine
}
else{
// you can send other responses and handle them here
}
},
error: function(jqXHR, textStatus, errorThrown){
// handle any errors here
}
});
これは非常に基本的な設定ですが、私はAJAX要求とDjango REST Framework API(JSON GET/POST/UPDATE/DELETE APIのための偉大な枠組み)についての詳細を読むことをお勧めします。
最後に1つ - DjangoのPOST要求ごとにCSRFトークンが必要です。 JavaScriptでこれらを使用するのは複雑です(docs for that)。ショートカットが必要な場合は、選択したビューでオフにすることができますが、推奨しません。 More info here.