Django tastypie寄存器问题

Django tastypie寄存器问题,django,tastypie,Django,Tastypie,刚从Django TastyPie开始使用JSON公开数据。 尝试使用tastypi.Api为url.py 中给出的示例 不能开箱即用 我的url.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(PurchaseRe

刚从Django TastyPie开始使用JSON公开数据。 尝试使用tastypi.Api为
url.py

中给出的示例 不能开箱即用

我的
url.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'
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()
urlpatterns = patterns('', (r'^api/',include(DataResoure().urls)),
                       )
models.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'
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()
urlpatterns = patterns('', (r'^api/',include(DataResoure().urls)),
                       )
最后,当我尝试时,错误:

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

未找到页面(404) 请求方法:获取 请求URL:http://localhost:8000/api/data/1/?format=json 使用URLconf Django尝试了以下URL模式,顺序如下: ^管理员/ ^(?P)/$[name='api\u顶级'] ^(?P)/ ^(?P)/ 当前URL api/data/1/与其中任何一个都不匹配。 但是如果我只在
url.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'
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()
urlpatterns = patterns('', (r'^api/',include(DataResoure().urls)),
                       )

当我们试图用
api.register(…)
将事物绑定在一起时,这里的问题是什么?

我们总是指定api\u名称和资源名称。像

注册文件

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.py

urlpatterns = patterns('',
    url(r'^api/', include(public_api.urls)),
    url(r'^api/', include(private_api.urls)),
)
我们得到的网址是:

{资源名称}

{资源名称}


我想警告你,tastypie显示了非常糟糕的生产力,并且包含一些严重的问题,这可能会导致数据丢失,在它开始正常工作之前,我们做了很多猴子补丁。目前,我们正在转向我们自己的框架。我强烈建议您使用更小的活塞,但它也不是万能的。

谢谢您的评论。您遇到过什么样的问题?是安全漏洞还是性能问题。请详细说明…这将帮助我做出决定…并可能帮助其他想要使用此功能的人。性能问题非常严重,序列化非常缓慢。保存大量的模型非常需要数据库。发送模型的PUT和POST可能会导致数据丢失。与相关型号(ForeignKey和M2M)的合作非常混乱。如果没有代码复制,很难禁止保存相关模型。嵌套资源很难使用。没有现成的文件上传支持。创建多个模型时,不会返回位置标头。可能是我忘了什么。@asdasd:关于您在tastype中指出的问题,您是否有关于这些问题在什么情况下发生的更多详细信息,或者在他们的github repo中有相应问题的链接?