2012-07-02 40 views
1

我試圖在Django中創建一個Web服務。出於某種原因,它在GET請求中工作,但不是作爲POST(這是我的要求)。我有以下網址:用於POST數據的Django webservice

url(r'^rest/user/(.*)/(.*)/$', 'rest.views.user.user') 

因此,如果用戶是發送消息給/rest/user/ANY_CHARACTER/ANY_CHARACTER/,它會去以下功能:

def user(request, string1, string2): 
    if request.method == "POST": 
     return HttpResponse(string1 + ' ' + string2) 
    else: 
     return HttpResponse('error') 

每次我發送一個GET請求,我是得到error(這是正確的),但每次我發送相同的URL作爲POST,我得到HTTP 500錯誤。有什麼我在這裏失蹤?

編輯

錯誤日誌中的終端有以下幾點: [02/Jul/2012 19:13:57] "POST /rest/user/hi/hi HTTP/1.1" 500 61994

然而,當我發送相同的命令如GET,我沒有得到任何錯誤......這是很奇怪。

編輯1

我注意到下面的錯誤,當我發送POST請求,它適用於所有其他類型:

<p>Reason given for failure:</p> 
<pre> 
CSRF token missing or incorrect. 
</pre> 


<p>In general, this can occur when there is a genuine Cross Site Request Forgery, or when 
<a href='http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf'>Django's 
CSRF mechanism</a> has not been used correctly. For POST forms, you need to 
ensure:</p> 

我的問題是...我怎麼處理這對於webservice請求?抱歉,試圖尋找這個,但有沒有辦法繞過RESTful web服務請求的CSRF?

+0

錯誤日誌說...? –

+0

我之前看到過類似情況發生過這種情況......它在POST中要求提供CSRF保護,它是否僅在GET或POST以外的任何其他情況下工作? (即GET,PUT等) – KVISH

+0

是的..我只是嘗試PUT,它的工作。我從POST獲得的消息確實表示CSRF ......只是注意到了這一點。我會編輯錯誤。 – KVISH

回答

2

你可以這樣說:

from django.views.decorators.csrf import csrf_exempt, csrf_protect 

@csrf_exempt 
def user(request, string1, string2): 
    if request.method == "POST": 
     return HttpResponse(string1 + ' ' + string2) 
    else: 
     return HttpResponse('error') 

我要補充一點,csrf_exempt可能不是安全......但會奏效。