Fehler: “CSRF-überprüfung ist fehlgeschlagen. Anfrage wurde abgebrochen." bei der Verwendung von jquery-ajax-mit Django
in der Vorlage:
<script type="text/javascript">
$.ajax({
type:"POST",
url:"{% url DrHub.views.ajxTest %}",
data: {
'start': $('#id_startTime').val(),
'end': $('#id_endTime').val(),
'csrfmiddlewaretoken': '{{ csrf_token }}'
},
success: function(data){
alert(data);
}
});
</script>
.
.
.
<form method='POST' action=".">
{% csrf_token %}
<input type="text id="id_startTime" />
<input type="text id="id_endTime" />
<input type="submit" value="send" />
</form>
in Aussicht:
def ajxTest(request):
if request.is_ajax():
if request.method == 'POST':
return HttpResponse(json.dumps({'message' : 'awesome'},ensure_ascii=False), mimetype='application/javascript')
in settings.py:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
)
beim Absenden habe ich diese Fehlermeldung:CSRF verification failed. Request aborted.
Suchte ich eine Menge, aber keine der vorgeschlagenen Lösungen bei mir funktioniert!
wie : Django CSRF check andernfalls mit einem Ajax-POST-request
und : Ajax Post in Django-framework?
Ich refreenced zu einer js-Datei mit diesem Inhalt:
$.ajaxSetup({
beforeSend: function(xhr, settings) {
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
// Only send the token to relative URLs i.e. locally.
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
}
}
});
aber das hat nicht funktioniert,auch!
Und ich sah die Lösung, die sagen, verwendet ajaxSetup statt ajaxSend,post-Daten, wie mache ich das?
- haben Sie überprüft im firebug, dass das CSRF-token-Wert gepostet werden
- Ich weiß nicht, wie zu verwenden firebug 😀
- Sie können es von hier getfirebug.com die eine firefox-Erweiterung
- Ich firebug installiert, aber ich habe es nicht verstanden!
- wenn Ihre Seite geladen wird, drücken Sie f12 ein Fenster wird öffnen sich vor dir, jetzt, in diesem Fenster gehen Sie auf
Net
Registerkarte und in dieser Registerkarte wählen SieXHR
, jetzt tun die ajax-Anfrage wird es dort angezeigt - In Ihrem browser "view source" auf Ihrer Seite und stellen Sie sicher, dass die csrftoken-Wert eingefügt wurde, in Ihr javascript.
- wenn ich Net tab finde ich nicht XHR !!
- Sie muss etwas falsch...
- siehe hier i.imgur.com/reo3R.png
- Ich habe versucht, dies in eine einfache form, dann habe ich firebug überprüft und ich erhielt den Fehler "403 forbidden" in jquery.js Datei in diesem Artikel: // Senden der Daten try { xhr.send( type === "POST" || type === "PUT" || type === "LÖSCHEN" ? s.Daten : null ); } catch(e) { jQuery.handleError(E, xhr, null, e); // Feuer den kompletten Handler complete(); } in Zeile XHR.senden...
- können Sie überprüfen, welche Parameter gesendet wurden, die in der Anforderung, überprüfen Sie die params-Registerkarte wenn Sie auf die Fehlermeldung
- Ich habe keine params-Registerkarte!!!! aber bei der Post tab kann ich sehen, meine Parameter nur, wenn ich festen Wert zu Thema,wie: start: "8", end: "12", csrfmiddlewaretoken:"SDSDSFSF"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie ziehen Sie die csrfmiddlewaretoken aus dem dom-element:
{'csrfmiddlewaretoken':$( "#csrfmiddlewaretoken" ).val()}
Den oben genannten ist genau das, was ich in mehreren stellen, und es funktioniert.
Bearbeiten, nur um etwas Klarheit Zeichnung von Ihrem material:
#csrf...
wird nicht funktionieren. Stattdessen habe ich benötigt, um das element mit einem name-selector:$('[name=csrfmiddlewaretoken]').val()
.Gibt es auch eine weitere Verknüpfung zu diesem. Ich möchte nicht wissen, wenn die Sicherheit ist hier so viel Wert und Bedeutung. Ich lief in dieses problem, aber es scheint eine Menge von hacks, um dieses, die versuchen, am Ende reichen die csrftoken aus einer vorhandenen cookie. Ich weiß nicht, was passieren würde, wenn dieses cookie nicht vorhanden ist oder nicht gesetzt wurde.
Mein Ansatz war es, fügen Sie ein
@csrf_exempt
zu der Ansicht, dass die Prozesse der ajax-post.Importieren Sie die
csrf_exempt
ausdjango.views.decorators.csrf
Wie diese:
Und als, aus der Sicht Methode:
...
sehen dieser link
dass dies ein refrence, um eine js-Datei mit diesem Inhalt war meine Lösung:
Bitte fügen Sie die csrfmiddlewaretoken als
csrfmiddlewaretoken
:{% csrf_token %}
in Ihrem js.in HTML(template)
in JS
Wenn die
{% csrf_token %}
ist in Ihrer form auf Ihre Vorlage:sollten Sie in der Lage sein, es zu senden, mit:
Habe ich es lösen, indem Sie folgenden:
Hoffe, dass diese Arbeit für jemanden.