2013-01-12 1 views
0

Pourquoi en présence je reçois {% csrf_token%} est l'erreur suivante?CSRF en échec Django

Interdite (403) vérification CSRF a échoué. Demande annulée

Ceci est une vue exemple que je l'utilise, si longtemps.

view.py

def editModel(self,request, offset): 
     if 'user' in request.session : 
      user = request.session['user'] 
      if request.method == 'POST': 
       if 'editModel' in request.POST: 
        offset = int(offset) 
        fields = ProfilModel.objects.filter(name=user) 
        workingModelsFiles = WorkingWithModelsFiles() 
        listModel = workingModelsFiles.getCurrentModel(user, offset) 
        modelView = self.listModels(user)[offset-1] 
        loadModels = "document.getElementById('x3dElement" + str(offset) + "').runtime.showAll();" 
        params = {'id ': offset, 
           'userName' : request.session['user'], 
           'surname' : fields[0].surname, 
           'listModel': listModel, 
           'model': modelView, 
           'bodyLoadModels': loadModels 
           } 
        params.update(csrf(request)) 
        return render_to_response('editModel.html', params) 

      else: 
       offset = int(offset) 
       fields = ProfilModel.objects.filter(name=user) 
       workingModelsFiles = WorkingWithModelsFiles() 
       listModel = workingModelsFiles.getCurrentModel(user, offset) 
       modelView = self.listModels(user)[offset-1] 
       loadModels = "document.getElementById('x3dElement" + str(offset) + "').runtime.showAll();" 
       params = {'id ': offset, 
          'userName' : request.session['user'], 
          'surname' : fields[0].surname, 
          'listModel': listModel, 
          'model': modelView, 
          'bodyLoadModels': loadModels 
          } 
       params.update(csrf(request)) 
       return render_to_response('editModel.html', params) 
     else: 
      return HttpResponseRedirect("/login/") 

Il est présent dans le modèle {%}% csrf_token encore une fois me donne une erreur sur CSRF

template.html

...... 
<div class="tab_container"> 
      <div id="tab1" class="tab_content"> 
       <table class="tablesorter" cellspacing="0"> 
       <tbody> 
       <form action="{% url 'edit_model' listModel.0.id_model %}" method="post" > 
       {% csrf_token %} 
        {% for item in listModel %} 
         <tr> 
          <td rowspan="3" style="width: 300px;"> {{ model | safe }} </td> 
          <td> Name Model: <i><input class="text_field" type="text" id='id_Model' name="Model" value="{{ item.modelName }}" /> </i> </td> 
         </tr> 

         <tr> 
          <td> Author: <i> <input class="text_field" type="text" id='id_Author' name="Author" value="{{ item.author }}" /> </i> </td> 
         </tr> 
         <tr> 
          <td> <input type="submit" name="editModel" value="Edit" /> </td> 
         </tr> 
        {% endfor %} 
       </form> 
       </tbody> 
       </table> 
      </div><!-- end of #tab1 --> 
....... 

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', 
    # Uncomment the next line for simple clickjacking protection: 
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 
+0

Assurez-vous que '' MIDDLEWARE_CLASSES contains' 'django.middleware.csrf.CsrfViewMiddleware', 'dans votre settings.py – Crazyshezy

+0

Avez-vous essayé d'utiliser' 'render_to_response' avec RequestContext' pour faire du traitement csrf_token au lieu de le faire manuellement en utilisant 'params.update (csrf (request))'? – zaphod

Répondre

0

Avez-vous essayé d'utiliser un RequestContext au lieu de params.update (CSRF (demande))? Comme :

params = {'id ': offset, 
      'userName' : request.session['user'], 
      'surname' : fields[0].surname, 
      'listModel': listModel, 
      'model': modelView, 
      'bodyLoadModels': loadModels 
      } 
ctx = RequestContext(request, params) 
return render_to_response('editModel.html', context_instance=ctx) 
+0

Encore une fois la même erreur. Fait intéressant, dans le html-a suit.

. Tag entre les
rien et tout après – Krasimir

+0

Je pense que vous affichez le formulaire dans le mauvais sens. devrait être quelque chose comme: {% csrf_token%} {{}} form.as_p nimiq

+0

Jetez un oeil ici: https://docs.djangoproject.com/en/dev/topics/forms/?from=olddocs#displaying-a-form-using- un modèle – nimiq