Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Tveek/awesome-python3-webapp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

24 Commits

Repository files navigation

从零开始用Python开发一个博客网站

我是跟着廖雪峰的Python教程一步一步走下来的,相信大家还记得在廖老师的Python3教程刚开始的那段话

如果你是小白用户,满足以下条件:

  • 会使用电脑,但从来没写过程序;
  • 还记得初中数学学的方程式和一点点代数知识;
  • 想从编程小白变成专业的软件架构师;
  • 每天能抽出半个小时学习。

image

不要再犹豫了,这个教程就是为你准备的!


不得不说廖老师的教程写的很用心,也为大家能坚持到最后点个赞,但后面的实战部分远没有那么容易,还是有一定难度的,比如**装饰器、元类**等等,由于就有了我这个,全部代码都是我**一行一行**思考过然后敲下来的,**内含大量注释**,保证你看完以后,python水平有一个**大大的提高**

如果感觉还好的话,可以点击右上角的Star按钮支持下我的工作^_^

演示

演示网址: 点我点我

管理员账号:

用户名:bruce_zhou@163.com

密码:bruce_zhou

注:我修改过代码可以不用管理员登录,就可以进行一系列操作

准备工作

请确保你已经安装以下的库

  1. python3.5 及以上版本

  2. aiohttp: 异步http服务器

  3. jinja2: python的模板渲染引擎

  4. aiomysql: mysql官方推出的异步mysql库

代码结构

  • www - static:存放静态资源 - templates:存放模板文件 - app.py: HTTP服务器以及处理HTTP请求;拦截器、jinja2模板、URL处理函数注册等 - orm.py: ORM框架 - web_framework.py(廖老师教程中的coroweb.py): 封装aiohttp,即写个装饰器更好的从Request对象获取参数和返回Response对象 - apis.py: 定义几个错误异常类和Page类用于分页 - config_default.py:默认的配置文件信息 - config_override.py:自定义的配置文件信息 - config.py:默认和自定义配置文件合并 - markdown2.py:支持markdown显示的插件 - pymonnitor.py: 用于支持自动检测代码改动重启服务

其中重要的模块有三个:orm.py、web_framework.py、app.py,下面将分别介绍。

orm.py实现思路

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

  1. 实现元类ModelMetaclass:创建一些特殊的类属性,用来完成类属性和表的映射关系,并定义一些默认的SQL语句

  2. 实现Model类:包含基本的get,set方法用于获取和设置实例属性的值,并实现相应的SQL处理函数

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

web框架实现思路

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

具体到代码中去看,这条流水线的过程如下

  1. app.py中注册所有处理函数、初始化jinja2、添加静态文件路径

  2. 创建服务器监听线程

  3. 监听线程收到一个request请求

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

  5. 调用RequestHandler实例中的__call__方法;再调用__call__方法中的post或者get方法

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

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

我认真看过的一些文档

  1. 深刻理解Python中的元类(metaclass) ------ 深度5星级好文
  2. 理解python中的装饰器 ------ 翻译自StackOverflow
  3. Python 面向对象(进阶篇)------ 比较全和基础
  4. HTTP Get,Post请求详解 ------ 5星级好文,排版可能有点乱,但写的真的很好
  5. python3官方文档 ------ 五星级推荐,很全
  6. Google Python编码规范 —--- 良好的编程习惯是很重要的
  7. Python进阶必读汇总 -------认真看完,秒杀一大片
  8. Python 深入理解yield
  9. Python SMTP发送邮件

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 49.9%
  • CSS 39.2%
  • Tcl 5.7%
  • Python 3.3%
  • HTML 1.9%

AltStyle によって変換されたページ (->オリジナル) /