0

Python で jsonrpclib を使用していくつかの API を実装した後、それらを Django Framework プロジェクト内に移行する必要があります。私は Django と Piston/tastypie の初心者ですが、Python アプリで jsonrpc/xmlrpc ライブラリを使用した経験があります。

これまで、リクエストを処理して ServiceClass のメソッドを呼び出す jsonrpc サーバーのレジスタに接続された ServiceClass を使用して、いくつかのモジュールを開発してきました。

クラスがレジスタにアタッチされると、ServiceClass の新しいインスタンスが作成され、すべての初期データが読み込まれてメモリに保持されるため、jsonrpc を介して呼び出されるすべてのメソッドは、そのインスタンスの内部値にアクセスできます。

今、私は Django で Piston または Tastypie を使って同じことをしようとしています。このリンクhttp://www.robertshady.com/content/creating-very-basic-api-using-python-django-and-piston およびその他のリソースをたどりましたが、読んだすべてのドキュメントは明確で、正しい方法を示していますそれを操作するには:

  • url.py を変更して、「/api/」などのリクエストを特定のハンドラーにマップします。
  • API アプリケーションに handler.py を追加し、Piston/Tastypie の BaseHandler を拡張します。

したがって、BaseHandler を拡張する Handler のインスタンスを作成するときに、handler.py 内で ServiceClass のインスタンスを作成する (データを初期化し、メソッドを提供する) ことが、Django と API を操作する正しい方法であるかどうか疑問に思っています。この Handler クラスは、サーバーの起動時に 1 回インスタンス化されますか? ServiceClass が Model に依存してデータをロードするとどうなりますか?

新しいリクエストが /api/ アプリケーションに到着するたびに、フレームワークがクラ​​スをインスタンス化するのを避けたいです。

おすすめを教えていただけると嬉しいです。よろしくお願いします。

4

1 に答える 1

1

特にピストンの場合...インスタンスの観点からハンドラーを実際に使用するべきではありません。これは、クラス属性を使用して設定したメタクラスに似ています。これらの属性は、ハンドラーがバインドされるモデルを制御します。また、表示するフィールドやサポートするメソッド。

通常、リクエストはいずれかのメソッドに入り、その後、孤立した状態として、必要に応じてリクエストを処理します。共有リソースを使用する必要がある場合、またはクエリにモデルを使用する必要がある場合、その部分はユーザー次第であり、インポートされたリソースから共有されます。モデルが必要だと言ったので、それをクラス属性としてハンドラーにバインドしてからクエリを実行します。ハンドラーに実際に状態を保存するべきではありません。

于 2012-03-07T17:09:17.043 に答える