0

わずかに異なるURLでtastypieを使用したいと思います。私は彼らがこのようであることを望みます:

/api/v1/city/London/make_default /api/v1/city/Paris/make_default /api/v1/city/Singapore/remove_city

都市自体はデータベースの都市テーブル内の任意の都市にすることができ、リソース名は実行したいメソッドです。各メソッドには独自のリソースがあります。Tastypie では、この URL で問題が発生するようです。私が301リダイレクトを与え続けているprepend_urls。

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')),
                ]
4

1 に答える 1

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')),
                ]
于 2013-01-25T22:45:19.230 に答える