欢迎来 PyCon China 2019 听我的演讲和 Tutorial

有没有人要参加今年的 PyCon China 上海场(9/21)?欢迎一起来组团(加我微信,备注「PyCon 组团」)!我们到时可以一起见面交流,也可以做一些 Flask 相关的活动。Flask 作者 Armin Ronacher 和 Flask 维护者之一 Hsiaoming Yang(lepture)已经确认出席,到时我可以把他们俩拉来和大家一起聊天(英语不好没关系,会说 how do you do 就行)~

其实参加技术大会并不一定是要去学东西,也可以去交朋友,换工作(微软、AWS、Elastic、JetBrains 这些公司不考虑下么),找男/女朋友(没错,我们会有相亲墙,而且 PyCon 是有女生报名的,有多少暂时保密),感受技术氛围(假装会让自己变得更厉害)……

购票和优惠码

我从 PyCon 会务那里申请到三个优惠码,helloflask 可以让大会票减掉 100 块,hellopython 可以让所有 Tutorial(三小时一个的课程)打七折,hellogrey 可以让我的那个 Tutorial(T3,Python Web 开发第一课)打六折。每个优惠码各有 20 个名额。

大会购票和详细日程见 bagevent.com/event/5293

大会官网在 https://cn.pycon.org

主题演讲

在所有主题演讲中,我比较期待(和能听懂)的大概有下面这几个(主要都在分会场 B):

  • Python 的永恒之美 – Luciano Ramalho – 《流畅的 Python》作者
  • 调试是一种新的发布:慢语言的意外优势 – Armin Ronacher – Flask 作者
  • 危险的 Flask – Hsiaoming Yang(lepture) – Flask 维护者
  • 基于 Flask 的 REST API 开发指南 – 李辉 – 我
  • Django 中的 GraphQL – 李齐雨 – LeetCode
  • Django Migration Under the Hood – 赖信涛 – 蚂蚁金服

除此之外,还有好几个分会场大概 30 个演讲,包括语言特性、人工智能、微软专场、基础架构、创新领域。另外 AWS 还提供了一个 Workshop,具体日程和演讲介绍见这里

闪电演讲

闪电演讲(5 分钟一场)是今年我参与组织 PyCon China 后推动添加的新环节,我也会负责闪电演讲的主持(第一次做主持人……紧张 ><)。闪电演讲会在分会场 B(Web 专场)进行,下午 4:40 开始,是独占环节。如果你参加今年的 PyCon,一定不要忘记来这里。

  • 【Python 虚拟环境和依赖管理工具大乱斗】 – 李辉 – 我
  • 【500 行 Python 写一个渲染器】- 谭啸 – 蚂蚁金服开发工程师
  • 【基于 OwlReady2 的人机交互】- 宋从威 – 浙江工业大学之江学院讲师
  • 【Byte Code 的革命】- 赵俊德 – 西安德新软件创始人
  • 【使用 Sphinx 制作 Web 文档】- 陈照强 – 中科院上海药物所高级研究员
  • 【一键将 C/C++ 代码转换为 Python 能调用的代码】- 韦泽华 – 上海韦纳科技有限公司
  • 【闭幕:今天什么也没听懂,PyCon 就要结束了】- 李辉 – 主持人

Tutorial:Python Web 开发第一课

今年 Tutorial 的设置主要参考了 PyCon US,形式是三小时的收费实践课程(单独收费,在 9/22),由《流畅的 Python》作者的两个 Tutorial 打头阵,而微软贡献了一个免费的 Tutorial。

我的 Tutorial 是一个面向 Python 初学者的 Web 开发入门课程(T3:Python Web 开发第一课),动手实践的部分会使用 Flask,欢迎参加。另外,Flask 维护者之一 Hsiaoming Yang 也有一场面向初学者的 Tutorial(T6:从零开始打造一个 Python 开源项目),详情见下面的链接。

Tutorial 详细日程和购票:bagevent.com/event/5886

别忘了用优惠码,我的那场(T3)可以用 hellogrey 优惠码,其他的 Tutorial 可以用 hellopython 优惠码。下面是我的 Tutorial 介绍:

介绍

这是一个面向 Python 程序员的 Web 开发课程,目标听众需要对 Python 基本语法有一定的了解,但对 Web 开发的了解程度没有要求。

在这个课程里,我会将 Python Web 开发所涉及的相关概念进行一个系统的梳理和介绍,包括 HTTP 协议、前端基础知识、常用的 Python Web 框架以及其他各种工具。

这个课程还会包含一个动手编程的环节。我会从最让人头疼的开发环境搭建开始,一步一步教你如何使用 Flask 开发一个简单的 Web 程序。

在课程过后,参与者会对整个 Python Web 开发技术栈有一个全局认识,并掌握基本的 Web 开发知识,而且会对接下来的学习路径有一个清晰的了解。

流程

一、基本概念

  • Python Web 开发技术栈地图
  • HTTP 协议基础知识(请求与响应、URL 等)
  • 前端基础知识(HTML、CSS、JavaScript、AJAX 等)
  • Python 后端框架的特点和选择(Flask、Django 等)
  • 传统 Web 程序和 Web API 的对比
  • 测试、部署、持续集成等相关概念快速扫盲

二、动手编程

  • 开发环境搭建
  • 运行和调试程序
  • 编写 HTML 模板
  • 添加表单支持
  • 添加数据库支持

三、Q&A

  • 介绍常见的学习误区和建议的学习方向
  • 关于代码或其他任何相关内容的提问

内容难度:初级

目标听众

  • 想了解 Web 开发的前端、运维、测试或其他工程师
  • 想自己做网站的编程爱好者
  • Web 开发或 Python 初学者

听众要求

  • 了解 Python 基本语法
  • 有一台安装了 Python 和浏览器的电脑,并且了解命令行基本操作
  • 其他的要求我们会具体沟通

我不喜欢这个哪吒

前段时间去看了《哪吒之魔童降世》,但是过后总有一些不舒服的感觉。整部影片的观感还不错,尤其是剧情和对白以外的地方,总体上要比《流浪地球》那种烂片强得多。

让人讨厌的哪吒角色

哪吒的角色让我想起前段时间的《流浪地球》里刘启的角色,让人很反感。有时候未成年人的叛逆是值得鼓励和赞许的,比如你反抗不公平不合理的制度,和穿新衣的皇帝叫板,这些都是可贵的反叛。但是你喜欢说脏话、不懂礼貌、做事情不负责任,这就是另一种让人讨厌的幼稚叛逆。这时候如果你还声称要做自己,要打破别人的偏见,还要扯什么「我命由我不由天」,那我实在没法理解这其中的逻辑。

意思就是我欺负百姓,放火烧屋,不尊重长辈,但我其实是个好孩子?怪就怪你们当初否定我——你们说我坏,所以我就坏给你们看?为了证明自己并不坏,所以去抓妖怪,毁房烧屋也没关系,被误会和欺负就想杀人(几次差点杀死人)?

在我来看,这里的哪吒完全就是一个性情暴躁、品行恶劣、行为怪异的熊孩子。一个动不动就打打杀杀的暴力狂,大部分时间都是在发泄自己暴躁的情绪。很像《告白》里面那个发疯的杀人凶手少年 B。

从父母教育的层面看,如果我的儿子只有三年生命,我也会用正确的方式来教育他,而不是溺爱他,放任他胡作非为,不讲礼貌。即使白天再多妖怪要杀,晚上没时间陪孩子吗?怎么也不至于让他变成一个这么讨厌的野孩子……

空洞的反叛

电影的一些情节、对白和角色都让人感觉「很周星驰」,但是周星驰来拍的话,绝对不会加入那些煽情、说教和空洞的反叛口号。我认为这个电影想表达的反叛很空洞,完全是流于形式。

这里的哪吒满口「我命由我不由天」,给我的感觉只有虚伪和做作。明明就是混沌状态的熊孩子,一边做着各种不成熟的事情,一边还喊着这样的反叛口号,我真的没看出来这个哪吒在反叛什么。

按照我的理解,好的电影应该是一件雕塑,而不是一个箱子。既然没法合理的表达出反叛(在大部分值得反叛的东西没法通过审查的情况下),那就不要勉强。如果不能自然的搞笑,那就不要搞笑。不知道为什么国内的电影总是拼命塞进更多的笑料,不管是什么题材的电影,不管有些笑料多么低俗和无聊,就像是拼命塞满过时流行语的领导发言一样让人尴尬。

这种把电影当做箱子的另一个结果就是风格混乱,一会儿像周星驰(无厘头),一会儿像日漫(热血战斗)。如果不弄这些空洞的反叛,风格统一,就做一个完整的爆米花喜剧故事,应该会更好。

还有一些情节值得吐槽,但过去太久已经记不太清了,大概都是没有用心推敲的结果。比如最后老百姓围成一圈跪下来。为什么要跪?膝盖灌铅啦,中国影视剧里的古代普通民众总是动不动就要跪,皇帝和大官来了要跪,神仙和假装是神仙的妖怪来了要跪,不管是不是英雄,只要别人说是英雄来了也要跪。好像只要你走在街上,不管发生了什么事情,只要看到前面有人跪了,后面的人就要一个接一个的跪。虽然不知道古代人是不是真的这么喜欢跪,但在这个电影里,灾难本来就是哪吒带来的,他们都不知道吗?为什么要向自己害怕、厌恶和给自己带来灾难的人下跪?

最后,电影里哪吒一直想反抗的人类偏见消除了吗?我想并没有。所以这个电影拍到最后到底在表达什么?

哪吒不该是这样

我之所以想写这篇文章,是因为我在心里是珍视哪吒这个角色的。虽然他们有改编的自由,但这部电影在很多人心里毁掉了那个反抗权威和父权的哪吒形象(反而这部电影里敖丙才更哪吒)。

哪吒不像孙悟空那样无牵无挂,可以彻底的反叛和藐视一切。哪吒有父母,像是拴在身上的温柔锁链,这其实是现实里大多数人的状态。说起来也许有点幼稚,高中的时候我给自己起的英文名就是 Nalakuvara Li(李哪吒),Twitter 上的头像很长一段时间都是哪吒自刎的图片。相应的,那时候也很喜欢哪吒乐队和痛仰,不过前者早早的夭折,而在后者那里,哪吒最终还是双手合十,不再愤怒了。

是呀,当你有家和孩子要养,有各种贷款要还的时候,谁还有时间、精力和勇气愤怒和反叛呢?


发现写影评好难,为了严谨你可能要重新看一遍甚至很多遍,要不然只能删掉不确定的内容。而且有的观点很难确认是自己一厢情愿的理解,还是电影本身想表达的东西。

再见小巴

小巴是我家的狗,大概两岁了。我从五月份离开家来南京就没再见过它,它现在失踪了。

这段时间,每天早上爸都会带它去散步,但现在早晨的田边却再也没有它的身影了。瑶瑶上周寄回家的一袋狗粮,大概还只吃了一点点。

小巴小时候非常可爱

小巴在来我们家之前,有过一段挨饿的生活,所以养成了贪吃的习惯,而且在吃这件事情上非常自私。假如你给它一根鸡腿,但是它刚好不太饿,没有胃口,它就会坐在地上看着鸡腿。一旦你开始伸手去拿鸡腿,说着「不吃我要拿走咯」,它就会立刻开始吃起来。有时候,它还会把鸡腿藏到土里埋起来,等到哪天饿了却没东西吃,就把变了颜色沾满土的僵尸鸡腿拿出来吃,好像味道和新的没差别一样。

小巴还喜欢叼东西,大概是因为它可以把嘴长得很大,天分使然吧。它总是把任何可以当做玩具的东西叼到它的窝里面,网球(它的专属玩具)、水瓶(它的窝里通常都会堆着好几个水瓶)、鞋子(通常是我弟的,大概它比较喜欢有味道的东西……)等等各种能被叼起来的东西。

我们偶尔会把这个当做游戏逗它:把它的玩具偷偷从它的家里拿出来,然后丢到更远的地方,它一旦抢到就会飞奔带回去。次数多了以后,它一旦发现了喜欢的东西,就会立刻叼起来往家跑,所以有时它会从卧室偷偷叼起来拖鞋或袜子,然后爸妈就跟在后面追(不过小巴肯定以为在玩游戏)。偶尔它也会叼棍子回去,但是很多时候因为棍子比它的房门要宽,所以经常会卡在门口进不去……真是笨拙的可爱呀!

我们家对于养宠物这件事有一些共识,我们都不愿意把狗栓起来当做可怜的看门狗,所以我们家的狗都是自由的,而且伙食水平和其他邻居的狗相比简直就是天上地下的区别,所以每次要吃饭的时候总有很多邻居的狗围过来。在我们家的这段时间,小巴每天都可以和其他朋友到处疯跑,而家里永远提供水、食物、住宿和按摩服务。我想至少它快乐自由的生活了两年。

和小巴在田里散步

在农村养狗真是一个风险很高的事情,除了做好疾病预防的准备,你还要避免让他吃太多,要不然长得太胖就会成为狗贩子的目标……我们都决定暂时不再养狗了,大家都不想再承受这种失去心爱宠物的痛苦。以前也有很多可爱的狗狗,我们都互相陪伴了一段时间,但总是它们先离开。写这篇文章,是想让这个世界多一些小巴的影子。

我不在家的这几个月,因为爸妈没时间好好照顾它,小巴瘦了很多,但是每天依然都玩的很开心,虽然没有我和瑶瑶陪它,但它还是有很多同类的朋友。不过不知道它会不会偶尔想起我来,会不会想,那个经常和我赛跑,抢网球,拿东西给我吃的人去哪里了?

刚淋完雨回来的小巴

蛇蛋:Python 中隐藏的彩蛋和笑话列表

这是一个 Python 中隐藏的彩蛋和笑话列表。如果你还知道其他有趣的彩蛋和笑话,欢迎在 GitHub 上创建 PR 添加。

项目地址:https://github.com/greyli/shedan

Python 比你想象中的更有趣。

A little girl goes into a pet shop and asks for a wabbit. The shop keeper looks down at her, smiles and says:

“Would you like a lovely fluffy little white rabbit, or a cutesy wootesly little brown rabbit?”

“Actually”, says the little girl, “I don’t think my python would notice.”

—Nick Leaton, Wed, 04 Dec 1996, Python Humor

1. Hello World

>>> import __hello__
Hello World!

Note:在 Python 中打印「Hello, World!」最简单的方式。

2. Python 之禅

>>> import this

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Note:Python 设计哲学 & Python 代码风格指南。

3. 《Python 之禅》丢失的一行

《Python 之禅》在 PEP 20 中引入,它本应该是 20 条格言,但是最终只写了 19 条。

Note:也许只是为了说明在文件的结尾总是应该保留一个空行。

4. 一堂简单的人生课

>>> import this
...
>>> love = this
>>> this is love
True
>>> love is True
False
>>> love is False
False
>>> love is not True or False
True
>>> love is not True or False; love is love  # FML
True

Note:不是彩蛋,只是一个解释器里的玩笑。

5. 反重力漫画

>>> import antigravity

Note:这会打开这个 xkcd 漫画,漫画展示了 Python 有多么简单易学。

6. 这不是一个选择,它定义了我们是谁

>>> from __future__ import braces
  File "<stdin>", line 1
SyntaxError: not a chance

Note:这用来快速结束任何关于在 Python 中引入大括号的讨论——不可能!

7. 起源

「Python」这个名字和蛇的种类没有关系。

Note:实际的来源是 Guido van Rossum 喜欢的电视剧《Monty Python’s Flying Circus》。

8. 反差

下面是打印出《Python 之禅》的 this.py 模块的内容:

s = """Gur Mra bs Clguba, ol Gvz Crgref

Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf orggre guna pbzcyvpngrq.
Syng vf orggre guna arfgrq.
Fcnefr vf orggre guna qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
Nygubhtu cenpgvpnyvgl orngf chevgl.
Reebef fubhyq arire cnff fvyragyl.
Hayrff rkcyvpvgyl fvyraprq.
Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
Abj vf orggre guna arire.
Nygubhtu arire vf bsgra orggre guna *evtug* abj.
Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""

d = {}
for c in (65, 97):
    for i in range(26):
        d[chr(i+c)] = chr((i+13) % 26 + c)

print("".join([d.get(c, c) for c in s]))

生成《Python 之禅》的代码本身违背了自己宣扬的风格建议。它丑陋而不美丽,隐式而不直观。

Note:使用了一种叫 ROT13 的置换加密法。

9. 有没有 C/C++ 用户?

再次引用《Python 之禅》:

There should be one-- and preferably only one --obvious way to do it.

Note:在很多语言里常常有两种方法做同一件事,即 --no 和 no--。这一行包含了一个隐藏的示例。

10. 命名标识符可以非常酷

>>> from math import pi
>>> π = pi
>>> area = π * r**2

>>> résumé = 'knows Python'
>>> 'Python' in résumé
True

>>> 我的英文名 = 'Grey Li'
>>> 我的英文名
'Grey Li'

>>> import webbrowser
>>> 我的网站 = 'http://greyli.com'
>>> webbrowser.open(我的网站)

Note:Python 3 中支持使用 Unicode 字符作为变量名。尽管如此,使用非英文字符作为变量名可能不是一个好主意,不过它确实会让处理科学公式的工作变得更有意思。

11. 选一个见面地点

>>> from antigravity import geohash
>>> # Your location, a date and that date's (or most recent) DJIA opening.
>>> # 你的位置,一个日期和这个日期(或最近)对应的道琼斯工业指数。
>>> geohash(37.421542, -122.085589, b'2005-05-26-10458.68')
37.857713 -122.544543

这可以用来生成一个 GPS 定位,在基于你所在位置的一个 1 经度长和 1 纬度宽的区域里。

Note:这个函数的源码在 这里,工作原理解释可以在这个 xkcd 漫画看到,也许这就是为什么这个函数也放到了 antigravity 模块里。

12. The FLUFL – Friendly Language Uncle For Life from PEP 401 — BDFL Retirement

>>> from __future__ import barry_as_FLUFL
>>> 1 <> 2
True
>>> 1 != 2
  File "<stdin>", line 1
    1 != 2
       ^
SyntaxError: invalid syntax

在认识到 Python 3.0 的不等运算符(!=)非常糟糕,是手指疼痛导致的错误后,FLUFL(指 Uncle Barry)重新恢复钻石型操作符(<>)作为唯一的不等运算符拼写。

Note:PEP 401 是一个愚人节玩笑(从编号可以看出来)。这个 PEP 声明 Guido van Rossum 要退休了。他会获得一个新的头衔,叫做「BDEVIL」(Benevolent Dictator Emeritus Vacationing Indefinitely from the Language,去度无限期语言假期的仁慈退休独裁者),接任者将会是 Barry Warsaw(即 Uncle Barry),Uncle Barry 的官方头衔是「FLUFL」(Friendly Language Uncle For Life,终生友好语言叔叔)。

13. InPynite?

>>> infinity = float('infinity')
>>> hash(infinity)
314159
>>> hash(float('-inf'))
-314159

一个散列值是一个固定尺寸的整型,它会标识一个特定的值。仔细观察,你会发现散列值的无限大是 10^5 x π。有意思的是,在 Python3 中,hash(float('-inf')) 将会生成 -10^5 x π,而在 Python 2 中则是 -271828(即 10^5 x e)。

Note:来源

14. types.CodeType – Not for the faint of heart

如果你开始钻进 Python 的内部,你会在 help 输出看到一个关于 types.CodeType 的警告:不适合心脏脆弱者。

>>> import types
>>> help(types.CodeType)
...
Help on class code in module builtins:                                                    
                                                                                          
class code(object)                                                                        
 |  code(argcount, kwonlyargcount, nlocals, stacksize, flags, codestring,                 
 |        constants, names, varnames, filename, name, firstlineno,                        
 |        lnotab[, freevars[, cellvars]])                                                 
 |                                                                                        
 |  Create a code object.  Not for the faint of heart.                                    
 |                                                                                        
 |  Methods defined here:                                                                 
 |                                                                                                                                       
 ...

翻译自 https://github.com/OrkoHunter/python-easter-eggs 项目,原项目没有许可协议,已通过邮件申请获得翻译和发布许可。

 

欢迎来 COSCUP 2019 听我的演讲

如果你报名了今年的 COSCUP 2019(开源人年会),欢迎来听我的演讲《如何在两年内从初学者成长为流行开源项目维护者和技术书作者?》,8 月 17 号(第一天)下午 2 点 55 开始,在 IB202 会议室。

如果你对这个演讲感兴趣,但是没法参加,那也没关系,会后我会把演讲视频和幻灯片分享出来。

庆幸能在两岸关系进一步恶化之前,去台湾玩一趟,希望一切顺利。

前后端分离?

有很多初学者因为受各种文章的吹捧而痴迷「前后端分离」这个词,刚开始学后端 Web 框架就想知道怎么实现前后端分离。就我目前有限的经验来看,前后端分离并没有那么重要,只是另一种程序架构(开发模式)而已。和传统的后端渲染的 Web 程序相比,并没有明显的优劣之分,两种方式都各有优缺点,也各有适合的场景。

没必要过分追捧任何一种语言、框架、工具、操作系统……都了解都能用最好,工具永远没有要做的事情重要。没有能胜任所有工作的完美工具,更多时候是按需选用最合适的工具。

囤积游戏

虽然一样都是没有时间玩,但购买实体游戏光盘和卡带要比数字版更让人感到幸福,至少你每天都可以看到一排花花绿绿的游戏放在那里,没事还可以拿过来换一换排列顺序……换句话说,实体游戏会让你有一种踏实的拥有游戏的感觉。等你有了一橱柜的游戏,还可以用来炫富(仅对游戏玩家有效)。

开始写作第二本 Flask 书

把自己的目标公之于众,有可能会因为受到监督而更容易完成目标,也有可能会让你潜意识里感觉自己好像已经完成了目标,从而让计划更难执行。我更相信前一种理论,所以决定现在公布第二本 Flask 书的写作计划。

为什么要再写一本 Flask 书?

尽管我很想早一点深入学习更多的东西,而不是局限在 Flask(或 Python) 领域,但事实是,在这一个领域就已经有太多的东西需要研究和学习……目前来说,我最想解决的就是 Web API 的编写问题。《Flask Web 开发实战》虽然在第十章介绍了 Web API 的大部分基础概念,但是只实现了一种 OAuth 认证流程,也没能深入更多内容,包括数据校验、请求封装等。因此,我决定再写一本书来覆盖这个主题。

另一个原因是,我在上一本书的电商页面、豆瓣条目还有其他地方收集到了一些批评,其中有一些很中肯,所以我想写一本更好的 Flask 书。除了克服这些批评里提到的缺点,我也会尝试更科学的写作方式,不会像上一本书那样在早期印刷版本包含那么多的笔误和疏漏。

作为试水,我在 PyCon China 2019 上海场会有一个相关主题的演讲:《基于 Flask 的 Web API 开发指南》,如果你感兴趣的话,可以考虑报名参加

新书会包含哪些内容?

不同于《Flask Web 开发实战》所追求的大而全,这本书的定位是一个小而精的 Flask 书。它会包含下面这几部分:

  • 一个更轻松简单的入门部分。
  • 进阶部分:开发一个传统 Web 程序。
  • 作为重点的 Web API 开发部分。
  • Flask 相关的进阶部分,包括缓存、异步任务、容器部署等。
  • 可能会加入的其他内容:FastAPI、Django REST Framework、GraphQL。

这本书一来可以衔接《Flask 入门教程》,二来可以补充《Flask Web 开发实战》没有覆盖的内容。当然,对于学习 Flask,囊括几乎所有相关主题的《Flask Web 开发实战》仍然是一个不错的选择。

对于相同的主题,我会考虑使用不同的工具,比如《Flask Web 开发实战》里单元测试使用 unitttest,那么这本书就会介绍用 pytest;上一本书里编辑器介绍使用 PyCharm,这一本书或许就会介绍使用 VSCode。

下面是这本书的其他具体设计:

  • 只使用一个示例程序,贯穿全书。
  • 使用中文作为示例程序的界面语言。
  • 使用 Python3,但在书中对 Python2 兼容部分添加必要的提示。
  • 对书中的代码块添加尽可能多的注释。
  • 添加一个「术语表」,收集所有 Flask 和 Web 开发相关的术语,尝试给它们下一个简单易懂的定义。
  • 添加一个「常见错误速查表」,列出常见错误、错误解释和对应的解决方法(在维护上一本书的时间里,我处理了大量提问,见识过各种错误和误区)。

作为后续,在这本书完成后,我计划写一本电子书来介绍如何使用 Vue.js 基于这本 Flask 书编写的 Web API 来开发客户端。尽管我现在还没入门 Vue.js……但是我已经把放相关内容的网站域名准备好了:HelloVuejs.com(它和 HelloFlask.com 是兄弟域名 :p)

什么时间能完成?

预计的发售时间是明年愚人节,即 2020 年 4 月 1 日。因为 Flask 的诞生时间是 2010 年的愚人节,所以明年愚人节会是 Flask 诞生十周年纪念日,一个很完美的发售时间。

如果你对这本书感兴趣,可以关注我的微信公众号Twitter豆瓣账号获取最新动态,或是访问这本书的主页

2020/4/1 更新:Flask 新书完成时间推迟

你想看到什么内容?

在公开上一本写作消息的文章里,我征集到了大约 40 条建议,虽然没能完全采纳,但我都一一考虑过这些很有价值的建议。对于这本新书,在内容、形式或是其他任何方面,你有什么意见和建议?欢迎发评论分享你的想法,谢谢。

PyCon China 2019 闪电演讲和 Flask 主题演讲征集

在 Python 诞生 30 周年之际,PyCon China 2019 将于 9 月 21 日在上海(主会场)举行,今年我们设置了闪电演讲和 Flask 专场,正在征集相关议题。

如果你对演讲不感兴趣,但是想购票参加,可以直接跳到文章结尾。

闪电演讲

5 分钟能做的事情很多,但是你有没有想过用这 5 分钟在技术大会上进行一场闪电演讲?如果你有些心动的话,现在就一个这样的机会放在你面前!

尽管只有 5 分钟,你仍然需要做足准备。反过来,5 分钟并不短,足够让你完成一场让人记忆深刻的精彩演讲。

不用担心自己「资历」不够,因为我们只关心你的演讲内容是否有趣和有质量;也不用担心自己没有演讲经验,因为我们将在会前进行一系列线上培训和交流,帮助你完成几次试讲并给出相应的建议和指导。

无论你最终是否提交议题,只要你感兴趣,都可以加我的微信(备注「闪电演讲」),我会邀请你加入微信交流群。

Flask 主题演讲

除了策划闪电演讲,我还负责策划一个 Flask 专场。如果你在 Flask 方面有过丰富的探索和实践,想和大家分享你的知识和经验,欢迎报名。当然,如果你想分享的内容和 Flask 无关,但和 Python 有关,也欢迎报名。

总而言之,只要你的演讲和 Python 有关,并且内容不算无聊,那就大胆提交你的议题吧!

报名方式和福利

点击下面的链接即可提交议题申请:

https://jinshuju.net/f/BH2z26

报名的城市会场不限上海,报名将在 8 月 10 号截止,如果你申请的是闪电演讲,记得在「演讲类型」选项里勾选对应选项。

如果你的议题成功入选,除了可以在 PyCon China 2019 大会上分享你的想法外,你还可以获得下面的福利:

  • 免费参加 PyCon China 2019 所有城市,所有主题会场;
  • 额外赠送两张对应城市的参会票,方便你带上自己的男朋友或女朋友;
  • 免费参与组委会特别策划的「Python 之夜」大聚会。

购票参会

如果你对演讲不感兴趣,那么报名参加大会也是一个不错的选择,点击下面的链接购买上海场门票(早鸟票 7 月 30 号截止):

https://www.bagevent.com/event/5293611

在这里,你将有机会交到穿着同款格子衬衫而且使用 Python 的朋友,还有机会和很多 Python 技术大牛小牛们面对面交流。我邀请到了两位 Flask 领域的重量级嘉宾,一个是 Flask 的作者 Armin Ronacher,另一个是 Flask 的维护者之一 Hsiaoming Yang(lepture)。Flask 目前的核心维护者 David Lord 虽然没能成行,但是表示可以远程支持 Sprint 活动。

如果你离上海太远,也可以考虑参与其他会场,比如北京、杭州、成都、深圳等等,具体议程可以关注 PyChina 公众号或 PyCon China 官网

PyCon China 2019,期待你的参与!