1

私は現在、2つのアプリでtastypieを使用しています。これらの各アプリには、グループと呼ばれるモデルがあります。それらは非常に異なって動作し、唯一の類似点は「グループ」という名前です。

どちらか一方のアプリだけがurlsファイルに追加されると、それは魅力のように機能します。ただし、両方のアプリを追加するとすぐに名前が衝突し、get_resource_uri()メソッドが間違った文字列を返します。ここにいくつかのコードがあります:

urls.py

from myapp1.resources import GroupResource as gr_a
from myapp2.resources import GroupResource as gr_b

myapp1_api = Api(api_name='1.0')
myapp1_api.register(gr_a())

myapp2_api = Api(api_name='1.0')
myapp2_api.register(gr_b())

tastypieリポジトリの現在のapi.pyファイルの37行目に、次のコードが表示されます。

if resource_name is None:
    raise ImproperlyConfigured("Resource %r must define a 'resource_name'." % resource)

 self._registry[resource_name] = resource

私のグループリソースは両方とも'group'のresource_nameを持っているので、別々のURLで登録されていても、それらは互いに重なり合って登録されます。実際のリソース名を変更する以外に、この名前の衝突を回避する方法はありますか?

更新 URIは次のようになります。

/myapp1/1.0/group/
/myapp2/1.0/group/

理想的には、myapp1とmyapp2がお互いについて知らないようにします(つまり、Groupクラスは区別されます)。この回避策は、myapp2.Groupをmyapp2.MyGroupに変更することです(名前の衝突を避けるため)が、実際にはそれほどエレガントではありません。

4

1 に答える 1

0

デフォルトの名前に満足していたので、すべてのリソースでresource_nameを空白にしました。また、/ myapp / 1.0 / myapp / group /ではなく、/ myapp / 1.0 /group/などのURLが必要でした。

私が今やったことは、すべてのresource_name属性を「myapp / group」の形式に変更し、それらすべてを空のURLにバインドすることです。これにより、リソースに名前の衝突がないことを確認しながら、/ 1.0 / myapp /group/などの優れた機能が得られました。

于 2012-06-21T18:12:13.663 に答える