問題タブ [django-rest-framework]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
django - Django:IDではなくユーザー名を表示する方法は?
次のシリアライザークラスがあります。
すべてのプロファイルを一覧表示すると、ユーザー フィールドにユーザー ID が表示されます。これを変更して user.username を表示するにはどうすればよいですか? 私は自分のモデルでこれをメタクラスに追加するだけであることを知っていますが、ユーザーモデル (Django の一部) は作成しませんでした。ユーザーを呼び出すときに、IDではなくユーザー名を表示するようにDjangoに指示するにはどうすればよいですか?
どうもありがとう。
django - Django:すべてのクエリセット オブジェクトでメソッドを実行する
以下が可能かどうか、また誰かがその方法を説明できるかどうかを知りたいです。Django REST フレームワークを使用しています
モデルがあり、そのモデルにはProductというクラスがあります。製品にはis_product_safe_for_userというメソッドがあります。ユーザー オブジェクトと自己 (製品) が必要です。
model.py
(上記の構文は無視してください。アイデアを提供するだけです)
私がやりたいのは、以下のようなすべてのクエリセットオブジェクトに対してメソッドを実行することですが、方法がわかりません...
1 つのオブジェクトだけでメソッドを実行したい場合もあります。
それとも、シリアライザに入れる必要がありますか? もしそうならどのように...
python - Django Rest Framework / Django のパフォーマンスの問題
私は現在、EC2 スモール インスタンス サーバーに Django-Rest-Framework を使用して Django をデプロイし、いくつかの Android アプリに一連の API を提供しています。
問題は、プロファイルしなければならない深刻なパフォーマンスの問題に直面していることです。1 つのリクエストのほとんどの時間が DRF のコア内で費やされていることがわかりました。
これを長い投稿にして申し訳ありませんが、何が起こっているのかについて適切な答えを得ることができるように、すべてを表示する必要があると思います. 先に進みましょう:
私のセットアップはnginx/uwsgiです。upstartを使用してuwsgiを実行する方法は次のとおりです。
次の API をリクエストするとします。
次のルールに一致します。
クラスベースのビューは次のとおりです。
シリアライザ クラス:
そして最後にクラスメソッド「get_most_viewed」(マネージャーメソッドではなくクラスメソッドを使用するのが間違っていることは知っています)
これらすべてからわかるように、指定されたビューにリダイレクトされ、MySQL からデータを取得し、シリアル化された結果を返すのは通常の要求です。通常の処理や複雑な処理はありません。
実行中:
これはキャッシュなしであることに注意してください。以下は頻繁にログに記録されます。
テスト中の負荷平均は最大 5 です。そして、ここに ab の結果があります:
まず第一に、毎秒 7 リクエストは非常に残念です。タイムアウト エラーによる 1700 件のリクエストの失敗も、ここで直面しているパフォーマンスの遅れによるものです。
正直に言うと。キャッシュなしで毎秒 60 ~ 70 のリクエストが予想されます。キャッシュがプロセスを高速化することは知っていますが、パフォーマンスの問題も隠してくれるので、キャッシュする前にこれを解決しようとしています。
次に、django-profiling を使用して vmware CentOS マシンでこれをプロファイリングすることにしました。リクエストに ?prof を追加すると、コール スタックが表示されます。
ご覧のとおり、ほとんどの時間は django ビューと DRF ビューに費やされています。
私がここで何か間違ったことをしている場合、誰かが指摘できますか? リクエストが遅いのはなぜですか?python / Djangoはスケーリングしますか? 私はそれを読みましたが、私が行っているような単純なDB読み取りおよびレンダリング操作で、1秒あたり何回のリクエストを期待する必要がありますか?
django - RestFrameworkシリアライザーメソッド
DjangoRESTFrameworkを使用する次のシリアライザーがあります。
これは私がこれまでに持っているものです...
serializer.py
urls.py
このコードスニペットにはいくつかの問題があります。
1)pram pk = 19はハードコーディングされているので、試してみたはずですがself.kwargs['profile_id'].
、kwargをメソッドに渡す方法がわからず、profile_idを機能させることができません。つまり、URLから取得できません。
2)このコードのいずれかをモデルに含める必要がありますか?モデルに追加しようとしましたが、引数を渡すことができます。
models.py すなわちメソッドクラス
mongodb - Django Rest Frameworkのシリアル化が失敗します:'MetaDict'オブジェクトに属性'pk'がありません
私はMongoDBでDjangoRestFrameworkを使用しており、MongoDBからドキュメントを取得し、それをjsonにシリアル化して、リクエストに応じて返送しようとしています。
私は次のようなデータベースモデルを持っています:
および対応するシリアライザー:
これらができたので、DBからドキュメントを取得したいと思います。そして、DjangoRestFrameworkを使用したシリアル化に関するチュートリアルに正確に従うようにしました。
これらの行を実行してシリアル化しようとすると、次のエラーが返されます。
理論的には、主キーが「_id」であるとシリアライザーのメタデータで宣言したので、うまくいくはずだと思います...誰かアドバイスを手伝ってもらえますか?
ありがとう
django - 入れ子になったオブジェクトの処理
Django REST フレームワークを使用して、次のシリアライザーを以下に示します。(ネストされた) 関連オブジェクト (ProductCatSerializer) を ProductSerializer に追加したいと考えています。私は次のことを試しました....
だから私がしたいのは、結果にネストされた関連カテゴリを表示する Products です。
ありがとうございました。
アップデート:
depth = 2 オプションを使用する(Nandeep Mali に感謝)ネストされた値を取得するようになりましたが、ID の使用のみが表示され、残りの json リクエストのように keyparis は表示されません (以下のカテゴリを参照)。そのほぼ正しい。
django - rest-framework での Django リストの逆シリアル化
RESTful Web サービスを実装しようとしています。投稿リクエストからのオブジェクトでリストを逆シリアル化しようとするまで、すべてがうまくいっていました。私のコードはこれです:
テストに使用するcurlコマンドは次のとおりです。
簡単な投稿でコードを(インデックスなしで)テストしましたが、正常に動作します。しかし、リストを投稿しようとするとできません。ただし、シェル ( python manage.py shell
) でコードを試した後、フレームワークのコードに TODO があることに気付きました。
コードに問題はありますか?使用できるアドバイスはありますか?最終バージョンでは、ユーザーは次のような文字列を投稿しますが、私は段階的に到達しようとしています:
リストを処理できれば、そのような json を扱えるようになります。
django - DjangoRESTフレームワークを使用してmany2manyに対処する方法
モデルの1つにmany2manyフィールドがあります。
これにより唯一のテーブルが作成されるため、モデルにマップしていません。
ただし、APIでこのテーブルへのPOSTを許可したいのですが、モデルには存在しないため、viewおよびSerialize.pyでは参照できません。これに対する推奨事項は何ですか?
python - 悪いDjango/uwsgiのパフォーマンス
私はnginxとuwsgiでdjangoアプリを実行しています。これが私がuwsgiを実行する方法です:
&nginx構成:
ここに問題があります。サーバーで「ab」(ApacheBenchmark)を実行すると、次の結果が得られます。
nginxバージョン:nginxバージョン:nginx / 1.2.6
uwsgiバージョン:1.4.5
500の同時実行レベルで実行中
ご覧のとおり...サーバー上のすべてのリクエストは、タイムアウトエラーまたは「クライアントが時期尚早に切断されました」または次のいずれかで失敗します。
私のアプリケーションについてもう少し詳しく説明します。基本的には、すべてのコンテンツを含むMySQLテーブルを反映するモデルのコレクションです。フロントエンドには、jsonコンテンツをクライアントに提供するdjango-rest-frameworkがあります。
django-profiling&django debugツールバーをインストールして、何が起こっているかを確認しました。django-profilingで、単一のリクエストを実行したときに得られるものは次のとおりです。
..等
ただし、django-debug-toolbarは次のように表示されます。
問題は、「top」が負荷平均が急速に上昇していることを示し、ローカルサーバーとネットワーク内のリモートマシンの両方で実行したapacheベンチマークが、1秒あたり多くのリクエストを処理していないことを示していることです。何が問題ですか?これは、コードをプロファイリングするときに到達できる範囲であるため、誰かが私がここで行っていることを指摘できれば幸いです。
編集(2013年2月23日):Andrew Alcockの回答に基づいて詳細を追加: 注意/回答が必要なポイントは(3)(3)MySQLで「グローバル変数の表示」を実行し、MySQLの構成を見つけましたmax_connections設定に151がありました。これは、uwsgiで開始しているワーカーにサービスを提供するのに十分です。
(3)(4)(2)私がプロファイリングしている単一のリクエストは、最も重いリクエストです。django-debug-toolbarに従って4つのクエリを実行します。何が起こるかというと、すべてのクエリはそれぞれ3.71、2.83、0.88、4.84ミリ秒で実行されます。
(4)ここで、メモリページングについて言及していますか?もしそうなら、私はどのように言うことができますか?
(5)16のワーカー、100の同時実行率、1000の要求で、負荷の平均は最大12になります。さまざまな数のワーカーでテストを実行しました(同時実行レベルは100)。
- 1人のワーカー、平均負荷〜1.85、19リクエスト/秒、リクエストあたりの時間:5229.520、0非2xx
- 2ワーカー、平均負荷〜1.5、19リクエスト/秒、リクエストあたりの時間:516.520、0非2xx
- 4ワーカー、負荷平均〜3、16リクエスト/秒、リクエストあたりの時間:5929.921、0非2xx
- 8ワーカー、負荷平均〜5、18リクエスト/秒、リクエストあたりの時間:5301.458、0非2xx
- 16ワーカー、平均負荷〜19、15リクエスト/秒、リクエストあたりの時間:6384.720、0非2xx
ご覧のとおり、ワーカーが多いほど、システムにかかる負荷も大きくなります。uwsgiのデーモンログを見ると、ワーカーの数を増やすと、ミリ秒単位の応答時間が長くなることがわかります。
16人のワーカーで、500の同時実行レベルの要求を実行すると、uwsgiはエラーのログ記録を開始します。
負荷も最大10になります。また、2xx以外の応答は1000のうち923であるため、テストにそれほど時間はかかりません。これが、ここでの応答がほとんど空であるため、非常に高速である理由です。これは、要約のポイント4への回答でもあります。
ここで私が直面しているのは、I / Oとネットワークに基づくOSレイテンシーであると仮定すると、これをスケールアップするために推奨されるアクションは何ですか?新しいハードウェア?より大きなサーバー?
ありがとう
django - M2M の Django REST メタ データが見つからない
私のjson出力では、m2mフィールドattribute_answersでキーと値のペアを取得していないようです。以下のコードを参照してください。attribute_answers フィールドに追加するにはどうすればよいですか?
json
シリアライザ