Erreur csrf dans django
Je veux réaliser une connexion de mon site. En gros, j'ai copié et collé à la suite de bits à partir de l'Django Livre. Cependant, je reçois toujours un message d'erreur (CSRF échec de la vérification. Demande abandonnée.), lors de l'envoi de mon formulaire d'inscription. Quelqu'un peut-il me faire, soulevé cette erreur et comment la corriger?
Voici mon code:
views.py:
# Create your views here.
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = form.save()
return HttpResponseRedirect("/books/")
else:
form = UserCreationForm()
return render_to_response("registration/register.html", {
'form': form,
})
register.html:
<html>
<body>
{% block title %}Create an account{% endblock %}
{% block content %}
<h1>Create an account</h1>
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Create the account">
</form>
{% endblock %}
</body>
</html>
source d'informationauteur niklasfi
Vous devez vous connecter pour publier un commentaire.
J'ai eu exactement le même problème et Bleu Poivrons réponse m'a mis sur la bonne voie. L'ajout d'un RequestContext à votre formulaire vue de résoudre le problème.
et:
Ce fixe pour moi.
Je suis en utilisant Django 1.2.3j'ai eu quelques problèmes intermittents:
Choses à faire:
Assurer le jeton csrf est présent dans votre modèle:
Utiliser un RequestContext:
Assurez-vous d'utiliser un RequestContext pour Obtient ainsi, si elles sont gérées par le même point de vue de la fonction, et de rendre le même modèle.
je.e:
pas:
Assurer 'django.middleware.csrf.CsrfViewMiddleware' est répertorié dans votre settings.py
En supposant que vous êtes sur Django 1.2.x, il suffit d'ajouter ce avant
{{form.as_p}}
:{% csrf_token %}
Et de comprendre POURQUOI, découvrez la CSRF docs
Vous devez ajouter
csrf(request)
à votre contexte.Vous pourriez avoir besoin pour transformer votre contexte dans un
Context
objet de ce, pas undict
mais le principe est valable.Ajouter ces 2 middlewares pour le fichier de paramètres si vous ne voulez pas ajouter de
{% csrf_token %}
à chaque formulaire.Tard répondre.
Maintenant
render
pouvez utiliser à la place decontext_instance=RequestContext(request)