web-dev-qa-db-ja.com

Django raw_post_dataにアクセスできません

私はDjangoで奇妙なことを経験しています、これが私のviews.pyです:

def api(request):
    return HttpResponse("%s %s" % (request.method,request.raw_post_data))

今私はPOSTMAN(グーグルクロームのための小さなアプリ)でHTTP POSTを作ります。

POSTMANを設定して、rawフィールドに「test」を指定してPOSTリクエストを作成します。

Djangoは私に3つの異なるものを返します(ランダム):

いつかDjangoは 'GET'を返すときもあれば、まったく何もしないときもあります。

AttributeError at /
'WSGIRequest' object has no attribute 'raw_post_data'
Request Method: GET
Request URL:    https://api.mywebsiteurl.com/
Django Version: 1.6.2
Exception Type: AttributeError
Exception Value:    
'WSGIRequest' object has no attribute 'raw_post_data'
Exception Location: /home/spice_dj/spice/views.py in api, line 17
Python Executable:  /usr/bin/python
Python Version: 2.7.3
Python Path:    
['/usr/local/lib/python2.7/dist-packages/South-0.8.4-py2.7.Egg',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/home/spice_dj']
Server time:    Wed, 12 Mar 2014 22:51:11 -0400
  1. 明確にDjangoリクエストを行うと、なぜPOSTは 'GET'を返すのですか?

  2. なぜそのエラーが返されるのですか?

  3. Rawフィールドで設定した「テスト」が返されないのはなぜですか?

16
user2302807

Django 1.6の非推奨タイムライン によると:

1.4では、属性HttpRequest.raw_post_dataの名前がHttpRequest.bodyに変更されました。下位互換性は削除されます– HttpRequest.raw_post_dataは機能しなくなります。

動機は 関連チケット で説明されています:

request.raw_post_dataは悪い名前です。特にPOSTとは何の関係もありません。これは、HTTPリクエストの本体にすぎません。これはユーザーを混乱させ、DjangoはHTTPの仕組みを理解していないように見えます。名前をrequest.bodyに変更して、非推奨プロセスを開始する必要があります。

request.bodyを使用します:

def api(request):
    return HttpResponse("%s %s" % (request.method, request.body))

お役に立てば幸いです。

39
alecxe