2012-07-02 4 views
1

Я пытаюсь создать веб-сервис в Django. По какой-то причине он работает в запросе GET, но не как POST (это мое требование). У меня есть ниже URL:Django webservice для данных POST

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') 

Everytime Я посылаю запрос GET, я получая error (что правильно), но каждый раз, когда я отправляю тот же URL-адрес, что и POST, я получаю сообщение об ошибке HTTP 500. Здесь что-то не хватает?

EDIT

Журнал ошибок в терминале имеется следующее: [02/Jul/2012 19:13:57] "POST /rest/user/hi/hi HTTP/1.1" 500 61994

Однако, когда я посылаю ту же команду, как GET, я не получаю никаких ошибок ... который очень странно.

EDIT 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? Извините, попытался найти это, но есть ли способ обойти CSRF для запросов RESTful webservice?

+0

Журнал ошибок говорит ...? –

+0

Я видел, как это случалось раньше для аналогичной ситуации ... он просил CSRF-защиту в POST, работает ли она только в 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, вероятно, не безопасно ... но будет работать.