我正在尝试在Django中创建一个Web服务。出于某种原因,它在GET请求中工作,但不是作为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')
每次我发送GET请求时,我都会收到error
(这是正确的),但每次我发送与POST相同的URL时,我都会收到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>
我的问题是......如何处理网络服务请求?对不起,尝试搜索这个,但有没有办法绕过CSRF的RESTful Web服务请求?
答案 0 :(得分: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
可能不安全......但是会有效。