tastypie如何处理comlex url?

时间:2014-11-12 06:18:02

标签: python django tastypie

Tastypie可以为简单的资源网址自动生成urlpattern。

例如,/user/1//group/2/,我只需要定义UserResource和GroupResource

但是如果我有像/group/2/user/这样的API网址,说我想要检索第2组中的所有用户该怎么办。

tastypie有解决方案吗?

1 个答案:

答案 0 :(得分:1)

您可以使用tastypie.Resource.prepend_urls方法:

from django.conf.urls import url
from tastypie.utils import trailing_slash

class MyResource(Resource):
    def prepend_urls(self):
        return [
            url(r"^(?P<resource_name>%s)/(?P<%s>.*?)/user%s$" % (self._meta.resource_name, self._meta.detail_uri_name, trailing_slash()), self.wrap_view('group_user'), name="api_group_user"),
        ]

    def group_user(self, request, **kwargs):
        # Your API view.
        return self.create_response(request, {})

我通常会创建一个快捷方法,即那些冗长,丑陋的网址:

def create_detail_url(url_string, view_method_name, view_name):
    url_string = r"^(?P<resource_name>%s)/(?P<%s>.*?)" + url_string + r"%s$"
    url_string = url_string % (self._meta.resource_name, self._meta.detail_uri_name, trailing_slash())
    return url(url_string, self.wrap_view(view_method_name), name="api_" + view_name)

这使得prepend_urls方法看起来像这样:

def prepend_urls(self):
    return [
        create_detail_url(r"/user", "group_user", "group_user"),
    ]