大家好, 我是仙宇(其实就是咸鱼)
我发现很多小伙伴一直想着有自己的一个博客, 而且还想自己写一个
你们都这么爱折腾, 我就给你们搞一个轻量级级别的 Blog.
准备
我们要用 Python 来写一套 轻量级的博客 , 那么必须要有 Python 方面的基础 .
介绍 AND 框架选择
Python 有很多 web 框架, 可谓是百家争鸣, 我这里列出几个比较叼的几个框架
Django 市场占有率最高, 官方文档几近完美, 但是适合比较大的项目, 小项目会显得累赘
Tornado 可异步, 性能高, 提供更多的底层细节, 还能进行 Web Socket, 但是和数据库..(大坑)
Web.py 小巧, 精炼, 扩展不是很多, 而且问题是作者太牛掰, 被上帝请去喝茶了
Flask 年轻, 2010 年出现可扩展小巧内置开发服务器和调试器使用 jinja2 模板完全兼容 WSGI 1.0
框架十分多, 但是我们用哪个框架来搞我们的轻量级博客呢?
答案是: Flask
理论概念 MVC
啥事 MVC 呢?
很多小伙伴一脸懵逼, 这 Tm 又是个神马?
M:Model ==> 数据库模型
V:Views ==> 可以理解为定义网页的地址, 以及渲染网页等
C:Controller ==> 可以理解为 网页功能的逻辑, 实现
安装
Flask 库的名字就叫 flask
我们使用 pip 进行安装
pip install flask --index http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip: 专门负责对 python 库的管理
install: 安装
选用豆瓣的 Pypi 库安装 flask 会很快(国内)
测试是否成功安装
打开 Python
import flask
只要没报错, 就是成功安装 Flask 库了
裸跑 Web 应用
库已经安装了, 那就该讲讲如何利用 Flask 来写一个简单的 Web 应用
- from flask import Flask # 导入包
- app = Flask(__name__) # 创建一个 Web 应用
- @app.route('/') # 定义路由(Views), 可以理解为定义页面的 URL
- def index():
- return "这是用 Python + Flask 搞出来的" # 渲染页面
- if __name__ == "__main__":
- app.run(host='127.0.0.1',port=8080) # 运行, 指定监听地址为 127.0.0.1:8080
我们来运行试试
然后我们去用浏览器访问页面
开启 Debug 调试
如果我们修改了代码, 我们需要将开启的 Web 程序关闭再开启, 这样会影响开发效率, 也很烦
Flask 内部有一个功能, 专门针对这样的事情发生
修改代码
- if __name__ == "__main__":
- app.run(host='127.0.0.1',port=8080,debug=True)
我们添加了一个参数, 就是 debug, 这个参数默认是 False
开启这个功能后, 我们每次修改完代码, Web 应用对自动进行调整
现在修改代码并且保存, 应用就会自动更新你的代码
分析
现在我们来分析一下代码
- from flask import Flask # 导入包
- app = Flask(__name__) # 创建一个 Web 应用
- app.config['DEBUG'] = True
- @app.route('/') # 定义路由(Views), 可以理解为定义页面的 URL
- def index():
- return "这是用 Python + Flask 搞出来的" # 渲染页面
- if __name__ == "__main__":
- app.run(host='127.0.0.1',port=8080)
所有 Flask 程序都需要进行创建一个实例 Web 服务器会使用 WSGI 协议, 将接受到的客户端请求转交给这个对象处理, 可以理解为代码中的 app
第 3 行: Flask 需要一个参数, 这个参数通常是主模块或是包的名字所以通常会传入 __name__
Flask 用这个参数来决定程序的根目录, 以便以后找到资源文件, 比如网页中的图片, 视频, 音频等
第 5 行: 可以通过使用 app.config 类来修改配置, 开启调试模式当然, 这里所采用的方法只能适用于设置很少的时候, 以后会介绍另外几种修改配置的方法
第 7 行: 还记得我之前提到了 MVC 吗? 这里就是其中 V, 就是路由这里的代码的目的就是为我们来指定一个路由, 也就是页面的地址
第 8 9 行: 使用 app.route()装饰器 会将 URL 和执行的视图函数 ( 函数 index ) 的关系保存在 app.url_map 属性上当你访问指定的 URL 时, 就会调用这个函数当遇到第一个 return 时, 就会结束其中的 return 就是你的 response
第 12 行: 执行 app.run 来启动服务器默认的 Flask 会监听的地址是 127.0.0.1:5000 我们指定 host 和 port 参数, 就修改了监听地址 服务启动后, 会先判断参数 host 以及 port 是否为 None, 如果为 None, 就会将 host 和 port 修改为默认值然后会判断 debug 然后就会调用 werkzeug.serving.run_simple 来启动 Web 服务, 默认会使用单进程的 werkzeug.serving_BaseWSGIServer 来处理客户端的请求
(这里的 Werkzeug 其实就是 WSGI 的实现和应用 , 从中可以发现, Flask 是基于 Werkzeug 开发的 你或许可以去查查 Werkzeug 的文档, 来自己实现一个 Web 服务框架)
深入
我贴出 Flask 源码我们来瞅瞅
从 827 行代码可以发现 Flask 从 werkzeug.serving 引入了 run_simple , 之后的一部分代码就是进行调整和检验参数(host 和 port 再有就是 debug), 最后把参数传给了 run_simple 来启动服务
所以大家不要以为框架都是高大上, 有时候看看源码, 就会发现没有想象的那么困难
再来看看 run_simple 可以看到, processes 就是进程, processes 默认值为 1
注意
还要注意的就是, 这里的 app.run 的启动方法, 只适合在码代码的时候调试
千万不要在产品上线的时候也用这种方法来启动服务!!!
以后我会给大家介绍在生产环境下如何配置
或许大家可以去看看关于 uWSGI 的文章
最后, 贴上我微信二维码, 有问题的小伙伴请留言, 我也在学习, 希望大家有什么坑可以抛出来交流
来源: http://www.tuicool.com/articles/mmqqQnZ