Pyramid(Pylons)新的文件/目录结构让我有些困惑

9 投票
2 回答
3907 浏览
提问于 2025-04-16 06:46

我最近在用Pylons开发了一段时间,听说它们要和另一个框架合并,变成Pyramid。

我在查看一些示例代码,想看看有什么不同,但有点搞不清楚……

比如,原来的控制器(Controllers)现在变成了视图(Views)。这倒没什么大问题……但让我觉得有趣的是,这里没有目录结构,只有一个文件:views.py

那这个新的MVC结构是怎么运作的呢?我是不是要把所有的操作都写在这个文件里?如果有很多名字相似的操作(比如多个索引),那可就麻烦了 :/

能不能给我推荐一些好的教程或文档,教我怎么使用这个框架?

2 个回答

5

这里有一个答案,应该很简单明了。这个问题是在Pyramid 1.3还没发布的时候提出来的。所以现在可以不考虑python处理程序,因为新的装饰器已经做得很好了。

首先要知道的是,Pyramid没有固定的结构。你完全可以把整个应用写在一个文件里,如果你愿意。换句话说,如果你喜欢pylons的结构,那就可以继续用它。如果你更喜欢自己设置结构,那也没问题。

如果你的网站只需要一个文件,那就大胆去做吧!!!最重要的是它能正常工作。

我个人的结构是这样的:

- root
    - __init__.py # all setup goes there
    - security.py # where functions related to ACL and group_finder
    - models.py or models/ # where all my models go
    - views.py or views/   # where all my views go 
    - templates
       - modelname
          - all template related to this resource type

    - scripts # where I put my scripts like backup etc
    - lib # all utilities goes there
    - subscribers # where all events are defined

我的视图包有时候会拆分成很多文件,我会根据资源类型来分组视图。

如果你使用上下文来匹配视图,而不是路由的话,你可以用view_defaultsview_config做一些很不错的事情。

view_defaults为类设置了一些默认值,而view_config则使用view_defaults提供的默认值来设置更多的配置。

26

因为各种与视图相关的配置方法(比如 config.add_view 和 config.add_handler)需要你传入一个带点的名字,作为视图或处理器使用的类或函数,所以你可以随意安排你的代码结构。

举个例子,如果你的项目包名是 myproject,你想把所有的视图放在一个名为 "views" 的 Python 子包里(而不是放在一个单独的视图 文件 中),你可以这样做:

  • 在你的 mypackage 包里创建一个 views 目录。

  • 现有的 views.py 文件移动到新创建的 views 目录里,命名为,比如说,blog.py

  • 在新创建的 views 目录里创建一个名为 __init__.py 的文件(这个文件可以是空的,它只是告诉 Python 这个 views 目录是一个 )。

然后,把你 myproject 项目里的 __init__.py 文件(不是你刚在 views 目录里创建的那个,而是它的父目录里的那个)从类似下面的内容:

config.add_handler('myhandler', '/my/handler', handler='mypackage.views.MyHandler')

改成:

config.add_handler('myhandler', '/my/handler', handler='mypackage.views.blog.MyHandler')

这样你就可以继续在 views 目录里添加文件,并通过带点的名字来引用那些文件里的视图或处理器类/函数,使用 handler=view= 来传递。

撰写回答