[解決済み] 例外です。リクエストのデータストリームから読み込んだ後、ボディにアクセスすることはできません。
質問
Django 1.5 からは、生の投稿データは request.body でアクセスできるようになりました。
私のアプリケーションでは、フォーム経由でデータが送信されることもあれば、生データ(例えばjson)が送信されることもあります。 このような失敗しない関数を書く方法はないでしょうか?
def get_post_var(request, name):
result = request.POST.get(name)
if result:
return result
post_body = dict(urlparse.parse_qsl(request.body))
result = post_body.get(name)
if result:
return result
return None
解決方法は?
エラー
You cannot access body after reading from request's data stream
は、(1) リクエストメソッドが POST で、(2) そのリクエストの POST 辞書がミドルウェアでアクセスされた場合、いずれかのリクエストでトリガーされます。
process_request
または
process_view
と(3)ビュー機能内で
request.body
がアクセスされる。バグの本当の原因は(2)であるにもかかわらず、エラーが発生するのは(3)である。
このエラーを解決するためには、ミドルウェアのどこで
request.POST
にアクセスしないように修正します。
request.POST
を追加しました。
Djangoのドキュメントには、以下のように書かれています。
ミドルウェアは
request.POST
これは、その勧告を無視した結果の一つです。
こちらもご覧ください この問題についてのDjangoのチケット このノートも含まれています。
<ブロッククオート[request.POSTをヒットさせるミドルウェアは、(通常は)そのように考えるべきでしょう。 バグです。これは、ビューがカスタムアップロードを設定できないことを意味します。 ハンドラ、リクエストボディのカスタムパースの実行、あるいは は、ファイルアップロードを受け入れる前にパーミッションチェックを行います。
関連
-
[解決済み】コマンド 'git' が見つからない - windows
-
[解決済み] ImportError: 'django.utils' から名前 'six' をインポートできません。
-
[解決済み] Django-Rest-Framework ルータ登録
-
MultiValueDictKeyError at/add/ エラー解決
-
djangoでログ出力を利用する
-
Djangoにおけるrenderとrender_to_responseの違いについて
-
[解決済み] `SyntaxError: nonlocal 'topics_with_log_tag' のバインディングが見つからない` けど、バインディングはされている
-
[解決済み] http://127.0.0.1:8000/ には接続できるのに、http://192.168.1.6/ には接続できないのはなぜですか?
-
[解決済み] Djangoにおける{% %}と{{ }}について
-
[解決済み】Djangoでメールテンプレートを作成する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ImportError: 'django.utils' から名前 'six' をインポートできません。
-
django.db.utils.OperationalError の解決策です。(2003, "Can't connect to MySQL server") というエラーが発生します。
-
django queryset values&values_list
-
Djangoにおけるrenderとrender_to_responseの違いについて
-
エラーの場合 環境変数 DJANGO_SETTINGS_MODULE を定義する必要があります ... 問題解決
-
[解決済み] `SyntaxError: nonlocal 'topics_with_log_tag' のバインディングが見つからない` けど、バインディングはされている
-
[解決済み] ユーザー認証の方法
-
[解決済み】djangoでResponse Forbiddenを発生させるには?
-
[解決済み】reverse()とは何ですか?)
-
[解決済み] [Djangoで「一括更新」する方法とは?