2016-12-28 12 views
0

初心者のDjangoユーザーはここにいます。私は、私はこのメッセージを取得していない場合ので、私のフォームにCSRFを使用しようとしています:(偽造に対する当然の保護)ここでDjango 1.10 csrfトークンの使用

CSRF verification failed. Request aborted. 

は私のコードです:ジャンゴで

from django.views.decorators.csrf import csrf 


def login(request): 
    c = {} 
    c.update(csrf(request)) 
    return render_to_response('login.html', c) 

ので、 1.9以前そこにこのようなものだった:

from django.core.context_processors import csrf 

は、しかし、私は次のエラーを取得する:

'module' object is not callable 

助けが必要ですか?おかげ

はEDIT:フルトラックバック:

Environment: 


Request Method: GET 
Request URL: http://localhost:8000/accounts/login/ 

Django Version: 1.10.3 
Python Version: 2.7.12 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'matchalgorithm', 
'main', 
'fullcalendar', 
'django_extensions', 
'capstone'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 
File "C:\Python27\lib\site-packages\django\core\handlers\exception.py" in inner 
    39.    response = get_response(request) 

File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "C:\Users\Andy\Documents\ece496-web\capstone\views.py" in login 
    9.  c.update(csrf(request)) 

Exception Type: TypeError at /accounts/login/ 
Exception Value: 'module' object is not callable 
+0

を、あなたは完全なトレースバックを表示することができますか? –

答えて

1

ちょうどあなたのテンプレートにフォームに{%csrf_token%}を含めるようにしていることを確認し、それがOKになります、例えば:

<form action="." method="post" class="login-form"> 
    {% csrf_token %} 
    <input type="submit" value="Log in" /> 
</form> 
+0

うん、私はそこにいたが、まだ動作しませんでした。 – anderish

+0

djangoフォームを使うべきです。彼らは素晴らしいです。 –

0

おっと私の間違いを理解したこの行を削除します。

c.update(csrf(request)) 

幸せな休日:)

+0

また、Djangoフォームhttps://docs.djangoproject.com/en/1.10/topics/forms/ –

0

ビューデコレータrequires_csrf_tokenは、テンプレートタグが作業を行うことを確認するために使用することができます。

from django.views.decorators.csrf import requires_csrf_token 
from django.shortcuts import render 

@requires_csrf_token 
def login(request): 
    c = {} 
    return render_to_response('login.html', c) 

の文書を参照してください。 https://docs.djangoproject.com/en/1.10/ref/csrf/#django.views.decorators.csrf.requires_csrf_token

0

あなたはrender()代わりのrender_to_response()を使用する必要があります。

from django.shortcuts import render 

def login(request): 
    return render(request, 'login.html', c) 

は、次に、あなたは、単にあなたのテンプレートにフォーム内{% csrf_token %}を使用することができます:render()は、コンテキストにCSRFトークンを追加1を含め、あなたのコンテキストプロセッサを呼び出します。

一般的には、常にrender()render_to_response()上で使用することをお勧めします。

This function preceded the introduction of render() and works similarly except that it doesn’t make the request available in the response. It’s not recommended and is likely to be deprecated in the future.