Pyramid(Pylons)新的文件/目录结构让我有些困惑
我最近在用Pylons开发了一段时间,听说它们要和另一个框架合并,变成Pyramid。
我在查看一些示例代码,想看看有什么不同,但有点搞不清楚……
比如,原来的控制器(Controllers)现在变成了视图(Views)。这倒没什么大问题……但让我觉得有趣的是,这里没有目录结构,只有一个文件:views.py
。
那这个新的MVC结构是怎么运作的呢?我是不是要把所有的操作都写在这个文件里?如果有很多名字相似的操作(比如多个索引),那可就麻烦了 :/
能不能给我推荐一些好的教程或文档,教我怎么使用这个框架?
2 个回答
这里有一个答案,应该很简单明了。这个问题是在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_defaults和view_config做一些很不错的事情。
view_defaults
为类设置了一些默认值,而view_config
则使用view_defaults
提供的默认值来设置更多的配置。
因为各种与视图相关的配置方法(比如 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=
来传递。