在tastypie我的网址:/ api/v1/course/1 /?format = json给出以下json:
{
created_on: "2012-02-27T08:00:54",
description: "this is course 1",
id: "1",
resource_uri: "/api/v1/course/1/",
subjects: [
"/api/v1/subject/1/",
"/api/v1/subject/2/"
],
title: "Course 1"
}
Run Code Online (Sandbox Code Playgroud)
我想做的事情如下:
/api/v1/course/1/subjects/?format=json
Run Code Online (Sandbox Code Playgroud)
仅获取给定课程的科目列表.这可能吗?
如果有人阅读Tastypie-Mailinglist:我没有在那里得到答案,很抱歉在这里交叉.
在Tastypie中,我更改了Resource的URL模式,因为我使用的是另一个键而不是PK.当我访问资源时,这工作正常.现在我想将此资源嵌套到父资源中,但嵌套的资源包含带有PK的URI,而不是我的自定义密钥.我学到的是,在我的情况下,我必须改变孩子的get_resource_uri.
我孩子的资源(NamespacedResource)中的方法如下所示:
def get_resource_uri(self, bundle_or_obj):
obj = bundle_or_obj.obj if isinstance(bundle_or_obj, Bundle) else bundle_or_obj
kwargs={
'resource_name': self._meta.resource_name,
'custom_id': obj.custom_id
}
return self._build_reverse_url('api_dispatch_detail', kwargs=kwargs)
Run Code Online (Sandbox Code Playgroud)
孩子的网址覆盖方法是这样的:
def override_urls(self):
return [
url(r"^(?P<resource_name>%s)/(?P<custom_id>[-_\w\d]+)%s$" % (
self._meta.resource_name,
trailing_slash()
),
self.wrap_view('dispatch_detail'),
name="api_dispatch_detail"
),
]
Run Code Online (Sandbox Code Playgroud)
但是应用程序无法反转URL.我收到此错误:
Reverse for 'api_dispatch_detail' with arguments '()' and keyword arguments '{'custom_id': u'3_ee5-4423', 'resource_name': 'myresource'} not found.
Run Code Online (Sandbox Code Playgroud)
如何正确反转URL?
提前致谢.
我需要存储对象所做更改的完整历史记录.我发现django-simple-history非常吸引人,但它不适用于django-tastypie.如果我使用PUT将数据发送到API(更新对象),则对象会更新,但不会更新历史记录.如果我通过'./manage.py shell'手动更改对象,一切正常.它似乎是tastypie绕过信号或其他东西.
任何想法如何让我按预期工作?
我正在使用django-tastypie编写 API 。我有两个自定义权限问题,希望django-guardian能够解决。
我有两个用户组临床医生和患者。临床医生应该能够访问仅属于其患者的对象,并且患者应该只能访问他们自己创建的对象。
我的代码如下:
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'auth/user'
excludes = ['email', 'password', 'is_superuser']
class BlogPostResource(ModelResource):
author = fields.ToOneField(UserResource, 'author', full=True)
class Meta:
queryset = BlogPost.objects.all()
resource_name = 'posts'
allowed_methods = ["get", "post"]
# Add it here.
authentication = BasicAuthentication()
authorization = DjangoAuthorization()
filtering = {
'author': ALL_WITH_RELATIONS,
}
Run Code Online (Sandbox Code Playgroud)
我如何使用权限来限制对此的访问BlogPostResource?
我目前正在开展一个需要Api的项目,我选择Tastypie并实施以下内容.我想在我的代码中使用tastypie的默认功能,如ApiKeyAuthentication,DjangoAuthorization等...
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()`enter code here`
fields = ['first_name', 'last_name', 'email']
allowed_methods = ['get', 'post']
resource_name = 'user'
def override_urls(self):
return [
url(r"^(?P<resource_name>%s)/login%s$" %
(self._meta.resource_name, trailing_slash()),
self.wrap_view('login'), name="api_login"),
url(r'^(?P<resource_name>%s)/logout%s$' %
(self._meta.resource_name, trailing_slash()),
self.wrap_view('logout'), name='api_logout'),
]
def login(self, request, **kwargs):
self.method_check(request, allowed=['post'])
data = self.deserialize(request, request.raw_post_data,format=request.META.get('CONTENT_TYPE', 'application/json'))
username = data.get('username', '')
password = data.get('password', '')
user = authenticate(username=username, password=password)
if user:
if user.is_active:
login(request, user)
return self.create_response(request, {
'success': True
})
else:
return self.create_response(request, {
'success': False, …Run Code Online (Sandbox Code Playgroud) 第一个型号:
class Profile(models.Model):
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[
validators.RegexValidator(
r'^[\w.@+-]+$',
_('Enter a valid username. This value may contain only '
'letters, numbers ' 'and @/./+/-/_ characters.')
),
],
error_messages={
'unique': _("A user with that username already exists."),
},
)
password = models.CharField(max_length=12, default='123456')
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=30, blank=True)
email = models.EmailField(_('email address'), blank=True)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
Run Code Online (Sandbox Code Playgroud)
第二种模式:
class UserEbiz(models.Model): …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一个ApiKey认证的POST请求发送到tastypie API
class Thing(models.Model):
name = models.TextField()
def __unicode__(self):
return u'%s'%self.name
Run Code Online (Sandbox Code Playgroud)
class ThingResource(ModelResource):
class Meta:
queryset = Thing.objects.all()
resource_name="thing"
authentication = ApiKeyAuthentication()
authorization = DjangoAuthorization()
Run Code Online (Sandbox Code Playgroud)
from django.conf.urls.defaults import patterns, include, url
from tastypie.api import Api
from myapp.api import ThingResource
mobile_api = Api(api_name='mobile')
mobile_api.register(ThingResource())
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
(r'^api/', include(mobile_api.urls)),
)
Run Code Online (Sandbox Code Playgroud)
curl --dump-header - -H "Accept: application/json" -H "Content-Type: application/json" -d"username=vikingosegundo" -d"api_key=12345" -X POST --data "{\"name\":\"arrrg\"}" http://localhost:8000/api/mobile/thing/
Run Code Online (Sandbox Code Playgroud)
{"error_message": …Run Code Online (Sandbox Code Playgroud) 我玩重型客户端应用程序.
想象一下,我有这个模型:
class Category(models.Model):
name = models.CharField(max_length=30)
color = models.CharField(max_length=9)
Run Code Online (Sandbox Code Playgroud)
我使用knockoutjs(但我想这并不重要).我有一个列表(observableArray)与类别,我想创建一个新类别.
我创建了一个新对象,然后将其推送到列表中.到现在为止还挺好.
把它保存在我的数据库上怎么样?因为我正在使用tastypie,我可以对'/ api/v1/category /'进行POST,并且新的类别在DB上.
好的,但是......我没有刷新页面,所以...如果我想更新新类别,我该怎么做?
我的意思是,当我检索类别时,我可以保存ID,这样我就可以设置'/ api/v1/category/id'并保存更改,但是...当我创建一个新类别时,数据库分配它的ID,但我的JavaScript还不知道该ID.
换句话说,工作流程类似于:
make get>将现有对象(及其ID)推送到列表>创建新类别>将其推送到列表>保存现有类别(该类别在javacript上没有id)>编辑类别>我如何保存更改?
所以,我的问题是,共同的道路是什么?我想过发送类别并以某种方式检索id并将其分配给我在js上的对象以便以后能够修改它.问题是对服务器进行POST不会返回任何内容.
在过去,我做了类似的事情,通过post发送对象,保存,检索并发送回来,在success方法中检索id并将其分配给js对象.
谢谢!
我尝试使用prepend_url()类似于tastypie cookbook中的搜索示例的功能.由于某种原因,浏览器只返回404而没有其他事情发生......
如何序列化django-mptt树Tastypie?
我想用django-mptt的cache_tree_children().我尝试过应用不同的Tastypie钩子,但它会抛出一个错误.