wie verwende ich ensure_csrf_cookie?
Ich bin neu in python. Ebenfalls neu in Django. Ich bin versucht zu machen eine AJAX-Anforderung und den Anweisungen gefolgt hier. auf den ersten, das Ergebnis abrufen zu können, csrf, cookie war immer null, so fand ich eine decorator-Methode genannt ensure_csrf_cookie. Das problem ist, es bittet für ein Blick, und ich habe keine Ahnung, was zu übergebende Ansicht und wo kann ich einen Hinweis darauf. Der code ist ziemlich einfach:
from django.shortcuts import render_to_response
from django.core.context_processors import csrf
from django.views.decorators.csrf import ensure_csrf_cookie
def csv_to_xform(csv, template):
return render_to_response(template, { "data": "it works!" })
Muss ich eine Klasse verwenden based view? wenn ja, gibt es einen besseren Weg, um das cookie? Ich möchte nicht, um die beschriebene Methode hier, weil ich nicht wollen, um manuell zu behandeln, der Wert.
Der rest des Codes ist wie folgt:
sandbox.html:
<!doctype html>
<html>
<head>
<title>Sandbox</title>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="/static/js/csrf.js"></script>
<script type="text/javascript">
$(function () {
$('#send-csv-btn').click(function () {
$.post('/csv', {
data: '1, 2, 3',
success: function (response) {
console.debug(response);
},
error: function (response) {
console.debug(response);
}
});
});
});
</script>
</head>
<body>
<form>
{% csrf_token %}
<input type="button" id="send-csv-btn" />
</form>
</body>
</html>
urls.py:
urlpatterns = patterns('',
url(r'^$', 'dkobo.formbuilder.views.main', name='fb'),
url(r'^admin/', include(admin.site.urls)),
url(r'^csv$', 'dkobo.formbuilder.views.csv_to_xform', { "template": "sandbox-stub.html" }),
url(r'^sandbox$', 'dkobo.formbuilder.views.sandbox')
)
settings.py:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Cookies setzt auf server-Antwort, so müssen Sie setup @ensure_csrf_cookie decorator für die Ansicht, dass die macht Seite, von dem user machen, der ajax-Anfrage.
Beispiel, wenn die Benutzer-browser, der ajax-Anfrage auf den Seiten Hauptseite, setzen Sie diesen Dekorator für anzeigen verantwortlich für die Hauptseite.
UPDATE: ajax-request fordert vom sandbox-Seite?
dann versuchen Sie, ensure_csrf_cookie für die sandbox-Ansicht wie diese:
Für die Suche nach einem Weg, dies zu tun mit class-based view:
Zwar haben Sie gefunden, was Sie gesucht haben, die diese Konzepte werden Ihnen helfen.
Ansichten sind Funktionen, die aufgerufen werden, wenn eine URL angefordert wird. Und es gibt zwei Arten von Ansichten:
Den grundlegenden arbeiten der Ansicht ist, zu verarbeiten, einen HttpRequest und senden eine HttpResponse.
Und jede Sicht das ist wieder ein HttpResponse-muss ein request-parameter.
Ex-function-based view:
Ich sehe nicht ein
request
parameter in Ihrem Blick.Nun ein decorator ist etwas, das stellt bestimmte Voraussetzungen auf einen Blick.
Beispiel: Wenn Sie view-Funktion für die Kommentare, und Sie möchten, dass der Benutzer angemeldet sein, um kommentieren, dann können Sie einen
login_required
decorator auf die anzeigen.Dadurch wird sichergestellt, dass jeder, der will, wird der Kommentar zunächst einloggen muss. Die grundlegende syntax ist:
Ähnlich wie die @login_required, @ensure_csrf_cookie ist ein Dekorateur.
HyperLinkedModelViewSet
?CSRF-Token werden automatisch überprüft, wenn Sie haben:
in Ihrem Projekt
settings.py
Datei.Wenn Sie eine solche middleware, Sie brauchen nur zu setzen crsf_token variable alle Ihre Formulare (Vorlagen), und es wird automatisch validiert, zum Beispiel:
Ich weiß nicht, ob ich verstanden habe, dein problem 😉
{% csrf_token %}
element muss in einem Formular. Ich kann nicht die form haben, auf meiner Vorlage (in diesem Fall ich, aber es ist die sandbox). Ich im Grunde möchten, können das cookie ohne ein form-element{% csrf_token %}
gibt nichts zurück. Ich aktualisiere den post zu schließen die restlichen relevanten code.