Day 7 - 编写MVC

MVC Model-View-Controller ,“模型-视图-控制器”。 
Controller 控制器 :控制业务逻辑,决定与前端进行数据交互的形式和方法。如:检查数据,存取数据等。
View 视图 :复制显示页面。通过接收 Controller 传来的数据,渲染后,呈现界面给用户。
Model 模型 :它是在后端 Controller 和前端View之间被传递的数据。
在本项目中:
Model 是我们编写的 orm框架 ,它能从MySQL中取出数据,并以对象的形式被传递。
View 是我们使用的 jinja2模板引擎 ,他能接收从后端传来的数据,渲染呈现出页面。
Controller 是我们的 视图函数 ,以及用来封装视图函数的 HandRequest 类和 middlerware 等。

在之前我们已经编写过orm框架,完成了配置文件,并且对jinja2模板引擎进行了初始化。
所以,现在可以编写一个MVC测试把他们联动起来~
之前的测试,视图函数仅返回字符串,现在我们要让它调用jinja2模板,并和前端有数据传递。
首先,修改一下之前编写的测试用视图函数
from coroweb import get
from models import User
import asyncio

@get('/')
async def index(request):
	users = await User.findAll()
	# 视图函数返回的值是dict
	return {
		# 在response_middleware中会搜索模板
		'__template__': 'test.html',
		# 传入模板的数据
		'users': users
	}
然后,编写一个jinja2模板 test.html ,放入templates文件夹中:
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Test users - Awesome Python Webapp</title>
</head>
<body>
    <h1>All users</h1>
    {% for u in users %}
    <p>{{ u.name }} / {{ u.email }}</p>
    {% endfor %}
</body>
</html>
最后,对Day 5中初始化app的函数修改,启动orm框架
import asyncio, os, json, time, logging
import orm
from config import configs
from datetime import datetime
from aiohttp import web
from jinja2 import Environment, FileSystemLoader
from coroweb import add_route, add_routes, add_static
if __name__ == '__main__':

	async def init(loop):
		await orm.create_pool(loop, **configs['db']) # 添加配置文件
		app = web.Application(loop = loop, middlewares=[logger_factory, response_factory])
		init_jinja2(app, filters=dict(datetime = datetime_filter))
		add_routes(app, 'test_view')
		add_static(app)
		srv = await loop.create_server(app.make_handler(), 'localhost', 9000)
		logging.info('server started at http://127.0.0.1:9000...')
		return srv

	loop = asyncio.get_event_loop()
	loop.run_until_complete(init(loop))
	loop.run_forever()
在开始运行前,别忘了在MySQL的users表中传入数据。
然后,运行,访问localhost:9000。
虽然显示页面非常简陋,但我们已经完成一次MVC联动了~



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值