comment obtenir des données POST dans django 1.3
Hey, je suis ce tutoriel pour apprendre à faire une page wiki avec Django. Cependant, il est fabriqué dans django 0,96 et j'utilise Django 1.3 donc il y a des choses qui sont différentes. Certains que j'ai déjà moi-même fixé, mais celui-ci je n'arrive pas à le faire fonctionner.
J'ai fait un formulaire qui envoie des données à un point de vue.
C'est la forme:
<form method="post" action"/wikicamp/{{page_name}}/save/">{% csrf_token %}
<textarea name="content" rows="20" cols="60">{{content}}</textarea><br>
<input type="submit" value="Save Page"/>
</form>
et l' /wikicamp/{{nom_page}}/enregistrer/url redirige vers la save_page vue:
from django.http import HttpResponseRedirect
from django.core.context_processors import csrf
def save_page(request, page_name):
c = {}
c.update(csrf(request))
content = c.POST["content"]
try:
page = Page.objects.get(pk=page_name)
page.content = content
except Page.DoesNotExist:
page = Page(name=page_name, content=content)
page.save()
return HttpResponseRedirect("wikicamp/" + page_name + "/")
Cependant le problème est que j'obtiens cette erreur:
Help
Reason given for failure:
CSRF token missing or incorrect.
In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been used correctly. For POST forms, you need to ensure:
The view function uses RequestContext for the template, instead of Context.
In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.
If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data.
You're seeing the help section of this page because you have DEBUG = True in your Django settings file. Change that to False, and only the initial error message will be displayed.
You can customize this page using the CSRF_FAILURE_VIEW setting.
Donc, j'ai lu une partie de la documentation, comme http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-to-use-it. J'ai essayé de le faire, cependant, et il faisait toujours la même erreur.
Donc: quelqu'un à une idée de comment gérer post de formulaire de données bien avec Django 1.3?
Je pense qu'il a quelque chose à faire avec: Le point de vue de la fonction utilise RequestContext pour le modèle, au lieu de Contexte. mais je ne sais pas maintenant ce que c'est.
btw, dans mon terminal qui montre la requête http du localhost il dit ceci: {% csrf_token %} a été utilisé dans un modèle, mais le contexte ne fournit pas la valeur. Cela est généralement causé par la non-utilisation RequestContext.
source d'informationauteur Javaaaa
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin de l' {% csrf_token %} balise de modèle entre vos balises ainsi que notamment
dans votre MIDDLEWARE_CLASSES dans les applications settings.py
Ajoutant quelques exemple le post traitement des données:
Ceci est un exemple de l'une des fois je suis à l'aide de données de POSTES en vue. Je vais généralement compter sur la classe de formulaire pour effectuer la vérification via le cleaned_data tableau.
Vous avez à inclure
{% csrf_token %}
dans votre formulaire modèle entre votre<form>
balises.Si le
csrf_token
n'est pas rendu dans votre formulaire, assurez-vous de fournir leRequestContext
dans la vue de la réponse:Ou, utiliser cette méthode raccourci:
La
RequestContext
est toujours disponible lorsque vous êtes à l'utilisation de générique vues.Je suppose que vous avez raté le symbole '=' dans le formulaire de déclaration.
Heureusement, il peut ne pas être une erreur.
Donc, si ce n'est pas une solution, essayer quelques-uns plus facile exemple:
Espère que cela va fonctionner
re au-dessus de l'utilisation de "demande.POST" pas "c.La POSTE" en la 3e ligne
et le changement dans les "edit_page"