Date:2017 6.20
Theme:Pylons
昨天入职第一天,部署了开发环境,了解了python虚拟环境对开发的帮助,CKCEST项目代码量在比较可以接受的范围,打算在周末之前了解整个项目结构,准备往Pyramid和python3升级。
Pylons已经停更,除了英文文档,资料比较少 Pylons架构网站开发入门实例教程 可以满足我quick start的知识要求。
基础笔记:
1. Getting Started 安装及基础教程
2.创建项目 $ paster create -t pylons helloworld,模板默认类型mako,设置SQLAlchemy为True(默认为false)
3.安装SQLAlchemy方法:
easy_install SQLAlchemy
然后安装数据库引擎:
easy_install pysqlite# If you use SQLite and Python 2.4 (notneeded for Python 2.5)
easy_install mysql-python# If you use MySQL
easy_install psycopg2# If you use PostgreSQL
4.启动项目$ paster serve --reload development.ini development.ini开发者配置
5.创建应用$ paster controller hello
6.development.ini配置数据库信息
[server:main]
use=egg:Paste#http
host=127.0.0.1
port=500
# SQLAlchemy database URL
sqlalchemy.url=mysql://username:password@host:port/database
sqlalchemy.pool_recycle=3600
7.项目路径
|-- __init__.py
|-- __init__.pyc
|--config
| |--__init__.py
| |--__init__.pyc
| |--deployment.ini_tmpl
| |--environment.py
| |--environment.pyc
| |--middleware.py
| |--middleware.pyc
| |--routing.py
| `--routing.pyc
|--controllers
| |--__init__.py
| `--error.py
|-- lib
| |--__init__.py
| |--__init__.pyc
| |--app_globals.py
| |--app_globals.pyc
| |--base.py
| |--helpers.py
| `--helpers.pyc
|--model
| `--__init__.py
|--public
| |--bg.png
| |--favicon.ico
| |--index.html
| `--pylons-logo.gif
|--templates
|-- tests
| |--__init__.py
| |--functional
| | `-- __init__.py
| `--test_models.py
`-- websetup.py
这个目录里面比较重要的文件和目录有:config/routing.py,controllers子目录,model子目录,template子目录,public子目录。
关于routing.py这个文件,主要是一个映射的功能,将URL请求映射到处理请求的方法。
map.connect('/save-template',controller='Notifylist',action='SaveTemplate')
这句话就是前端发来的save-template请求,处理这个请求的就是Notifylist 这个Controller中的SaveTemplate这个函数。关于controllers这个子目录,包含controllers文件。比如上面的Notifylist.py这个文件。我们来看一下Notifylist.py中的一个代表性的函数def index(self):
defindex(self):
#return a rendered template
returnrender('/helloworld.mako')
#or, return a string
#return "hello world"
添加映射规则map.connect('/index',controller='Notifylist',action='index')
你就应该明白了当浏览器请求index的时候,通过routing这个路由,就转到index这个函数来处理,返回helloworld.mako这个文件。
关于model这个子目录,包含各个数据库表文件,比如有个person表,创建一个person.py模块。person.py文件的内容大致如下,Person类中一般有两个函数:__init__和__repr__。如果有其他的表类内容也相差不大。
"""Person model"""
fromsqlalchemyimportColumn
fromsqlalchemy.typesimportInteger, String
frommyapp.model.metaimportBase
classPerson(Base):
__tablename__="person"
id = Column(Integer, primary_key=True)
name = Column(String(100))
email = Column(String(100))
def__init__(self, name=’’, email=’’):
self.name = name
self.email = email
def__repr__(self):
return" 关于public这个子目录,主要是一些静态的文件,如html,js,css,png等等。 关于templates这个子目录,主要是mako文件,mako文件和平时的html文件一样。