我想使用tastypie和一些略有不同的网址。我希望他们是这样的:
/ API / V1 /城市/伦敦/ make_default / API / V1 /城市/巴黎/ make_default / API / V1 /城市/新加坡/ remove_city
城市本身可以是我的数据库中城市表中的任何城市,资源名称是我想要执行的方法。每种方法都有自己的资源。在tastypie中,网址似乎给我带来了一些麻烦。 prepend_urls,我一直给我301重定向。
class CityResource(Resource):
class Meta
def make_default(self, request, city_name):
return super(ViewTemplateResource, self).get_object_list(request)\
.filter(name=city_name, client=request.user).update(default=True)
def prepend_urls(self):
return [
url(r"^city/(?P<city_id>[\w\d_.-]+)/(?P<resource_name>%s)/$" % self._meta.resource_name,
self.wrap_view('make_default')),
]
答案 0 :(得分:0)
所以要解决这个问题,我的做法有点不同:
首先,环绕视图避开了正常的tastypie路径而不是添加它:
def dispatch_default(self, request, city_name, **kwargs):
self.queryset = City.objects.filter(name=city_name, client=user)
return self.dispatch('detail', request, **kwargs) # could use super here too instead of copying the normal code
def prepend_urls(self):
return [
url(r"^city/(.+)/(?P<resource_name>%s)$" % self._meta.resource_name,
self.wrap_view('dispatch_detail')),
]