1

我正在尝试在 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>

我的问题是......我如何处理这个 web 服务请求?抱歉,尝试搜索此内容,但有没有办法绕过 CSRF 处理 RESTful Web 服务请求?

4

1 回答 1

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可能不安全……但会起作用。

于 2012-07-02T23:28:35.670 回答