代码之家  ›  专栏  ›  技术社区  ›  user1333

为django视图使用类,这是pythonic吗?

  •  3
  • user1333  · 技术社区  · 15 年前

    我目前正在学习python,并且来自一个强大的C背景。我一直听到关于用蟒蛇式的方式做事情,以利用语言的动态特性,有些是我得到的,有些是我没有得到的。

    我正在用Django创建一个站点,我的视图方法是使用类。我目前的想法是有一个基类,它包含一些关于模板和模型的内容。这将有一个默认的时髦404类型的网页与网站搜索和东西,然后基础上的所有其他网页。因此,站点的每个区域都有自己的eg新闻,所有与模型相关的函数和过滤都将位于该类中,另外还有一个类位于HTML或Ajax请求的类之上。所以你会得到这样的东西:

    \站点\公用\视图库

    --\新闻\新闻库(viewbase)

    --\新闻\htmlview(新闻库)

    --\新闻\ AjaxView(新闻库)

    URL的映射方式如下 http://tld/news/latest 映射到site.news.htmlview和 http://tld/news/ /to/will也将被映射为site.news.htmlview,但类将了解如何处理额外的参数。

    这几乎是我在C中要做的,但是Django教程只显示了使用视图方法,这让我想知道这是否不是一个非常蟒蛇式的解决方案?

    思想?

    编辑:在S.Lott评论线程安全性之后,是否最好保持函数的原样,让它们创建一个类的实例并对其调用一个方法?

    我要找的是一个为站点的每个部分放置通用代码的地方,用于过滤模型、对站点进行身份验证等。

    4 回复  |  直到 15 年前
        1
  •  4
  •   Ignacio Vazquez-Abrams    15 年前

    当然,如果您将URL路由到一个类的实际实例,而不仅仅是一个类,那么使用一个类作为视图没有任何错误。

        2
  •  2
  •   zeemonkee    15 年前

    django管理员就是这样做的——查看django/contrib/admin中的源代码。

    类的优点是它们更容易定制,例如,您可以添加钩子来检查权限。

    有一个提议将所有现有的通用视图转移到类中,它本应进入1.2,但未能达到最后期限。

    正如上面的海报所指出的,在处理实例变量时要非常小心——如果您查看管理类,您会看到请求被传递到各种方法,而不是依赖于“self”。

        3
  •  0
  •   Peter Rowell    15 年前

    撇开其他问题(如线程安全问题)不谈,在模型/视图/模板之间划过明亮的界线似乎有真正的危险。

    或者它感觉像是URL调度的替代品( not that there's anything wrong with that :-)我不确定,只是感觉有点 远离的 .

        4
  •  0
  •   ozan    15 年前

    虽然基于类的视图很有用,但是继承可能不是此特定作业的正确工具。帮助器函数和修饰器是从视图中分解出公共代码的两种很好的方法。对于可能处理代码的其他(Python)编码人员来说,它们也更熟悉/更自然。

    我不确定在您的情况下最好的方法是什么,因为我不知道您最终想要考虑多少,请记住,除了继承之外,还有其他方法可以考虑Python。

    P.S.因寻求蟒蛇解决方案而受到赞誉。