Django tastypie寄存器问题
刚从Django TastyPie开始使用JSON公开数据。 尝试使用tastypi.Api为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
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中有相应问题的链接?