文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python廖雪峰实战web开发(Day

2023-01-31 02:55

关注

MVC:Model-View-Controller,中文名“模型-视图-控制器”。
其中Python处理的URL函数就是C:ControllerController主要负责业务逻辑,比如检查用户名是否存在,取出用户信息等等;
View负责显示逻辑,通过一些简单的替换变量,View生成最终用户看到的HTML,那View实质就是HTML模板(如Django等),而在本次Web开发就是Jinja2模板;
Model是用来传给View的,这样View在替换变量的时候,就可以从Model中取出相应的数据。

通过上几篇文章,我们完成了ORM框架以及Web框架还有配置文件,现在可以编写一个MVC把它们启动起来。其实之前文章的小测试运行就是一个MVC,只是这一次编写的MVC,把ORM框架以及Web框架串联起来,再添加一个Jinja模板,启动运行。
编写MVC

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'Seiei'

'''
串联ORM框架以及Web框架编写MVC,用于测试运行
'''

from web_app.webframe import get,post
import asyncio
from web_app.models import User #引入orm框架的User模型

@get('/')
async def index(request):
    users = await User.findall()
    return {
    '__template__':'text.html',
    'users':users
    } #不懂就查看Web框架的middleware里的Response_factory源码以及Jinja2初始化的源码,__template__是用来辨认出返回数据是Jinja2模板,而不是Json,同时可以从初始化Jinja2那里获取Environment,从而导进名叫text.html的模板;而dict中的users是传递给模板的数据

然后就要编写Jinja2模板了,参考网站:Jinja2,Jinja2简要

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Test users - Awesome Python Web App</title>
</head>
<body>
    <h1>ALL users</h1>
    {% for u in users %}
    <p>{{ u.name }} / {{ u.email }}</p>
    {% endfor %}
</body>
</html>

最后对Day5文章最后编写的测试运行代码稍作修改,运行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'Seiei'

'''
编写web框架测试
'''

from aiohttp import web
import asyncio
from web_app.webframe import add_routes,add_static
from web_app.middleware_factories import init_jinja2,datetime_filter,logger_factory,response_factory
import logging; logging.basicConfig(level=logging.INFO)
from web_app import orm
from web_app.configs.config import config


async def init(loop):
    await orm.create_pool(loop, **config['db'])#创建数据库连接池,参数导入配置文件
    app = web.Application(loop=loop,middlewares=[logger_factory,response_factory])
    init_jinja2(app,filters=dict(datetime=datetime_filter),path = r"E:\learningpython\web_app\templates")#初始化Jinja2,这里值得注意是设置文件路径的path参数
    add_routes(app,'web_app.MVC_test_handler_V2')#导入URL处理函数
    add_static(app)
    srv = await loop.create_server(app.make_handler(),'127.0.0.1',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()

最后浏览器打开http://127.0.0.1:9000/,大功告成~

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯