Django 1.10使用csrf令牌

2024-04-20 04:08:08 发布

您现在位置:Python中文网/ 问答频道 /正文

新手Django用户这里。我试图在我的表格中使用csrf,因为如果我没有收到这个信息:(当然还有防止伪造)

CSRF verification failed. Request aborted.

这是我的代码:

^{pr2}$

因此,在django 1.9及更老版本中有这样的内容:

from django.core.context_processors import csrf

但我得到了以下错误:

'module' object is not callable

有什么帮助吗?谢谢

编辑:全音轨后退:

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

Tags: djangoinpycoreresponserequestlibsite
3条回答

视图装饰器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

哎呀,找出我的错误了。删除此行:

c.update(csrf(request))

而且很管用!在

节日快乐:)

只需确保在模板中的表单中包含{%csrf_token%}即可,例如:

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

相关问题 更多 >