写在前面


  • docker编排,有一个用Flask框架的Demo,感觉挺方便,所以学习下
  • 基于《Flask Web开发实战:入门、进阶与原理解析》做的读书笔记
  • 个人还是比较喜欢看书,看书的话节奏可以自己把握,内容可以全部呈现,选择适合自己的学习,更重要的原因,书里的知识面更广,有利用知识体系的构建。
  • 当然视频也不错,内容比较精炼,但是好坏参差,一般要选大一点培训机构的视频比较好。所以一般先看书,然后看视频加深记忆。
  • 还在更新中

一辈子很长,就找个有趣的在在一起——王小波《三十而立》


第一部分

第一章 初识 FLask

from flask import Flaskapp=Flask(__name__)#为视图绑定多个URL
@app.route("/")
@app.route("/index")
def hello():return "<h1>liurilong</h1>"## 动态URL
@app.route("/user/<name>")
def printName(name):return nameif __name__ == "__main__":app.run(host='127.0.0.1', port=8085,debug=True)

环境准备

#虚拟环境
mkvirtualenv #创建虚拟环境
rmvirtualenv #删除虚拟环境
workon #进入虚拟环境、查看所有虚拟环境
deactivate #退出虚拟环境#pip
pip install #安装依赖包
pip uninstall #卸载依赖包
pip list #查看已安装的依赖包
pifreeze #冻结当前环境的依赖包

第二章 Flask 与 HTTP

2.1 请求响应循环

web服务器接收请求,通过WSGI将HTTP格式的请求数据转换成我们的Flask程序能够使用的Python数据。

在程序中, Flask根据请求的URL执行对应的视图函数,获取返回值生成响应。响应依次经过wsGI转换生成HTTP响应,再经由Web服务器传递,

最终被发出请求的客户端接收。浏览器渲染响应中包含的HTML和css代码,并执行JavaScript代码,最终把解析后的页面呈现在用户浏览器的窗口中。

2.2 HTTP请求

2.2.1 请求报文

请求报文

2.2.2 Request对象

请求解析和响应封装实际上大部分是由Werkzeug完成的, Flask子类化Werkzeug的请求(Request)和响应( Response)对象并添加了和程序相关的特定功能。

使用request的属性获取请求URL&&request象常用的属性和方法
@app.route("/param")
def param():name = request.args.get('name','Flask')return name

Werkzeug的MutliDict类是字典的子类,它主要实现了同一个键对应多个值的情况。比如一个文件上传字段可能会接收多个文件。这时就可以通过getist()方法来获取文件对象列表。而ImmutableMultiDict类继承了MutliDict类,但其值不可更改。

2.2.3 在Flask中处理请求

路由匹配为了便于将请求分发到对应的视图函数,程序实例中存储了一个路由表(app.url_map),其中定义了URL规则和视图函数的映射关系

当请求发来后, Flask会根据请求报文中的URL(path部分)来尝试与这个表中的所有URL规则进行匹配,调用匹配成功的视图函数。如果没有找到匹配的URL规则,说明程序中没有处理这个URL的视图函数, Flask会自动返回404错误响应(Not Found,表示资源未找到)。

print(app.url_map)
####
Map([<Rule '/index' (HEAD, GET, OPTIONS) -> hello>,<Rule '/param' (HEAD, GET, OPTIONS) -> param>,<Rule '/' (HEAD, GET, OPTIONS) -> hello>,<Rule '/static/<filename>' (HEAD, GET, OPTIONS) -> static>,<Rule '/user/<name>' (HEAD, GET, OPTIONS) -> printName>])
路由匹配:

每一个路由除了包含URL规则外,还设置了监听的HTTP方法。GET是最常用的HTTP方法,所以视图函数默认监听的方法类型就是GET, HEAD,OPTION方法的请求由Flask处理,而像DELETE,PUT等方法一般不会在程序中实现,在后面我们构建WebAPI时才会用到这些方法。我们可以在app.route()装饰器中使用methods参数传入一个包含监听的HTTP方法的可迭代对象`,下面的视图函数同时监听GET请求和POST请求:

@app.route("/param",methods=['GET','POST'])Map([<Rule '/index' (GET, HEAD, OPTIONS) -> hello>,<Rule '/param' (GET, HEAD, POST, OPTIONS) -> param>,<Rule '/' (GET, HEAD, OPTIONS) -> hello>,<Rule '/static/<filename>' (GET, HEAD, OPTIONS) -> static>,<Rule '/user/<name>' (GET, HEAD, OPTIONS) -> printName>])
设置监听的HTTp方法

## 设置监听的 http 方法
@app.route("/param",methods=['GET','POST'])
def param():name = request.args.get('name','Flask')print(app.url_map)return name
URL处理
-
## URL解析
@app.route('/goback/<int:year>')
def goback(year):return '<p>Weloc... to %d</p>' % (2018- year)

2.2.4 请求钩子

-

有时我们需要对请求进行预处理( preprocessing)后处理(postprocessing),这时可以使用Flask提供的一些请求钩子( Hook),它们可以用来注册在请求处理不同阶段执行的处理函数(或称为回调函数,即Callback)。这些请求钩子使用装饰器实现.

@app.before_request
def do_something():pass #这里的代码会在每个请求前运行

after request钩子和after-this request钩子必须接收一个响应类对象作为参数,并且返回同一个或更新后的响应对象。

2.3 HTTP响应

-

2.3.1在Flask中生成响应报文

# 指定状态码
@app.route('/hello')
def hell():return 'hello',201
# 指定状态码,响应首部字段
@app.route('/hello')
def hello():return '',302,{'Location','http://www.liruilong.com'}
  • 重定向
from flask import Flask,redirect
# 重定向
@app.route('/hello')
def hello():return redirect('http://www.liruilong.com');
# 重定向到视图
def hello_():return redirect(url_for('hello'))
-

2.3.1在Flask中生成响应

响应在Flask中使用Response对象表示,响应报文中的大部分内容由服务器处理,大多数情况下,只负责返回主体内容。

Flask会先判断是否可以找到与请求URL相匹配的路由

如果没有则返回404响应。如果找到,则调用对应的视图函数,视图函数的返回值构成了响应报文的主体内容,正确返回时状态码默认为200, Flask会调用make_response()方法将视图函数返回值转换为响应对象

视图函数可以返回最多由三个元素组成的元组:

  • 响应主体
  • 状态码
  • 首部字段(首部字段可以为字典,或是两元素元组组成的列表)。

2.3.2响应格式

2.3.3来-块cookie

2.3.4 session:安全的Cookie

3.1 响应报文

2.3.1 在Flask中生成响应.

2.3.2 响应格式

2.3.3 来一块Cookie

2.3.4 session:安全的Cookie

2.4 Flask上下文

2.4.1 上下文全局变量

2.4.2 激活上下文.

2.4.3 上下文钩子

2.5 HTTP进阶实践

2.5.1 重定向回上一个页面

2.5.2 使用AJAX技术发送异步请求

2.5.3 HTTP服务器端推送

2.5.4 Web安全防范

第3章模板

3.1 模板基本用法

3.1.1 创建模板

3.1.2 模板语法

3.1.3 渲染模板

3.2 模板辅助工具

3.2.1 上下文.

3.2.2 全局对象

3.2.3 过滤器

3.2.4 测试器

3.3 模板结构组织.

3.3.1 局部模板

3.3.2 宏

3.3.3 模板继承

3.4 模板进阶实践.

3.4.1 空白控制

3.4.2 加载静态文件

3.4.3 消息闪现

3.4.4 自定义错误页面

3.4.5 JavaScript和CSS中的Jinja2

《Flask Web开发实战:入门、进阶与原理解析》读书笔记相关推荐

  1. 读书笔记 | 墨菲定律

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  2. 读书笔记 | 墨菲定律(一)

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  3. 洛克菲勒的38封信pdf下载_《洛克菲勒写给孩子的38封信》读书笔记

    <洛克菲勒写给孩子的38封信>读书笔记 洛克菲勒写给孩子的38封信 第1封信:起点不决定终点 人人生而平等,但这种平等是权利与法律意义上的平等,与经济和文化优势无关 第2封信:运气靠策划 ...

  4. 股神大家了解多少?深度剖析股神巴菲特

    股神巴菲特是金融界里的传奇,大家是否都对股神巴菲特感兴趣呢?大家对股神了解多少?小编最近在QR社区发现了<阿尔法狗与巴菲特>,里面记载了许多股神巴菲特的人生经历,今天小编简单说一说关于股神 ...

  5. 2014巴菲特股东大会及巴菲特创业分享

     沃伦·巴菲特,这位传奇人物.在美国,巴菲特被称为"先知".在中国,他更多的被喻为"股神",巴菲特在11岁时第一次购买股票以来,白手起家缔造了一个千亿规模的 ...

  6. 《成为沃伦·巴菲特》笔记与感想

    本文首发于微信公众帐号: 一界码农(The_hard_the_luckier) 无需授权即可转载: 甚至无需保留以上版权声明-- 沃伦·巴菲特传记的纪录片 http://www.bilibili.co ...

  7. 读书笔记002:托尼.巴赞之快速阅读

    读书笔记002:托尼.巴赞之快速阅读 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<快速阅读>之后,我们就可以可以快速提高阅读速度,保持并改善理解嗯嗯管理,通过增进了解眼睛和大脑功能 ...

  8. 读书笔记001:托尼.巴赞之开动大脑

    读书笔记001:托尼.巴赞之开动大脑 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<开动大脑>之后,我们就可以对我们的大脑有更多的了解:大脑可以进行比我们预期多得多的工作:我们可以最 ...

  9. 读书笔记003:托尼.巴赞之思维导图

    读书笔记003:托尼.巴赞之思维导图 托尼.巴赞的<思维导图>一书,详细的介绍了思维发展的新概念--放射性思维:如何利用思维导图实施你的放射性思维,实现你的创造性思维,从而给出一种深刻的智 ...

  10. 产品读书《滚雪球:巴菲特和他的财富人生》

    作者简介 艾丽斯.施罗德,曾经担任世界知名投行摩根士丹利的董事总经理,因为撰写研究报告与巴菲特相识.业务上的往来使得施罗德有更多的机会与巴菲特亲密接触,她不仅是巴菲特别的忘年交,她也是第一个向巴菲特建 ...

最新文章

  1. Android SDK 路径修改
  2. 智源论坛Live丨青年科学家线上报告会日程发布
  3. matlab graphminspantree
  4. python相关参考文献_python机器学习理论与实战(六)支持向量机
  5. canvas图像保存
  6. [leetcode] 154.寻找旋转排序数组中的最小值 II
  7. react jest测试_如何使用Jest和react-testing-library测试Socket.io-client应用程序
  8. multisim中轻触开关在哪_现货供应轻触开关|品质确保|厂家直销
  9. c 语言开发一个四则运算器,C++实现四则运算器(无括号)
  10. AndroidStudio断点调试
  11. Tensorflow 循环神经网络-时间序列表示
  12. Centos7安装mongodb
  13. 时间操作(Java版)—获取给定时间与当前系统时间的差值(以毫秒为单位)
  14. [09]表单元素(下)
  15. 采购模板html5,新建采购单.html
  16. C#实现office文档转换为PDF或xps
  17. 【C语言】一维数组传参和二维数组传参的总结
  18. matlab图片测量尺寸_基于MATLAB的不规则面积图像测量
  19. 首涂第八套苹果CMSv10自适应视频模板原创4种颜色风格一键切换
  20. ppt密码忘记了怎样能打开文档,ppt权限密码如何解开?

热门文章

  1. 微信公众号生成带参数的二维码
  2. 为什么不包含头文件时fabs()函数返回的结果错得很离谱?为什么一定要先声明后调用?
  3. Ubuntu20.4系统隐藏顶栏
  4. Joplin迁移思源笔记
  5. css3南瓜幽灵动画代码
  6. 在HCNA学习的第三天
  7. 原生JS验证码登录界面
  8. OWASP(开放Web软体安全项目- Open WebApplication Security Project)是一个开放社群、非盈利性组织,长期致力于协助政府或企业了解并改善网页应用程式与网页服务
  9. mysql 5.72 安装_mysql 5.7安装脚本
  10. 五一不想被堵建议你去渭南周边清净人少的地方去游玩