URLにPOSTすることは、それをGET、DELETE、またはPUTすることと同じではありません。これらのアクションは根本的に異なります。ただし、Djangoはディスパッチメカニズムでそれらを無視しているようです。基本的に、HTTP動詞を完全に無視するか、すべてのビューでこれを実行する必要があります。
def my_view(request, arg1, arg2):
if request.method == 'GET':
return get_view(request, arg1, arg2)
if request.method == 'POST':
return post_view(request, arg1, arg2)
return http.HttpResponseNotAllowed(['GET', 'POST'])
Webでこれについて見つけたいくつかの解決策(動詞ベースのディスパッチのこのスニペット、または動詞要件のこのデコレータ)は、明らかに単なる回避策であるため、あまりエレガントではありません。
CherryPyの状況は同じようです。これを正しく行うために私が知っている唯一のフレームワークは、web.pyとGoogleAppEngineです。
これは、Webフレームワークの重大な設計上の欠陥だと思います。誰か同意しますか?それとも、私が無視する理由/要件に基づいた意図的な決定ですか?