2017-12-11 13 views
0

は、私はPOSTからparametresを取得していたが、私はCSRFトークンの問題を取得する....CSRFの確認に失敗しました。リクエストが中止されました。私は2 diferentsドロップダウンからPOSTを取得しようとしている(禁止(403))DJANGO

index.htmlを

私は私のhtmlフォームでCSRFトークンを使用するにもかかわらず、
<form method="post" action="/getdata/">{% csrf_token %} 
    <select name="Lista"> 
     <option selected="selected" disabled>Objects on page:</option> 
     <option value="10">10</option> 
     <option value="20">20</option> 
     <option value="30">30</option> 
     <option value="40">40</option> 
     <option value="50">50</option> 
    </select> 

    <select name="Lista2"> 
     <option selected="selected" disabled>Objects on page:</option> 
     <option value="10">10</option> 
     <option value="20">20</option> 
     <option value="30">30</option> 
     <option value="40">40</option> 
     <option value="50">50</option> 
    </select>  
    <input type="submit" value="Select">  
</form> 

、それは...働いていなかった

views.py

from django.http import HttpResponse 
from django.template import loader 
from django.shortcuts import render 

from view.forms import * 
from django.shortcuts import render_to_response, redirect 
from view.models import * 



def index(request): 
    if request.method == 'POST':   
     Lista = request.POST.get('Lista') 
     print "Lista 1 "+Lista 
     Lista2 = request.POST.get('Lista2') 
     print "Lista 2 "+Lista2 

     #FORMS 
     form = FormsLista(request.POST) 
     if form.is_valid():     
      newPost = Lista(num_lista_1=Lista, num_lista_2=Lista2)     
      newPost.save()    
      context = {      
       'Lista': Lista, 
       'Lista2': Lista2 
      }  

      return render(request, 'showdata.html', context) 
    else: 

     template = loader.get_template('index.html') 
     return HttpResponse(template.render()) 

models.py

from django.db import models 

class Lista (models.Model): 
    num_lista_1 = models.CharField(max_length=100, null=True) 
    num_lista_2 = models.CharField(max_length=100, null=True) 
    def __unicode__(self): 
     return self.num_lista_1 

私は道によって活性化されるクッキーを持っている...

答えて

1

Django's CSRF protectionを使用するには、リクエストオブジェクトとテンプレートをレンダリングする必要があります。

template = loader.get_template('index.html') 
return HttpResponse(template.render(request=request)) 

あなたのコードをより一致するであろうあなたはどこにでもrenderを使用した場合:

return render(request, 'index.html') 

をを修正するにはエラーの場合、インデックスビューで常にHttpResponseが返されるようにする必要があります。現時点では、フォームが有効でない場合にPOST要求に対してNoneを返します。 Djangoでは、次のことを行うことが非常に一般的です。

def index(request): 
    if request.method == 'POST': 
     ... 
    form = FormsLista() 
    return render(request, 'index.html', {'form': form}) 

次に、テンプレートにフォームエラーを表示できます。詳細については、rendering formsのドキュメントを参照してください。

+0

私は両方のオプションを試しましたが、このエラーが発生します**ビューtutorial.views.indexはHttpResponseオブジェクトを返しませんでした。代わりにNoneを返しました。** ... –

+0

これは別の問題です。エラーが示すように、常に応答を返す必要があります。 'if request.method == 'POST':'のときに何が起こるかを見てください。しかし、フォームは有効ではありません。 – Alasdair

+0

それは働いた! ...私はいつも私のPOSTが有効でない理由を理解していない...いくつかのアイデア? –

関連する問題