看完你就会!Python自动化开发必备项目之博客网站全实现

本文由马哥教育Python自动化实战班6期学员推荐,转载自互联网,作者为 lm409,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛苦贡献与付出。

断断续续终于过了一遍Python教程,于此梳理教程实战作业:搭建一个Blog网站。

由于欠缺前端知识,有些代码直接引用于项目源码,个人做了尽量详尽的注释以帮助理解,希望在今后能够学习HTML、CSS、JavaScript等知识,然后回头重新理解本项目。

作品的完整代码,回复公众号:博客神器

一、文件结构

二、关键技术

1.http工作流程

1. 客户端(浏览器)发起请求

2. 路由分发请求(这个框架自动帮处理),add_routes函数就是注册路由。

3. 中间件预处理

- 打印日志

- 验证用户登陆

- 收集Request(请求)的数据

4. RequestHandler清理参数并调用控制器(Django和Flask把这些处理请求的控制器称为view functions)

5. 控制器做相关的逻辑判断,有必要时通过ORM框架处理Model的事务。

6. 模型层的主要事务是数据库的查增改删。

7. 控制器再次接管控制权,返回相应的数据。

8. Response_factory根据控制器传过来的数据产生不同的响应。

9. 客户端(浏览器)接收到来自服务器的响应。

三.ORM框架Day3-Day4

ORM全称为对象关系映射(Object Relation Mapping),即用一个类来对应数据库中的一个表,一个对象来对应数据库中的一行,表现在代码中,即用类属性来对应一个表,用实例属性来对应数据库中的一行。

具体步骤如下:

orm.py中实现元类ModelMetaclass:创建一些特殊的类属性,用来完成类属性和表的映射关系,并定义一些默认的SQL语句,如SELECT, INSERT, UPDATE, DELETE等

orm.py实现Model类:包含基本的getattr,setattr方法用于获取和设置实例属性的值,并实现相应的SQL处理函数,如find、findAll、save、remove等

model.py中实现三个映射数据库表的类:User、Blog、Comment,在应用层用户只要使用这三个类即可

四.web框架Day5

aiohttp已经是一个Web框架了,在此主要对aiohttp库做更高层次的封装,从简单的WSGI接口到一个复杂的web framework,本质上还是对request请求对象和response响应对象的处理,可以将这个过程想象成工厂中的一条流水线生产产品,request对象就是流水线的原料,这个原料在经过一系列的加工后,生成一个response对象返回给浏览器。

具体步骤如下:

coroweb.py中@get()装饰器给http请求添加请求方法和请求路径这两个属性;RequestHandler()调用url参数,将结果转换位web.response

app.py中传入拦截器middlewares,通过add_routes()批量注册URL处理函数、init_jinja2()初始化jinja2模版、add_static()添加静态文件路径

create_server()创建服务器监听线程

监听线程收到一个request请求

经过几个拦截器(middlewares)的处理(app.py中的app = web.Application..这条语句指定)

调用RequestHandler实例中的call方法;再调用call方法中的post或者get方法

调用handlers.py中响应的URL处理函数,并返回结果

response_factory在拿到经URL处理函数返回过来的对象,经过一系列类型判断后,构造出正确web.Response对象,返回给客户端

五.作业成果

博客首页:

写博客:

文章管理:

文章详情:

六、总结

通过该作业,基本了解了一个webapp的开发流程和部分技术,了解了http的工作原理,复习了python的使用。但是也深刻认识到python知识点的不熟练和前端相关知识的匮乏,后续仍要加强python项目练习和前端知识的学习。


原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2017-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏游戏开发那些事

【Cocos2d-x游戏开发】Cocos2d-x中的弱联网技术

  在上一篇博客中,我们一起学习了如何在Cocos2d-x中存储数据和读取信息,本篇博客我们将一起讨论和数据存储同样重要的联网技术。

1495
来自专栏枕边书

代码迁移之旅(二)- 渐进式迁移方案

说在前面 这是代码迁移的第二篇文章,也是最后一篇了,由于个人原因,原来的迁移我无法继续参与了,但完整的方案我已经准备好了,在测试环境也已经可以正常进行了。 上篇...

2449
来自专栏Golang语言社区

Go 语言编写的缓存及缓存过滤库:groupcache

groupcache 是使用 Go 语言编写的缓存及缓存过滤库,作为 memcached 许多场景下的替代版本。 对比原始 memcached ? 首先,gr...

2624
来自专栏IT技术精选文摘

MongoDB设计模式

MongoDB是一个NoSQL文档数据库。 它是大多数用例的理想选择,然而当它不适用你的用例时,您仍然可以通过使用以下设计模式来克服它的一些限制。 1.查询命令...

24710
来自专栏小巫技术博客

推荐:Mac下高效静态代码分析神器Unstand详解

1321
来自专栏沈唁志

PHP新手必须认识的一些建议

1672
来自专栏老安的博客

zabbix 自动发现tomcat的war包并实现监控

1392
来自专栏大数据杂谈

用Python爬虫获取自己感兴趣的博客文章

1969
来自专栏aoho求索

snowflake升级版全局id生成

1. 背景 分布式系统或者微服务架构基本都采用了分库分表的设计,全局唯一id生成的需求变得很迫切。 传统的单体应用,使用单库,数据库中自增id可以很方便实现。分...

56911
来自专栏跟着阿笨一起玩NET

如何防止你的UI出现了假死吗?

如果应用程序在UI线程上执行非UI线程的耗时处理时,会使应用程序界面的运行显得缓慢而迟钝,有时会出现应用程序“UI界面假死”的现象,这也会引起用户的不满。

880

扫码关注云+社区

领取腾讯云代金券