2013-05-02 71 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']