2017-04-13 15 views
0

私は数多くのフォーラムや投稿を見ましたが、まだそれを処理できませんでした。 Here in django docと表示されますDjango:CSRFが間違っているか不足しています

CSRFミドルウェアは、デフォルトでMIDDLEWARE設定で有効になっています。その設定を上書きする場合は、CSRF攻撃が処理されていると見なすビュー>ミドルウェアの前に 'django.middleware.csrf.CsrfViewMiddleware'が来るはずです。

これを無効にした場合、これは推奨されませんが、保護する特定のビュー(下記参照)でcsrf_protect()を使用できます。 POSTフォームを使用するすべてのテンプレートに

、フォームは、内部URLのためのものである場合>要素内csrf_tokenタグを使用して、例えば:

フォームアクション {%csrf_token%}

その上で、私のHTMLテンプレートに私は単純でした:

<form id='frm' name='frm' method="post" action="{% url 'gettip' %}" > 
     {% csrf_token %} 

<input type="text" name="tipid" name="tipid"> 
<input type="submit" value="Get Tip Value"/> 
</form> 

をミドルウェアはすでにロードされているので、私はCSRF_tokenは隠し要素を作成すると予想しました。フォームに要素がなく、CSRFエラーが発生します。

フォームはどのモデルにも関連付けられていません。私はforms.pyも使用していません。私の現在の見解は、単純に何かを出力することです:

def gettip(request): 

    if request.POST: 
     return HttpResponse('You requested a tip') 

#from a weblink, i was told to add the following but it made no difference 
context = {} 
return render_to_response('tip.html',context, context_instance=RequestContext(request)) 

明らかに、隠された要素が全く存在しないため、CSRFがありません。

私はPHPから移行しており、これは私に苦労しています。私のフォームはログインの目的ではありませんが、同じエラーのために私はcouldn't get this one to work eitherです。私はdjango 1.10を使っていて、フォームが提出されたときに肯定的な回答を得たいだけです。

+1

フォームが表示されているテンプレートを表示している「gettip」ビューはオンですか?そうでない場合は、それを表示してください。 –

+0

'context_instance'はDjango 1.10の' render_to_response'から削除されました。そのため、ビューはまったく動かないはずです。 – Alasdair

答えて

0

render_to_responseは使用しないでください。廃止されました。代わりにrenderを使用してください。

from django.shortcuts import render 

def gettip(request): 

    if request.POST: 
     return HttpResponse('You requested a tip') 

    context = {} 
    return render(request, 'tip.html', context) 

フォームを含むテンプレートが別のビューでレンダリングされる場合は、そのビューも修正する必要があります。

+0

ありがとうございました。 PHPへのスイッチの改善...私はCSRFを取得しましたが、フォーム要素ではありません...少し矛盾しています。うまくいけば後でそれを見るでしょう。 –

+0

Djangoをもう一度お試しになる場合は、使用する書籍やチュートリアルがDjango 1.8以上で書かれていることを確認してください。リンクされたログインフォームのチュートリアルは2013年からのもので、期限切れです。 – Alasdair

+0

djangoドキュメント(少なくとも最初の4つのパート)に従ってください。django.https://docs.djangoproject.com/ja/1.11/intro/tutorial01/を学んでください。 – shadow0359

関連する問題