Проблема при отправке словаря с помощью ajax (POST) в python (django views) -> всегда пустой
Так что я вызываю это в шапке html :
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
затем с помощью кнопки я вызываю функцию :
<div>
<button class= "button" type="ajax-call" onclick="getValue();">Envoyer</button>
</div>
А функция :
<script type="text/javascript">
function getValue(){
....
$.ajax({
url: "{% url 'sondage' %}",
type : 'POST',
dataType: "json",
data: {heure_reponse: heure, jour_reponse: jour,habitude_reponse: habit, faim_reponse : faim, soif_reponse: soif, estomac_reponse:estomac, miam_reponse: miam, quantite_reponse: quantite, but_reponse: but, adresse_reponse: adresse, identifiant_reponse:identifiant
}
})
}
</script>
Проблема в следующем: Когда я пишу в views.py моего сайта django (python) с
from django.contrib.auth.decorators import login_required
from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import render
from csv import writer
from csv import QUOTE_MINIMAL
@csrf_exempt
@login_required
def sondage(request):
#Récupération des données par ajax
reponses = request.POST.items()
reponses = list(reponses)
if len(reponses) == 0:
print(" AJAX PROBLEME ")
reponses.append(request.user.get_filename().split('/')[1].split('.')[0])
name = request.user.get_filename().split('/')[1].split('.')[0]
#Ecriture dans le csv
write_csv(reponses,name)
#Appel de la page que l'on est en train de traiter
return render(request, 'sondage.html',{'data':reponses})
def write_csv(data,name):
#Ouverture en mode APPEND
with open('uploads/questionnaire/sondage.csv', 'a', newline='', encoding="utf-8") as csvfile:
csv_writer = writer(csvfile, delimiter=',')
csv_writer.writerow(data)
csvfile.close()
У меня всегда есть "AJAX PROBLEME"! Почему? И как это исправить?
Вы должны преобразовать диктуемые данные следующим образом
const data= JSON.stringify(obj)
затем отправить его в представление Django
затем сделать вот так
data = json.loads(request.POST['data'])