用于POST数据的Django Web服务

时间:2012-07-02 23:10:42

标签: django post

我正在尝试在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服务请求?

1 个答案:

答案 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可能不安全......但是会有效。