Tastypie可以为简单的资源网址自动生成urlpattern。
例如,/user/1/
,/group/2/
,我只需要定义UserResource和GroupResource
但是如果我有像/group/2/user/
这样的API网址,说我想要检索第2组中的所有用户该怎么办。
tastypie有解决方案吗?
答案 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"),
]