- 博客(146)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 《Flask Web开发》读书笔记索引
完整代码注:本书没有涉及太多原理性的内容,实践性非常强,适合快速入门~git clone git@github.com:MiaLi0521/FlaskyEasyDemo.git目录第一章 安装https://blog.csdn.net/Geroge_lmx/article/details/104028500第二章 FLASK应用的基本结构(一)https://b...
2020-03-12 16:42:04
174
原创 Linux下安装Jupyter并配置多个ipykernel
①安装Jupyter:pip install -i https://pypi.douban.com/simple jupyter②生成配置文件:jupyter notebook --generate-config③生成固定密码: from notebook.auth import passwd passwd()④修改配置文件:vim /root/.jupyter/jupyter_notebook_config.py c.NotebookApp.passw...
2020-12-23 16:01:25
1422
原创 Ceph入门系列(一)
Ceph介绍 Ceph是一种热门的软件定义存储(SDS)技术,可以运行在几乎所有主流的 Linux 发行版(比如CentOS和Ubuntu)和其它类UNIX操作系统(典型如FreeBSD)。Ceph是一个开源项目,为块存储、文件存储和对象存储提供了统一的软件定义存储解决方案,既支持传统的块、文件存储协议,例如 SAN 和 NAS ;也支持对象存储协议,例如S3和Swift。Ceph具有如下特点:Ceph是一个真正的SDS解决方案,它可以从软件层面正确提供所有的企业级存储特性:低成本、可
2020-05-24 16:57:30
917
原创 Pandas引言(二)
DataFrame的基本操作读取数据集import pandas as pdimport numpy as nptitanic_survival = pd.read_csv('titanic_train.csv')titanic_survival.head()查看 Age 列的缺失值情况age = titanic_survival['Age']pd.isnull(age).loc[:6]使用布尔型Series过滤缺失值age_not_null = age[age.isnull(
2020-05-24 16:55:31
317
原创 Pandas引言(一)
DataFrame基本操作使用pandas读取CSVimport pandas as pddf = pd.read_csv('food_info.csv')df.head(5)df 即 pandas 的 DataFrame 对象,在Jupyter中的运行结果如下:DataFrame的常用操作查看DataFrame的shape:获取表中所有数值类型的常用统计指标:DataFrame的列索引还可以获取将列索引转化为 list列索引对象可迭代:遍历列索引对象,获取所有以 g 为
2020-05-24 16:46:34
257
1
原创 《Flask Web开发实战》(李辉著)阅读目录
《Flask Web开发实战 入门、进阶与原理解析》的作者是李辉,页数为1089 页,但是非常推荐阅读,正如这本书的标题所言,不管是Flask入门、实战还是进阶都非常适合。全书由浅及深,从写一个仅有一个路由,一行返回内容的Flask应用到告诉你如何选择和使用分区式架构、功能式架构以及混合式架构搭建一个复杂的Flask应用;最后的进阶篇作者还会带我们进入源码的世界,感受Flas...
2020-04-28 21:23:58
1922
3
原创 Docker 7 - 案例实战(一)
一. BusyBox工具箱 Linux系统的瑞士军刀,集成了100多个常用的软件工具箱,但大小却只有几兆,十分精巧。首先,下载 BusyBox 镜像:[root@localhost ~]# docker pull 192.168.255.128:5000/busyboxUsing default tag: latestlatest: Pulling from busyb...
2020-04-23 00:33:38
678
原创 Docker 6 - 网络管理
一. 宿主机端口映射访问容器1.1 使用 -P 随机映射一个端口至容器内部开放的网络端口 使用 -P 创建端口映射时,将容器的8080端口随机地映射到了宿主机的32769端口,可以使用 docker portcontainer 查看端口映射情况:此时,我们在浏览器中访问http://192.168.255.128:32769/时,可能出现404错误,原因多半...
2020-04-22 23:24:42
244
原创 Docker 5 - 数据管理
一. 数据卷 想必大家都使用过U盘、光盘等外部存储设备,通过将U盘等外部存储设备挂载到系统中的一个挂载点,即可实现对这些外部设备的读写操作。 数据卷即供容器使用的一个特殊目录,和Linux系统挂在U盘等存储设备时使用的mount命令非常类似。对数据卷的修改立即生效,并且不会影响生成的镜像,卷会一直存在,直到没有容器使用它。 通常我们会挂载一...
2020-04-22 20:28:37
214
原创 Docker 4 - 仓库
一. 仓库概念 仓库即存放镜像的地方,分为公有仓库和私有仓库。Docker的官方仓库为 hub.docker.com,工作中我们也经常需要搭建公司内部的私有仓库。Docker提供了自己的仓库搭建工具,如我们前面介绍的registry;工作中更受欢迎的一个Docker私服搭建仓库工作为Nexus。二. Nexus Repository 创建私有仓库2.1 私服概述 ...
2020-04-22 01:47:40
285
原创 Docker3 - 容器
一. 创建容器容器即镜像的实例,为可写入层,具有轻量级,易创建和删除等特点。使用 docker run 命令创建并运行容器,执行完毕后容器终止。基本的命令格式为:docker run -it REPOSITORY[:TAG] /bin/bash或docker run -it IMAGE-ID /bin/bash常用的可选的参数及含义:-i:让容器的标准输入保持打开 -t:分...
2020-04-22 01:19:45
228
原创 Docker 2 - 镜像
一. 获取镜像获取镜像的命令为:# tag省略时,默认从镜像仓库获取最新版本docker pull name[:tag]其中name[:tag] 中,tag可省略,表示获取最新版本;name由url路径+镜像名称组成,url路径省略是,默认从hub.docker.com获取镜像。但速度比较慢,常用的国内镜像源有:DaoCloud镜像市场:https://hub.daocloud...
2020-04-21 19:04:18
244
原创 Docker 1 - 概述
一. Docker产生的背景 提高资源的利用率,实现分布式的计算。云计算的核心即虚拟化和分布式,利用Docker我们可以在多台服务器轻松地扩展应用。我们所熟知的虚拟机VMWare即一种虚拟化技术,VMWare建立在操作系统之上,并且VMWare内部可以运行多个应用。但VMWare本身会占用一定的机器资源,对硬件是有损耗的。而我们接下来要学习的Docker则是一种容器虚拟化技术,即...
2020-04-17 17:21:13
210
原创 第三章(提炼)字典和集合(三)
一. 集合论1.1 结合字面量1.2 集合推导1.3 集合的操作二. dict和set的背后2.1 一个关于效率的实验2.2 字典中的散列表2.3 dict实现原理及其导致的结果2.4 set实现原理及其导致的结果三. 总结...
2020-04-07 10:36:15
213
原创 第三章(提炼)字典和集合(二)
一. 映射的弹性键查询 某个键在映射里不存在,我们也希望在通过这个键读取值的时候能得到一个默认值。有两个途径能帮我们达到这个目的,一个是通过 defaultdict 这个类型而不是普通的 dict,另一个是给自己定义一个 dict 的子类,然后在子类中实现 __missing__ 方法。1.1defaultdict:处理找不到的键的一个选择 在实例化一个 ...
2020-04-06 21:10:58
205
原创 第三章(提炼)字典和集合(一)
dict 类型不但在各种程序里广泛使用,它也是 Python 语言的基石。模块的命名空间、实例的属性和函数的关键字参数中都可以看到字典的身影。跟它有关的内置函数都在 __builtins__.__dict__模块中。 正是因为字典至关重要,Python 对它的实现做了高度优化,而散列表则是字典类型性能出众的根本原因。集合(set)的实现其实也依赖于散列表,因此本...
2020-04-05 21:56:59
206
原创 第二章(提炼) 序列构成的数组(四)
一. 用bisect来管理已排序的序列 bisect 模块包含两个主要函数,bisect 和 insort,两个函数都利用二分查找算法来在有序序列中查找或插入元素。1.1 用bisect来搜索演示1在有序序列中用 bisect 查找某个元素的插入位置二. 当列表不是首选时三. 总结...
2020-04-05 20:09:00
459
原创 第二章(提炼) 序列构成的数组(三)
一. 对序列使用+和* Python 程序员会默认序列是支持 + 和 * 操作的。通常 + 号两侧的序列由相同类型的数据所构成,在拼接的过程中,两个被操作的序列都不会被修改,Python 会新建一个包含同样类型数据的序列来作为拼接的结果。 如果想要把一个序列复制几份然后再拼接起来,更快捷的做法是把这个序列乘以一个整数。+ 和 * 都遵循这个规律,不修改原有的操...
2020-04-04 17:09:08
245
原创 第二章(提炼) 序列构成的数组(二)
元组除了用作“不可变的列表”,还可以用于记录没有字段名的记录。一. 元组不仅仅是不可变列表1.1 元组和记录 元组其实是对数据的记录:元组中的每个元素都存放了记录中的一个字段,外加这个字段的位置。正是这个位置信息给数据赋予了意义。如果只把元组理解为不可变列表,那其它信息——它所含有的元素的总数和它们的位置,似乎就变得可有可无。但是如果把元组当作一些字段的集合,那么数量和位...
2020-04-04 13:25:58
279
原创 第二章(提炼) 序列构成的数组(一)
一. 内置序列类型 Python标准库用C实现了丰富的序列类型:容器序列:list、tuple和collections.deque这些序列能存放不同类型的数据; 扁平序列:str、bytes、bytearray、memoryview和array.array,这类序列只能容纳一种类型; 容器序列存放的是它们所包含的任意类型对象的引用,而扁平序列存放的是值而不是...
2020-04-03 15:52:33
231
原创 第一章(提炼) Python数据模型
Python风格的关键完全体现在Python的数据模型上,而数据模型所描述的API,为使用最地道的语言特性来构建开发者自己的对象提供了工具。当Python解析器遇到特殊句法时,会使用特殊方法去激活一些基本的对象操作。特殊方法以双下划线开头,以双下划线结尾(如:__getitem__)。如:obj[key]的背后就是__getitem__方法。魔术方法是特殊方法的昵称,特殊方法也叫双...
2020-04-02 21:58:02
245
原创 python实现协程(六)
本节介绍asyncio剩余的一些常用操作:事件循环实现无限循环任务,在事件循环中执行普通函数以及协程锁。一. 无限循环任务 事件循环的run_until_complete方法运行事件循环时,当其中的全部任务完成后,会自动停止循环;若想无限运行事件循环,可使用asyncio提供的run_forever方法:import asyncioimport ti...
2020-03-30 08:50:46
3363
原创 python实现协程(五)
一. asyncio基本操作1.1 任务状态 上一节我们提到asyncio的任务使用协程对象作为参数创建。并且任务含有多种状态。下面我们使用一个简单的例子来说明任务的各种状态。import timeimport asyncio@asyncio.coroutinedef do_some_work(): print('Coroutine start.')...
2020-03-29 20:15:28
349
1
原创 python实现协程(四)
我们本节开始学习的python asyncio包,使用基于事件循环驱动的协程实现并发。这是python中最大,也是最具雄心壮志的库之一。既然async基于事件驱动,那么让我们首先来了解下事件驱动编程,再进入正题。一. 事件驱动 事件驱动编程是一种编程范式,程序的执行流程由外部事件来决定。它的特点是包含一个事件循环,当外部事件发生时,使用一种回调机制来触发相应的...
2020-03-29 10:40:00
356
原创 python实现协程(三)
一. 让协程返回值 下面的例子,我们再次改版之前计算平均值的协程函数,这一版本的协程函数每次被激活时,不会自动产出平均值,而是在最后返回一个值。(averager协程返回的结果是一个namedtuple,2个字段分别是count和average):from collections import namedtupleResult = namedtuple('Result'...
2020-03-28 19:01:46
215
原创 python实现协程(二)
一. 预激活协程的装饰器 调用协程函数后,返回的是一个协程对象,函数本身并不会执行。所以在调用send方法前,必须使用next()或send(None)来预激活协程函数,是协程函数执行到第一个yield表达式,处于暂停状态。为了简化操作,下面我们定义一个预激活的装饰器:from functools import wrapsdef coroutine(func): ...
2020-03-28 12:10:00
214
原创 python实现协程(一)
python成成器中用到的 yield item 具有2个含义“产出”和“让步”。yield item这行代码会产出一个值,提供给next()调用方;此外还会做出让步,即暂停执行生成器,让调用方继续工作,直到需要使用另一个值时,才会回到生成器上次退出的地方继续执行。 从句法上看,协程与生成器类似,都是包含yield关键字的函数。但在协程中,yield表达式通常为:...
2020-03-27 22:14:26
492
原创 python处理并发导读与目录
在阅读Python处理并发的系列文章前,正确区分 进程/线程、并行/并发、阻塞/非阻塞、同步/异步 概念非常重要,是学习本部分内容的基础,也是面试中经常会被问到的内容。一. 概念区分1.1 进程和线程 一个正在运行的程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。其中,线程是操作系统分配处理器时间片的最小单位。进程间是相互独立的,一个进程无法访...
2020-03-27 19:37:56
236
原创 字典和集合(一)
一. 初识字典 字典一种可变的容器,可以存储任意类型的数据,数据以键(key)-值(value)对的形式进行映射存储。字典中的每个数据都是用“键”(key)进行索引的,而不像序列可以用下标进行索引,因此键不能重复,且只能用不可变类型作为字典的键。数据没有先后顺序关系,字典的存储是无序的。1.1 表示方式 {} 括起来,以冒号(:)分隔键-值对,各个键-值...
2020-03-25 21:24:50
167
原创 第十六章 性能(一)
经过了各种测试,代码的正确性和质量都有了很大保证,但是,部署前的准备工作尚未结束。虽然代码能实现预期的效果,但在性能上未必是合格的。页面加载时间太长会让用户失去兴趣,所以尽早发现并修正性能问题是一件很重要的工作。我们可以从请求响应的流程中的下面几个环节来进行优化:函数执行 数据库查询 模板渲染 页面资源加载 我们可以Flask-DebugToolBar的性能分...
2020-03-14 18:57:03
334
原创 第十五章 测试(四)
使用Coverage.py计算测试覆盖率 对于测试的质量,有一个重要的考虑指标----测试覆盖率(test coverage)。100%的测试覆盖率是理想目标,但有些时候并不是那么容易实现。对于大多数项目来说,应该尽量将测试覆盖率保持在90%左右。 Coverage.py是一个使用python编写的检查代码覆盖率的工具,我们可以使用它来检查测试覆盖率,首先使用pip...
2020-03-14 08:57:37
295
原创 第十五章 测试(三)
使用Selenium进行端到端测试 Flask中的测试客户端不能完全模拟运行中的应用所处的环境。例如:如果应用依赖在客户端浏览器中运行的JS代码的话,就不能使用Flask测试客户端,因为返回给测试的响应中的JS代码不会执行。 多数Web浏览器都支持自动化操作。Selenium是一个Web浏览器自动化工具,支持3中主要操作系统中的多数主流Web浏览器。使用pipenv...
2020-03-13 21:47:51
351
原创 第十五章 测试(二)
测试WEB服务Flask测试客户端还可用于测试REST式WEB服务。tests/test_api.py:使用Flask测试客户端测试REST式APIimport unittestimport jsonimport refrom base64 import b64encodefrom app import create_app, dbfrom app.models impor...
2020-03-13 19:12:52
191
原创 第十五章 测试(一)
编写单元测试主要有2个目的:实现新功能时能够确保新添加的代码按预期方式运行; 每次修改应用后,运行单元测试能确保现有代码的功能没有回归,即新改动没有影响代码的正常运行; 从一开始我们就为Flasky应用编写了单元测试,检查数据库模型类有没有实现功能。由于模型类很容易在运行中的应用上下文之外进行测试,故应用中我们将绝大多数业务逻辑都放在了模型类中实现,视图函数中的代...
2020-03-13 18:31:23
272
原创 第十四章 应用编程接口(五)
一. 使用HTTPie测试WEB服务在上一小节,我们使用了Postman测试WEB api,如果钟爱于使用命令行测试,那么也可以使用HTTPie。1.假设服务运行在127.0.0.1:5000上,在另一个窗口可以使用如下方式发起get请求:http --json --auth 用户名:密码 GET http://127.0.0.1:5000/api/v1/posts/将分页返回博...
2020-03-12 15:13:18
269
原创 第十四章 应用编程接口(四)
一. 资源的序列化和反序列化准备 把内部格式转换为JSON格式的过程称为序列化,我们将资源序列化的函数定义在各模型类中,提供给客户端的资源表示没有必要与数据库模型字段完全一致。返回的数据中除了自身描述,我们还添加了返回其它资源的URL:class User(UserMixin, db.Model): def to_json(self): json_us...
2020-03-12 10:08:57
259
原创 第十四章 应用编程接口(三)
与普通WEB应用一样,WEB服务也需要保护信息,确保未授权的用户无法访问。我们已经知道,REST式WEB服务的特征是无状态,即服务器在2次请求之间不能记住“客户端”的任何信息。客户端必须在发出的请求中包含所有必要信息,因此所有请求都必须包含用户凭据。 Flasky应用当前的登录是由Flask-login实现的,数据存储在用户会话中。我们不妨先来回顾下Flask-Lo...
2020-03-11 19:25:53
233
原创 第十四章 应用编程接口(二)
使用Flask创建REST式WEB服务十分简单。使用熟悉的route()装饰器及其methods可选参数可以声明服务及其所提供资源URL的路由。处理JSON数据同样简单,请求中的JSON数据可以使用request.get_json()转换成字典格式,还可以使用Flask提供的辅助函数jsonify()从Python字典中生成需要包含JSON的响应。一. 创建API蓝本...
2020-03-11 16:45:26
256
原创 第十四章 应用编程接口(一)
近些年,随着WEB应用中,业务逻辑被越来越多地移到客户端,服务器的主要功能(有时是唯一功能)是为客户端提供数据存取服务。在这种模式中,服务器变成了Web服务或应用编程接口(API)。在编写API时,表现层状态转移(REST)架构崭露头角。Flask是开发REST架构的理想框架,因为Flask天生轻量。本章我们将学习如何使用Flask实现符合REST架构的API。一. REST简...
2020-03-10 15:29:38
178
“正则表达式以及python re模块”演讲PPT
2018-11-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人