wsgiref
wsgiref 提供一些 web 开发的基础功能,最有用的就是提供了一个简单的开发服务器。
1 import wsgiref
2 def hello_app(environ, start_response):
3 start_response('200 OK', [('Content-type','text/plain')])
4 yield 'Hello world\n'
5 for key, value in environ.items():
6 yield '%s : %s\n' % (key, value)
7
8 server = wsgiref.make_server('localhost', 8000, hello_app)
9 server.serve_forever()
mako
mako 是一个模板引擎,通过将动态的数据填充到模板中,可以用来生成复杂的页面。
simple.html
<html> <head> <title>简单mako模板</title> </head> <body> <h5>Hello World!</h5> <ul> % for key, value in environ.items(): <li> ${key} - ${value} <li> % endfor </ul> </body> </html>
和 wsgiref 整合:
1 import wsgiref
2 from mako import Template
3 def hello_app(environ, start_response):
4 tmpl = Template('./simple.html')
5 content = tmpl.render(data=environ)
6 start_response('200 OK', [('Content-type','text/plain')])
7 return [content]
8
9 server = wsgiref.make_server('localhost', 8000, hello_app)
10 server.serve_forever()
sqlalchemy
sqlalchemy 是一个 ORM,提供python对象与关系数据库之间的映射,通过 python 对象, 对关系数据库进行操纵。
model.py
1 from sqlalchemy.ext.declarative import declarative_base
2
3 engine = create_engine('sqlite:///data.db')
4 Session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))
5 Base = declarative_base()
6
7 class Dictionay(Base):
8 __tablename__ = 't_dictionay'
9 key = Column('key', String(255), primary_key=True)
10 value = Column('value', String(255))
11
12 # 创建数据库
13 Base.metadata.create_all(engine)
14
15 session = Session()
16 for item in ['python','ruby','java']:
17 dictionay = Dictionay(key=item, value=item.upper())
18 session.add(dictionay)
19
20 session.commit()
21
22 for dictionay in session.query(Dictionary):
23 print dictionay.name, dictionay.value
上面是个 demo,下面我们把它分解,并放到web应用中去。
model.py
1 from sqlalchemy.ext.declarative import declarative_base
2
3 engine = create_engine('sqlite:///data.db')
4 Session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))
5 Base = declarative_base()
6
7 class Dictionay(Base):
8 __tablename__ = 't_dictionay'
9 key = Column('key', String(255), primary_key=True)
10 value = Column('value', String(255))
create_db.py
和 wsgiref 整合
1 import wsgiref
2 from mako import Template
3 from model import Session, Dictionary
4 def hello_app(environ, start_response):
5 session = Session()
6 dictionaries = session.Query(Dictionary)
7 data = dict([(dictionary.name, dictionary.value) for dictionary in dictionaries])
8
9 tmpl = Template('./simple.html')
10 content = tmpl.render(data=data)
11
12 start_response('200 OK', [('Content-type','text/plain')])
13 return [content]
14
15 server = wsgiref.make_server('localhost', 8000, hello_app)
16 server.serve_forever()