私はajax submit(GETクエリ)を送信しました。しかし、それは私のデータベースに変更を加えるので、{% csfr_token %}
の代わりにPOSTを使うべきだという賢い人たちに教えてください。DjangoでPOST値を取得
GETクエリ:
$(document).on('submit','#follow', function(e){
var $button = $(this).find('button');
e.preventDefault();
$.ajax({
url:'/event/{{ event.id }}/',
data: "add={{ event.id }}",
success:function(){
$('#follow').hide();
$('#unfollow').show();
}
})
});
views.py
...
event = get_object_or_404(Event, id=event_id)
user = request.user
if request.GET.get('add'):
event.users.add(user)
event.save()
if request.GET.get('remove'):
event.users.remove(user)
event.save()
...
だから私は、データへtype:"post",
とcsrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken])
を追加しましたが、私はif request.GET.get('add'):
とif request.GET.get('add'):
の代わりに使用するのか分かりません。私はif request.POST.get('add'):
を試しましたが、動作しません。では、if
をPOST値で使用する方法は?
UPD。
[OK]を、私は今持っているもの... テンプレート:
<form id="unfollow" {% if user not in event.users.all %}style="display:none;"{% endif %}>
<input type="hidden" value="{{ event.id }}" name="remove">
<button type="submit" class="btn btn-warning btn-block">{% trans "Unfollow"%}</button>
</form>
...
$(document).on('submit','#unfollow', function(e){
var $button = $(this).find('button');
e.preventDefault();
$.ajax({
type:"post",
url:'/event/{{ event.id }}/',
data: {
'action': 'remove'
},
success:function(){
$('#unfollow').hide();
$('#follow').show();
}
})
});
views.py:
def show_event(request, event_id):
event = get_object_or_404(Event, id=event_id)
user = request.user
if 'action' in request.POST:
if 'action' == 'add':
event.users.add(user)
event.save()
elif 'action' == 'remove':
event.users.remove(user)
event.save()
return render(request, 'events/event.html', {'event':event, 'user':user}
エラーなし、それは動作しません。 success:function()
は正常に動作しますが、データベースに変更はありません。何かアドバイス?
私もif request.POST('action') == 'add':
を試してみましたが、それは
をジャストこれらの変数を出力してください。 –
[the docs](https://docs.djangoproject.com/ja/1.9/ref/csrf/#ajax)には、CSRFトークンをヘッダーに含める方法が説明されていますajaxリクエストであるため、手動で投稿データに含める必要はありません – Alasdair