用于查看在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'), 
) 

不出于同样的原因,上面的代码不起作用。