Bir ajax gönderim (GET sorgu). Ama benim veritabanımda değişiklik yapar, bu yüzden akıllı insanlar bana {% csfr_token %}
ile POST kullanmam gerektiğini söyledi.Django adresindeki POST değerlerini alın
GET sorgusu:
...
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()
...
$(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 yüzden verilere type:"post",
ve csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken])
eklendi ama bunun yerine if request.GET.get('add'):
ve if request.GET.get('add'):
kullanımına bilmiyorum. if request.POST.get('add'):
'u denedim ama işe yaramıyor. Peki bu if
POST değerleriyle nasıl kullanılır?
UPD.
Tamam, ben şimdi ne var ... şablonu:
<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}
Hata yok, ama işe yaramıyor. success:function()
iyi çalışıyor ancak veritabanında hiçbir değişiklik yok. Herhangi bir tavsiye?
if request.POST('action') == 'add':
denedik ama
Sadece Bu değişkenleri yazdırın ve bunu bulmalısınız. –
Not: [docs] (https://docs.djangoproject.com/en/1.9/ref/csrf/#ajax) CSRF belirtecini başlığa nasıl dahil edeceğinizi açıklar. ajax isteği, böylece el ile posta verilerinin içine eklemeniz gerekmiyor – Alasdair