2011-12-29 186 views
3

剛剛用Django TastyPie開始使用JSON公開數據。 試圖把使用tastypie.Api資源一起urls.pytastypie註冊問題

http://django-tastypie.readthedocs.org/en/latest/tutorial.html#creating-resources 不開箱的工作給出的例子。

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使用:

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

什麼是這裏的問題,當我們試圖用api.register(...)綁在一起的東西呢?

回答

2

我們總是指定api_name和資源名稱。像

註冊文件

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()) 

urls.py

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

,我們得到網址:

http://www.mysite.com/api/public/ {} RESOURCE_NAME

http://www.mysite.com/api/private/ {} RESOURCE_NAME

我想警告你,tastypie顯示出很差的生產力,並且包含一些可能導致數據丟失的嚴重問題,我們在開始工作之前做了很多猴子修補。目前我們正在轉向我們自己的框架。我強烈建議你使用像活塞一樣小的東西,但它也不是一顆銀色的子彈。

+0

感謝您的意見。你有什麼樣的問題,你面對tastypie?是安全漏洞還是性能問題?請您詳細說明......這將有助於我做出決定......並可幫助其他想要使用此功能的人。 – user1102171 2012-01-02 14:09:13

+0

性能問題很重要,序列化非常慢。節省大量的模型是非常密集的數據庫。 發送模型的PUT和POST可能會導致數據丟失。 使用相關模型(ForeignKey和M2M)很麻煩。沒有代碼重複,很難禁止保存相關模型。 嵌套資源很難使用。 開箱即不支持文件上傳。 創建多個模型時根本不返回位置標題。 可能我忘記了一些東西。 – Ilya 2012-01-03 12:06:19

+0

我回答你的問題嗎? – Ilya 2012-01-05 00:40:01