1

DjangoでWebサービスを作成しようとしています。何らかの理由で、GETリクエストでは機能していますが、POSTとしては機能していません(これは私の要件です)。私は以下のURLを持っています:

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を送信するたびに、HTTP500エラーが発生します。ここに欠けているものはありますか?

編集

ターミナルのエラーログには次のものがあります。 [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サービスリクエストに対してこれをどのように処理するのですか?申し訳ありませんが、これを検索してみましたが、RESTful WebサービスリクエストのCSRFを回避する方法はありますか?

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 に答える