用于查看在Django的REST框架
问题描述:
继承层次显然,你只能继承一个级别,当涉及到使用Django的REST框架的看法。用于查看在Django的REST框架
这工作:
class Foo(View):
def get(self, request):
return "hello world"
虽然这并不:
class Foo(View):
def get(self, request):
return self.bar()
class Bar(Foo):
def bar(self):
return "hello world"
看来,这是故意的,由于as_view代码() http://django-rest-framework.org/_modules/views.html
有谁知道解决方法?
谢谢!
编辑: 好了,好了,我发现我可以这样做:
class Foo(View):
def __init__(self):
View.__init__(proxy = self)
def get(self, request):
return self.proxy.bar()
class Bar(Foo):
def bar(self):
return "hello world"
但是,这是不是在长期的真正的“可接受的”。有没有人知道这样做的更合理的方式?
答
如果这个问题仍然屹立不倒,我不认为我们有足够的信息来回答这个问题。
首先,
class Foo(object):
def get(self):
return self.bar()
class Bar(Foo):
def bar(self):
return "hello world"
可能不是在任何情况下很好的代码,不管富是否延长Django的REST的架构的视图类。通过假设它有一个bar方法,你实质上是打破了foo.get,但它没有。
>>> foo = Foo()
>>> foo.get()
AttributeError: 'Foo' object has no attribute 'bar'
此:
>>> bar = Bar()
>>> bar.get()
会工作。但是,你已经基本上用这种方式写了Foo。至少提供一个存根方法。不过,你还没有发布你的urls.py,所以我不确定你是否尝试做Foo.as_view()或Bar.as_view()。我用djangorestframework.views测试了它。视图,如市场预期,
#urls.py
from testviews.views import Foo, Bar
urlpatterns = patterns('',
url(r'^$', Bar.as_view(), name='home'),
)
正常工作对我来说,然而,
urlpatterns = patterns('',
url(r'^$', Foo.as_view(), name='home'),
)
不出于同样的原因,上面的代码不起作用。