CSRF cookie ne pas définir de django...échec de la vérification de
AoA
Je suis nouveau sur Django, je suis en train d'essayer de récupérer les données de la POSTE, mais l'obtention d'erreur CSRF cookie n'est pas défini, j'ai essayé beaucoup de choses pour trouver la solution sur google et stackoverflow via google aussi, mais n'a pas
voici le code
views.py
from django.http import HttpResponse
from django.template.loader import get_template
from django.template import Context
from django.template import RequestContext
from django.core.context_processors import csrf
from django.shortcuts import render_to_response
def search_Post(request):
if request.method == 'POST':
c = {}
c.update(csrf(request))
# ... view code here
return render_to_response("search.html", c)
def search_Page(request):
name='Awais you have visited my website :P'
t = get_template('search.html')
html = t.render(Context({'name':name}))
return HttpResponse(html)
Fichier HTML
<p>
{{ name }}
<form method="POST" action="/save/">
{% csrf_token %}
<textarea name="content" rows="20" cols="60">{{content}}</textarea><br>
<input type="submit" value="Save Page"/>
</form>
<div> Cant figure out any solution! :( </div>
</p>
url.py
url(r'^home/$', 'contacts.views.home_Page'),
url(r'^save/$', 'contacts.views.search_Post'),
url(r'^edit/$', 'contacts.views.edit_Page'),
url(r'^search/$', 'contacts.views.search_Page'),
settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.csrf',
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.core.context_processors.request',
'django.contrib.messages.context_processors.messages'
)
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',
# Uncomment the next line for simple clickjacking protection:
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
OriginalL'auteur Saad Abdullah | 2013-10-25
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème, résolu en ajoutant la ensure_csrf_cookie décorateur à votre vue:
Il sera mis en csrftoken dans le cookie de navigateur et vous pouvez faire de l'ajax comme ce
OriginalL'auteur Yoganand
Vous utilisez à la fois les moyens de passer jeton CSRF pour modèle de processeur
et RequestContext, alors que l'on est assez, voir les docs. Mais vous l'utilisez à mauvais endroit, pour servir de 'POST' demande. Ces demandes sont normalement envoyées par votre navigateur lorsqu'il remplit un formulaire et que vous souhaitez obtenir de résultats.
Votre navigateur rend home.html l'envoi d'OBTENIR requête à un serveur, qui est servi par
partie de votre code. Et là, vous ne pas utiliser tous les moyens à passer jeton csrf. Ainsi, lorsque votre modèle de processeur
get_template().render()
est invoqué, n'a pas de jeton dans son contexte, et donc ignore simplement {% csrf_token %} le code dans le modèle. Donc, vous devez soit utiliserRequestContext
dans t.render(...) une partie de la vue, ou pass, vousc
dict.Vous pouvez le vérifier inspection générés formulaire dans une fenêtre de navigateur.
Mise à JOUR
Dans
seetings.py
ajouter une virgule après'django.core.context_processors.csrf'
, la façon dont il est maintenant, c'est juste contcatenates cordes.Devrait être:
voyez-vous jeton csrf dans le code html généré?
qu'est-ce que ce ResponseContext?
non, il n'est jeton csrf dans le code source html
Dans ce cas, je vous suggère de marquer réponse à la question, soit en choisissant parmi les réponses existantes ou si vous le sentez pas approprié, en ajoutant votre propre.
OriginalL'auteur alko
Commencer à partir de la fixation de votre HTML (Vous avez oublié =):
Aussi:
Vérifier le rendu de la page. Avez-vous des csrf champ(caché d'entrée) rendu?
il n'y a pas de champ csrf dans la page html
OriginalL'auteur Dmitry Demidenko
Il semble que Vous avez oublié de passer demande de rendre
Donc, Ce que Vous avez besoin est le suivant
Si Vous wold comme Vous pouvez le vérifier django dock ici
https://docs.djangoproject.com/en/dev/ref/templates/api/#django.template.RequestContext
oui, Un deuxième merci
veuillez vérifier cette
non, toujours l'erreur FORBIDDEN 403 'CSRF échec de la vérification. Demande abandonnée.' Raison de l'échec: CSRF cookie n'est défini.
avez-Vous de recharger la page après les modifications apportées?
OriginalL'auteur oleg
Essayez d'utiliser l'adresse IP exacte avec le numéro de port à la place du DNS... Comme au lieu de localhost utilisation 127.0.0.1 avec le numéro de port.
OriginalL'auteur impiyush