Day 7 - 编写MVC

现在,ORM框架、Web框架和配置都已就绪,我们可以开始编写一个最简单的MVC,把它们全部启动起来。

通过Web框架的@decorator和ORM框架的Model支持,可以很容易地编写一个处理首页URL的函数:

  1. # urls.py
  2. from transwarp.web import get, view
  3. from models import User, Blog, Comment
  4. @view('test_users.html')
  5. @get('/')
  6. def test_users():
  7. users = User.find_all()
  8. return dict(users=users)

@view指定的模板文件是test_users.html,所以我们在模板的根目录templates下创建test_users.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Test users - Awesome Python Webapp</title>
  6. </head>
  7. <body>
  8. <h1>All users</h1>
  9. {% for u in users %}
  10. <p>{{ u.name }} / {{ u.email }}</p>
  11. {% endfor %}
  12. </body>
  13. </html>

接下来,我们创建一个Web App的启动文件wsgiapp.py,负责初始化数据库、初始化Web框架,然后加载urls.py,最后启动Web服务:

  1. # wsgiapp.py
  2. import logging; logging.basicConfig(level=logging.INFO)
  3. import os
  4. from transwarp import db
  5. from transwarp.web import WSGIApplication, Jinja2TemplateEngine
  6. from config import configs
  7. # 初始化数据库:
  8. db.create_engine(**configs.db)
  9. # 创建一个WSGIApplication:
  10. wsgi = WSGIApplication(os.path.dirname(os.path.abspath(__file__)))
  11. # 初始化jinja2模板引擎:
  12. template_engine = Jinja2TemplateEngine(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'templates'))
  13. wsgi.template_engine = template_engine
  14. # 加载带有@get/@post的URL处理函数:
  15. import urls
  16. wsgi.add_module(urls)
  17. # 在9000端口上启动本地测试服务器:
  18. if __name__ == '__main__':
  19. wsgi.run(9000)

如果一切顺利,可以用命令行启动Web服务器:

  1. $ python wsgiapp.py

然后,在浏览器中访问http://localhost:9000/

如果数据库的users表什么内容也没有,你就无法在浏览器中看到循环输出的内容。可以自己在MySQL的命令行里给users表添加几条记录,然后再访问:

awesomepy-all-users

原文: https://wizardforcel.gitbooks.io/liaoxuefeng/content/py2/101.html