2014-04-02 59 views
6

當使用Django REST框架嘗試POST到簡單的測試應用程序時,我收到錯誤「未設置CSRF cookie」。我用Django 1.4和Django 1.6.2試了一下。我正在使用Django REST框架v 2.3.13。爲什麼POST POST到Django REST框架時會得到「CSRF cookie未設置」?

我已經嘗試使用@csrf_exempt裝飾器,但它沒有幫助。

這是一個非常簡單的應用程序,沒有用戶註冊/登錄等

任何想法,爲什麼我得到這個錯誤?

更新:我已更新我的urls.py,如下所示,它現在正在工作!

這裏是我的代碼:

urls.py

from django.conf.urls import patterns, url 

from quickstart import views 

urlpatterns = patterns('', 
    url(r'^api_add/$', views.api_add, name='api_add'), 
) 

views.py

from rest_framework import status 
from rest_framework.decorators import api_view 
from rest_framework.response import Response 

@api_view(['POST']) 
def api_add(request): 
    return Response({"test": 'abc'}) 

settings.py

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles',            
    'rest_framework', 
) 

post.sh

curl -X POST -H "Content-Type: application/json" -d ' 
{ 
    "name": "Manager", 
    "description": "someone who manages" 
}' http://127.0.0.1:8000/api_add/            

回答

5

使用@csrf_exempt -decorator:

from django.views.decorators.csrf import csrf_exempt 

@api_view(['POST']) 
@csrf_exempt 
def api_add(request): 
    return Response({"test": 'abc'}) 

更新: 如果你從來沒有需要csrf -checks,刪除中間件。請在settings.py中搜索MIDDLEWARE_CLASSES並刪除'django.middleware.csrf.CsrfViewMiddleware',

+0

在發佈我的問題之前,我已經嘗試過。我應該說。我仍然得到同樣的錯誤。 – smithy

+0

我更新了我的答案。這是一個解決方案嗎? – tjati

+2

我不想關閉CSRF保護,因爲我會讓一些用戶通過網絡瀏覽器發佈表單,對於他們我希望獲得CSRF保護。我設法通過更新我的urls.py來得到它的工作... – smithy

1

我解決了這個是這樣的:

@api_view(['POST']) 
@csrf_exempt 
def add(request): 
    .... 

到:

@csrf_exempt 
@api_view(['POST']) 
def add(request): 
    ..... 
相關問題