2012-02-12 13 views
7

views.pyを印刷しないcsrf_token !Djangoは非表示の入力フィールド

<html> 
<body> 
<h1> All uploaded posters: </h1> 
<form action='/posters/upload' method= 'POST'> 
<input type='file' name= 'uploadfile'>Upload new poster <input type="submit" value = "Upload"> 
</form> 

<a href= ...... 

私は何を欠席しましたか?

UPDATEthisを助けました。

答えて

8

あなたはCSRFミドルウェアを使用するためにはRequestContextのを使用する必要があります。ところで

from django.template import RequestContext 

# In your view: 
return render_to_response('index.html' 
    {'files':os.listdir('/home/username/public_html/posters') }, 
    context_instance=RequestContext(request)) 

:あなたはそれを使用することを忘れてしまった場合、あなたはセキュリティホールを持つことになりますので、csrf_protectデコレータの使用は、推奨されません。

+0

ありがとう、これは私をナットにしていました。うれしいことは何か簡単だった。 – Cerin

1

あなたは(あなたがする必要があります)1.3になったら、renderショートカットがそれをやって、よりコンパクトな方法を提供しています:

from django.shortcuts import render 

def some_view(request): 
    return render(request, 'template.html', context_dict) 
0

Djangoのドキュメントからの抜粋を参照してください。

デコレータメソッド ブランケット保護としてCsrfViewMiddlewareを追加するのではなく、保護を必要とする特定のビューでまったく同じ機能を持つcsrf_protectデコレータを使用できます。 出力にCSRFトークンを挿入するビューとPOSTフォームデータを受け入れるビューの両方で使用する必要があります。(これらは多くの場合同じビュー機能ですが、必ずしもそうではありません)。それは、このように使用されている:あなたはそれを使用することを忘れてしまった場合、あなたはセキュリティホールを持つことになりますので、デコレータの

from django.views.decorators.csrf import csrf_protect 
from django.template import RequestContext 

@csrf_protect 
def my_view(request): 
    c = {} 
    # ... 
    return render_to_response("a_template.html", c, 
           context_instance=RequestContext(request)) 

使用は、自身によって推奨されていません。両方を使用する 'ベルトとブレース'戦略は問題なく、オーバーヘッドが最小限に抑えられます。

関連する問題