CSRF 验证失败。请求中止 - Django,POST
CSRF verification failed. Request aborted - Django, POST
我正在使用服务器:Django、Gunicorn、ngnix、postgresql
Client: Chrome Advanced Rest Client
views.py
from django.views.decorators.csrf import csrf_exempt, **ensure_csrf_cookie** # Newly added
from django.http import HttpResponse
**@ensure_csrf_cookie** # newly added
def hello(request):
return HttpResponse("Hello world")
def hi(request):
return HttpResponse("Hi World")
def display_meta(request):
values = request.META.items()
values.sort()
html = []
for k, v in values:
html.append('<tr><td>%s</td><td>%s</td></tr>' % (k, v))
return HttpResponse('<table>%s</table>' % '\n'.join(html))
def addUser(request):
if request.method == 'POST':
# Convert JSON to python objects and
# store into the DB
print 'Raw Json "%s"' % request.body
#return HttpResponse("%s" %request.body)
return HttpResponse("Thank God")
url.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
from requests import hello, hi, addUser, display_meta
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'testProject.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^hello/$', hello),
url(r'^hi/$', hi),
url(r'^admin/', include(admin.site.urls)),
url(r'^addPatient/$', addUser),
url(r'^displaymeta/$', display_meta),
)
manage.py
# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'dbTransactions',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
27,18 35%
来自 Advance Rest 客户:
a) GET to hi 工作正常没有错误
b) POST 到 addUser 给出“CSRF 验证失败。请求中止”
我尝试了什么:
- @csrf_exempt 的观看次数。 - POST 相同的错误没有变化
- 将 X-CSRF-Token - 放入 POST Header - POST 没有变化同样的错误
非常感谢对此的帮助。我已经读过:
感谢您的回复。我了解了以下有关 CSRF、Django 和 Chrome Advanced Rest API Client 的内容。
一个。 CSRF - Cross Site Request Forgery 是一种专门保护恶意交易的方法 POST,PUT,DELETE 在客户端和服务器之间经过身份验证的连接上。
b。 Django 允许使用 CSRF 令牌进行 GET,但对于任何 POST、PUT 或 DELETE 都会失败。
c。要在 GET 的响应中获取 CSRF 令牌,可以使用 @ensure_csrf_cookie 这将确保响应具有 CSRF 令牌。
d。对于 Chrome 的高级 REST 客户端中的 POST,必须使用 X-CSRFTOKEN 和从 GET 命令的响应中获取的令牌。
我正在使用服务器:Django、Gunicorn、ngnix、postgresql
Client: Chrome Advanced Rest Client
views.py
from django.views.decorators.csrf import csrf_exempt, **ensure_csrf_cookie** # Newly added
from django.http import HttpResponse
**@ensure_csrf_cookie** # newly added
def hello(request):
return HttpResponse("Hello world")
def hi(request):
return HttpResponse("Hi World")
def display_meta(request):
values = request.META.items()
values.sort()
html = []
for k, v in values:
html.append('<tr><td>%s</td><td>%s</td></tr>' % (k, v))
return HttpResponse('<table>%s</table>' % '\n'.join(html))
def addUser(request):
if request.method == 'POST':
# Convert JSON to python objects and
# store into the DB
print 'Raw Json "%s"' % request.body
#return HttpResponse("%s" %request.body)
return HttpResponse("Thank God")
url.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
from requests import hello, hi, addUser, display_meta
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'testProject.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^hello/$', hello),
url(r'^hi/$', hi),
url(r'^admin/', include(admin.site.urls)),
url(r'^addPatient/$', addUser),
url(r'^displaymeta/$', display_meta),
)
manage.py
# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'dbTransactions',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
27,18 35%
来自 Advance Rest 客户:
a) GET to hi 工作正常没有错误 b) POST 到 addUser 给出“CSRF 验证失败。请求中止”
我尝试了什么:
- @csrf_exempt 的观看次数。 - POST 相同的错误没有变化
- 将 X-CSRF-Token - 放入 POST Header - POST 没有变化同样的错误
非常感谢对此的帮助。我已经读过:
感谢您的回复。我了解了以下有关 CSRF、Django 和 Chrome Advanced Rest API Client 的内容。
一个。 CSRF - Cross Site Request Forgery 是一种专门保护恶意交易的方法 POST,PUT,DELETE 在客户端和服务器之间经过身份验证的连接上。
b。 Django 允许使用 CSRF 令牌进行 GET,但对于任何 POST、PUT 或 DELETE 都会失败。
c。要在 GET 的响应中获取 CSRF 令牌,可以使用 @ensure_csrf_cookie 这将确保响应具有 CSRF 令牌。
d。对于 Chrome 的高级 REST 客户端中的 POST,必须使用 X-CSRFTOKEN 和从 GET 命令的响应中获取的令牌。