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

在Django项目中,如何将控制器(视图)分解为内聚文件?

  •  1
  • Korbin  · 技术社区  · 15 年前

    我目前正在Django的网站上学习教程。完成以下命令后:

    python manage.py startapp投票

    它创建以下结构:

    polls/
        __init__.py
        models.py
        tests.py
        views.py
    

    在我学习教程的过程中,我突然想到视图文件可以成长为一个巨大的、不连贯的整体文件,它在整个Web应用程序中都有每个操作。

    有没有办法把这个文件分解成内聚类或文件?我尝试更改settings.py和url.py以指向不同的目录,但在创建文件时,生成文件结构的脚本似乎会创建一个“视图”模块,我看不到从脚本更改/重写此行为的方法。

    5 回复  |  直到 15 年前
        1
  •  0
  •   John Debs    15 年前

    为项目创建的每个应用程序都有自己的 views.py 文件(假设它使用视图),所以您不必担心它变成一个整体。

    只要确保你的应用程序功能集中。

    来自Django文档:

    项目与应用程序

    A和A的区别是什么? 项目和应用程序?应用程序是一个Web 做某事的应用程序-- 例如,一个日志系统,一个 公共记录或简单的投票应用程序。一 项目是 配置和应用程序 特定网站。一个项目可以 包含多个应用程序。一个应用程序可以是 在多个项目中。

        2
  •  2
  •   michael    15 年前

    您可以用类似于此日志如何拆分模型的方式拆分视图

    http://www.nomadjourney.com/2009/11/splitting-up-django-models/

    /myapp
    
        * /views
              o __init__.py
              o bar.py
              o foo.py
    

    在uu init_uuu.py文件中使用适当的import语句

    这可能适用于正在扩展的应用程序。此外,视图在结构上比模型更灵活,因此您可以执行后端/成员/前端/模块或仅管理视图.py等操作。

        3
  •  1
  •   hasen    15 年前

    视图函数不必在 views.py ,只要它们被正确映射到 urls.py . 所以这取决于你如何组织你的项目。

    但似乎生成文件结构的脚本在创建文件时会创建一个“视图”模块,我看不到从脚本更改/重写此行为的方法。

    您完全可以忽略该脚本及其生成的内容。它不会在幕后做任何神奇的事情;它只是为您创建那些文件。

        4
  •  0
  •   Frank V    15 年前

    我最近学习了那个教程。我已经想到,大多数“核心”逻辑将进入到其他支持文件中的各种类或方法中。那么views.py将包含对设置和执行方法的基本调用。

    考虑到这种设计,我希望一个视图函数最终可能有3到5行代码。设置、执行方法并返回。

    基本上,我的意思是 Facade pattern .

    我希望教程避免使用这种方法,因为它增加了重定向级别(误导?)这会使介绍人更难遵循代码。

        5
  •  0
  •   SingleNegationElimination    15 年前

    我所做的一件事就是让我的应用程序的视图更紧凑,那就是要非常积极地考虑我的视图。我讨厌写任何代码两次,所以这对我来说很自然。我可以在任何地方使用通用视图来执行所需的操作。我的视图功能的很大一部分是decorator,它对需要它的视图执行公共操作。

    例如,我有一个post-limit装饰器,它检查用户最近是否修改了某个模型中的任何实例(可配置视图,按视图),如果用户修改了,就会产生一个错误,这是一种防洪措施。

    事实上,许多视图的工作原理是如此相似,以至于它们甚至没有自己的函数体,我只是用适当的修饰器包装了一般视图,而获得大量自定义代码的视图只有聚合类型的站点,如登录页,它们以微妙的方式收集了大量不同的信息,因此看起来“恰到好处”。