2013-05-02 72 views

回答

1

您是否在寻找flowchart?这真的取决于,当你想要对象

在脱水周期内,您可以通过简单的捆绑来访问它。

class MyResource(Resource): 
    # fields etc. 

    def dehydrate(self, bundle): 
     # Include the request IP in the bundle if the object has an attribute value 
     if bundle.obj.user: 
      bundle.data['request_ip'] = bundle.request.META.get('REMOTE_ADDR') 
     return bundle 

如果要手动检索由API URL的对象,因为通过默认的ORM方案,您可以简单地穿越塞或主键(或者不管它是什么)的模式?

2

Tastypie的Resource类(这是ModelResource的子类)提供了一个方法get_via_uri(uri, request)。请注意,他拨打apply_authorization_limits(request, object_list),如果您没有收到预期的结果,请确保以通过您的授权的方式编辑您的请求。

一个不好的选择是使用正则表达式从你的url中提取id,然后用它来过滤所有对象的列表。这是我肮脏的黑客直到我get_via_uri工作,我不建议使用这个。 ;)

id_regex = re.compile("/(\d+)/$") 
object_id = id_regex.findall(your_url)[0] 
your_object = filter(lambda x: x.id == int(object_id),YourResource().get_object_list(request))[0] 
2

您可以使用get_via_uri,但作为@Zakum提到,它将应用您可能不想要的授权。所以挖掘到源为这个方法我们可以看到,我们可以解析URI是这样的:

from django.core.urlresolvers import resolve, get_script_prefix 

def get_pk_from_uri(uri): 
    prefix = get_script_prefix() 
    chomped_uri = uri 

    if prefix and chomped_uri.startswith(prefix): 
     chomped_uri = chomped_uri[len(prefix)-1:] 

    try: 
     view, args, kwargs = resolve(chomped_uri) 
    except Resolver404: 
     raise NotFound("The URL provided '%s' was not a link to a valid resource." % uri) 

    return kwargs['pk'] 

如果您的Django应用程序位于Web服务器的根目录(即get_script_prefix() == '/'),则可以简化这个到:

view, args, kwargs = resolve(uri) 
pk = kwargs['pk']