2011-12-29 7 views
3

Django TastyPieを使い、JSONを使用してデータを公開しました。 はurls.pytastypieレジスタの問題

http://django-tastypie.readthedocs.org/en/latest/tutorial.html#creating-resources は、箱から出して動作しないで与えられた例のために一緒にtastypie.Apiを使用してリソースを結ぶしようとしています。

マイurls.pyエントリ:

#now for the api 
from tserver.api import PurchaseResource,DataResource 

#combine several APIs 
from tastypie.api import Api 

api = Api(api_name='') 
api.register(PurchaseResource(),canonical=True) 
api.register(DataResource(),canonical=True) 

urlpatterns = patterns('', (r'^api/',include(api.urls)), 
        ) 

api.py

#!/bin/env python 

from tastypie.resources import ModelResource 
from tastypie import fields 
from tserver.models import Purchase,Data 

class DataResource(ModelResource): 
    class Meta: 
     queryset = Data.objects.all() 


class PurchaseResource(ModelResource): 
    Info = fields.ForeignKey(DataResource,'data') 
    class Meta: 
     queryset = Purchase.objects.all() 
     resource_name = 'purchase' 

models.py

class Data(models.Model): 
    tagID = models.CharField(max_length=40) 
    dtime = models.DateTimeField() 
    vcardf = models.CharField(max_length = 600) 


class Purchase(models.Model): 
    Info  = models.ForeignKey('Data',unique=True) 
    payment_method = models.CharField(max_length=20,choices=PAYMENT_METHOD) 
    TotalAmount = models.DecimalField(max_digits = 20, decimal_places=2) 
    TotalDiscount = models.DecimalField(max_digits = 20, decimal_places=2) 
    valid_upto  = models.DateTimeField() 

と最終的に私はそれを試して、エラー:

http://localhost:8000/api/data/1/?format=json 

での結果:

Page not found (404) 
Request Method:  GET 
Request URL: http://localhost:8000/api/data/1/?format=json 

Using the URLconf Django tried these URL patterns, in this order: 

^admin/ 
^(?P<api_name>)/$ [name='api__top_level'] 
^(?P<api_name>)/ 
^(?P<api_name>)/ 

The current URL, api/data/1/, didn't match any of these. 

しかし、私はちょうどurls.pyで使用する場合は、この問題はありません。私たちはapi.register(...)で物事を結びつけるしようとすると、

urlpatterns = patterns('', (r'^api/',include(DataResoure().urls)), 
         ) 

ここでの問題は何ですか?

答えて

2

常にapi_nameとリソース名を指定します。

urlpatterns = patterns('', 
    url(r'^api/', include(public_api.urls)), 
    url(r'^api/', include(private_api.urls)), 
) 

と我々が得るurls.py

public_api = Api(api_name='public') 
public_api.register(BookingPostResource()) 
public_api.register(SearchResource()) 

private_api = Api(api_name='private') 
private_api.register(BookingPostResource()) 
private_api.register(SearchResource()) 

登録ファイル

ようなURL:

http://www.mysite.com/api/public/ {リソース名}

http://www.mysite.com/api/private/ {リソース名}

私はあなたに警告したい、tastypieは非常に悪い生産性を示し、データ損失につながる可能性のある深刻な問題が含まれています。現在、私たちは独自のフレームワークに移行しています。私は強くピストンのようなものを使うことを強く勧めますが、銀の弾丸でもありません。

+0

ご意見ありがとうございます。 tastypieに直面した問題は何ですか?セキュリティ違反ですか?それともパフォーマンスの問題ですか?私の決定を助けることになると、これを使用したい他の人を助けるかもしれない...詳細を教えてください。 – user1102171

+0

パフォーマンスの問題が顕著で、シリアル化は非常に遅いです。大量のモデルを保存することは非常に集中的です。 モデルのPUTとPOSTを送信するとデータが失われる可能性があります。 関連するモデル(ForeignKeyとM2M)を扱うのは面倒です。コードを重複させずに関連するモデルの保存を禁止するのは難しいです。 ネストされたリソースは使いにくいです。 ファイルのアップロードはサポートされていません。 複数のモデルを作成する場合ロケーションヘッダは一切返されません。 私は何かを忘れているかもしれません。 – Ilya

+0

私はあなたの質問に答えましたか? – Ilya