分类目录归档:Programming

《Flask 从入门到进阶》签名版预售

五年了,终于等到这一天。《Flask Web 开发实战》的全新升级版《Flask 从入门到进阶:Python Web 开发工程化实践》将于下个月正式发售。和上一版一样,先来预售作者签名版。

签名版

签名版的价格和上一版保持一致,依然是 109。付款方式和详细说明可以访问预售页面查看:

https://helloflask.com/book/4/signed/

签名版除了送 2 张 Flask 贴纸,还会额外送一张我的名片,可以用来当书签或者飞着玩。具体发货时间取决于正式发售时间,虽然不能完全保证,但我会尽量让签名书第一批发出。

新书名

你也许好奇为什么要换一个新书名,而不是作为第 2 版出版,即《Flask Web 开发实战(第 2 版)》。我设想了一些合理解释:因为内容变动比较多,换个更贴切的书名;在副书名里加一个 Python 关键字,更容易被别人搜索到……但背后实际的乌龙是:管理书号的工作人员在录入系统时打错了名字,把《Flask Web 开发实战》写成了《Flash Web 开发实战》。

按照出版规定,如果我想作为原书第 2 版来出版,那么新书名就只能叫《Flash Web 开发实战(第 2 版)》了。诸位应该也不想学 Flash Web 吧?

《Flask 入门教程》第 4 版发布

即将出版的新书(预计将于本月底发售)变成了一个超强 deadline,它提及的所有东西都要在发售前成为现实。比如写进书里但其实还不存在的 APIFlask 3.0.0 版本,以及这个可以被当作先导材料的《Flask 入门教程》。

面向 Flask 2.x 的旧版本当然没法作为先导材料,所以断断续续花了 26 个小时完成了第 4 版的更新。新版本主要有下面这些变动:

  • 优化全书的内容和措辞
  • 增加对 uv 的介绍
  • 升级到 SQLAlchemy 2.x
  • 针对 Flask 3.1.x 进行内容更新
  • Python 支持版本调整为 3.9+
  • 增加对蓝本、工厂函数的介绍

另外正式加了一章介绍为什么以及如何为本书付费,取代了主页上自愿点击的「付费支持¥10」按钮。考虑到整本书内容完全公开,所以没法阻止读者逃票,但至少我已经克服了「伸手要钱」的羞耻。对于在工作之外挤出的这些时间,我需要一些正反馈。这样可以让自己更认真维护下去,也不会产生怨念。不仅是获得收入,有时还会收到读者的附言感谢,这给我的生活里带来了很多随机的开心时刻。

写新版本的过程中有时也会想,现在跟 AI 说一句「帮我用 Flask 写一个 Watchlist 程序」就大概能实现的程序,还有人愿意来读教程吗?我想至少,在通过教程来学习编程可以让你说一句「我真厉害」,而不仅仅是一句「AI 真厉害」。

另外这个教程最早是在 2019 年发布的,六年过去了,部署章节介绍的 PythonAnywhere 的 UI 和功能基本没有任何改变。我只需要更新 Python 版本选择那个页面的图片,其他部分不需要任何改动。有一种值得托付终生的感觉。希望可以做出来有这样品质的产品和作品。

最后附上相关链接:

代码厨房开源松 x PyCon China 2024

活动已结束,回顾文章见这里:https://codekitchen.community/t/topic/1372


七月我们突破了屏幕的限制,在戴尔五角场办公室举办了第一次线下代码厨房开源松。而这一次开源松 Sprint 6 我打算在 11 月 23 日举办的 PyCon China 2024 大会里办一场开源松。没错,一场面向 Python 爱好者的开源松!

blank

开源松!?

开源松(Song of Open Source)是代码厨房社区自造的词语,可以大概理解为开源黑客松,但是又不必那么 hack。只是一场开源爱好者互相交流和共同参与开源项目的聚会活动。我们希望借助这个活动来鼓励和帮助大家参与开源项目、推动开源项目发展、孵化新的项目 idea。

如果你从来都没有参与过开源项目的话,这次活动也许会是你开源之路的第一步。你会认识其他喜欢编程和开源的朋友,和开源项目维护者们交流,顺便提交第一个开源贡献。

PyCon China 2024 x 代码厨房开源松

开源松活动在大会下午开始,你可以在现场找到开源松会场指引标识,或者到代码厨房社区展台询问。如果打算参加活动,记得在报名大会时勾选相应的选项。会场内会设置三个活动区域:

  • 养成区:给没有参加过开源项目的新手提供科普和指导
  • 发电区:用爱发电的地方
  • 休息区:代码写累了?来和其他开源爱好者聊天吧

顺便也欢迎来代码厨房展台玩。我们为还没开始工作、或者刚刚被裁的朋友准备了「Python 八股文面试题挑战」……通过挑战的话可以体验现场拿 offer 的感觉。

有哪些项目可以参与?

在其他项目报名之前,我们已经准备了两个代码厨房社区项目:

  • FineWeather:一个 Vuejs+Python 实现的网络相册

不管你喜不喜欢拍照,肯定有一堆照片存在某个地方。有没有想过摆脱商业公司的限制,自己部署一个在线相册?放上自己最喜欢的照片,自己的数据自己管理。一起来打造一个完美的开源相册程序吧。

下面是项目作者 Allen 部署的相册实例:

blank

blank新增项目:

  • PDM – Python 包和依赖管理器
  • pyecharts – Python ECharts Plotting Library
  • UtilMeta – Python 渐进式元框架

基于 Flask 实现的 Web API 框架,集成了 marshmallow、webargs 等项目来让 Web API 开发更加简单。我们在计划项目的 3.0 版本,有很多有用的功能可以加入。完成了大半的文档翻译项目也等待一个人来再推进一步。

如果你有自己的 Python 开源项目,欢迎报名参与!作为项目维护者,你需要完成这些事情:

  • 准备三个不同难度等级的任务
  • 在现场介绍项目和任务
  • 指导参与者完成任务
  • 准备小奖品(可选)

报名方式:在代码厨房社区置顶贴留言,或是通过下面的表单报名:

https://jsj.top/f/CscvKZ

你需要准备些什么?

除了了解 Git 基本用法,你还要会一点 Python。有一台充电器还找得到的笔记本电脑。还有一点点的开源热情。

如果你不仅仅想要来做开源项目,那么可以带一点其他的东西来。比如一个关于你自己项目或其他经验的五分钟分享、新项目的 idea……尽管自由发挥。 如果你有其他想法和建议,欢迎留言。

开源松/大会报名

这次开源松将在 PyCon China 2024 内举办,因此报名大会即可参与:

https://hdxu.cn/g77s

PyCon China 2023:濒危 Flask 扩展拯救计划

月初参加了 PyCon China 2023, 做了一个关于 Flask 扩展生态的演讲。不太算是技术分享,讲故事为主。主要的契机是最近尝试把几个失去维护的 Flask 扩展通过各种方式「救」了回来,所以借此机会分享一下经验,也号召大家多多参与开源项目。

演讲介绍

看着一个又一个 Flask 扩展失去维护,不再兼容新版本的 Python 和 Flask,我们能做些什么?在这个演讲里,我会介绍最近我和一些被遗弃的 Flask 扩展打交道的经历,包括如何更新一个古老的 Python 开源项目,以及正在实施中的一个拯救计划。如果你来自其他开源社区,那么这里介绍的经验或许也会帮到你。

录像和幻灯片

P.S. bilibili 认定金正恩的照片是违禁图片,留半秒都不行,最后只好贴了一只马在上面。浪费二十分钟。

照片

blank blank

代码厨房社区欢迎你

代码厨房是一个面向编程和开源爱好者的社区。社区的主体是坐落在 codekitchen.community 的论坛。这个论坛的前身是创建于 2019 年 1 月 11 日的 HelloFlask 论坛(HelloFlask discuss!),因为论坛服务器一直在海外颠沛流离,所以访问起来并不是很顺利。最近把论坛以及 628 位 HelloFlask 原住民一起搬家到了香港,改头换面变成代码厨房社区。

「代码厨房」最早是我创建的公众号的名字。同一时间注册了 daimachufang.com,想要在这个网站上放些什么已经不得而知。后来公众号一再改名,代码厨房已经不见。再一次想起来是在去年 10 月, 29 日心血来潮去参加中国开源年会的开源集市。作为现场唯一一个个人展位,我带去了两个项目。一个是方学园,另一个便是代码厨房俱乐部。

blank

出发前一天为代码厨房俱乐部更新了 daimachufang.com(存档页面),也就是下面的样子:

blank

俱乐部现场成立,现场报名。报名单上收集了十个人,最后筛选到五个。算上我自己,六个人在一年内完成了四次聚会。大家互相带来很多新想法和思考,也玩得很开心,但逐渐有点忘记最初想要做什么。于是,在 2023 年的 10 月 22 号,最后一次聚会,大家回到了报名的地方——微软 Reactor。我在那里重新介绍了代码厨房社区的构想。

代码厨房的核心构想是「一个让人快乐和放松的编程社区」,主要的板块是:

  • Steak Overcooked:牛排煎糊了?把菜谱贴上来问问大家怎么办才好
  • 活动:以爱好而不是商业目的出发的线上或线下活动
  • 开源松:大家一起来做开源项目,推动一些项目的发展

blank

不论你是当下、曾经还是未来的编程爱好者,都可以加入我们。代码厨房欢迎你!

APIFlask 2.0 版本发布

一边上班一边赶工做开源项目真是太累了。更不用说还要一边焦虑写书的进度。不过这次 2.0 版本基本把想做的功能都完成了,剩下两个大的功能(为蓝本拆分单独的 OpenAPI Spec、解耦 marshmallow)实在是没精力加进来了,只好放到 2.1。

APIFlask 2.0 版本的 codename 是 Gongqing(年初我从五角场搬到了共青森林公园旁边。没错,1.0 版本是 Wujiaochang)。

回到正题,这次最主要的一个变动(breaking change)是把所有 input 装饰器的参数改成了关键字参数。

@app.post('/pets')
@app.input(PetQuery, location='query')
@app.input(PetIn)  # equals to app.input(PetIn, location='json')
def create_pet(query_data, json_data):
    pass

关键字参数的名字默认是 {location}_data,通过 arg_name 参数可以自定义。这个改动让我删掉了很多 hack Flask 的代码。推动这个功能在上游 webargs 实现,所以不用加代码在自己这里。再加上一些改动已经在 Flask 实现了,又删掉一些。非常轻松。理想情况是,文档越来越多,代码越来越少。

如果你感兴趣的话,下面是 2.0 版本的详细内容:

 

来 COSCon 2022 开源集市一起开发元宇宙

今年的 COSCon 2022 上海线下会场(10/29)有很多开源相关的活动,其中开源集市会有很多开源社区/公司的摊位,每个摊位都可以做任务拿奖品(放心,不是点 star 送周边那种)。看到现场有好几个元宇宙相关的活动,我就想,要不用 Flask 开发一个元宇宙程序吧……所以,在 HelloFlask 摊位,我们会一起开发一个叫做方学园的程序。这是一个虚拟校园,每个人都是一个方块,可以为自己设置不同的颜色和边框圆角。学校里的建筑也都是方块,类似这样:

blank

虽然这个项目还在很早期的阶段(突然心血来潮,然后刚买了域名的那个阶段),但我想这大概就是元宇宙,对吧?

我准备的奖品有几本书和一些 Flask 贴纸。趁 Flask 还没换上新 logo(嘘,内部机密),这次要把剩下的所有贴纸都送掉。

如果你有自己的开源项目,也可以来这里做分享,或是放到 HelloFlask 摊位来吸引别人参与。

感兴趣的话,用下面的链接报名活动吧(免费):

下面是一个 HelloFlask x COSCon 2022 微信群聊,欢迎想来参会的朋友加入:

blank周六见!

戴尔 EMC Python/Go 职位内推

内推的最新状态见 greyli.com/dell-jobs。如果你在戴尔招聘网站上发现了其他方向/城市的意向职位,也可以联系我内推。


最近公司又开放了几个新的 Python/Go 职位空缺,如果感兴趣的话,一起来做同事吧。

职位要求:

  • 计算机相关学士学位或 1~2 年软件开发经验(另外还有对应 3~5 年以及 10 年以上经验的职位)
  • 熟悉 Python/Go/Java(任一,最好是 Python/Go 方向)
  • 熟悉 Linux 和 Git 的使用
  • 熟悉 Flask 或其他 Web 框架
  • 有 REST API 开发或微服务相关经验
  • 了解容器和容器编排系统(Docker、Kubernetes、Rancher 等)

加分项:

  • 了解 Angular/React/Vuejs(任一)
  • 了解 MySQL、PostgreSQL 或其他 DBMS
  • 了解或使用过 Jenkins
  • 参与过开源项目
  • 有网络、安全、虚拟化、云平台相关经验

工作地点在上海/成都/台北。工作时间正常,不加班,不打卡,周末双休(965)。混合办公,每周可以最多五天居家办公(不限定时间,在正常工作和沟通的前提下,可以自己安排)。

联系方式:

《Flask 入门教程》第三版发布

最近手里堆积的事情越来越多,两本书的进度被日常工作挤压,于是非常想有一些小小的进展来缓解焦虑。刚好有读者来反馈《Flask 入门教程》不兼容最新版本 Flask 的问题,所以就花了一天时间来更新这个教程。

发布上个版本已经是 2019 年的事情了,这次针对 Flask 最新的 2.1.3 版本做了改写,同时不再兼容 Python 2.7 版本。优化了前面几章的一些内容,后面的章节需要改动的地方不多,就没有认真去更新。另外还顺便用 MkDocs 和 Netlify 把教程重新部署到了 tutorial.helloflask.com 上,后续会废弃掉 GitBook。

过去三年里,这本电子书大概给我带来了五百块的收入(主页上有一个自愿点击的「付费支持¥10」的按钮)。虽然不多,但是时不时收到到账提醒和鼓励的话还是很开心的。感谢每一位付款的读者!

blank

当然,给我带来更大成就感的是看到读者分享他/她通过阅读这个教程写的程序,这是一种给别人带来成就感的成就感——元成就感。

APIFlask 1.0 版本发布

2023/7 Update: APIFlask 2.0 版本有一些变动,详见这篇文章。


APIFlask 是一个基于 Flask 和 marshmallow 实现的 API 框架(详细介绍见这篇文章)。经过一年的迭代,终于在这个月初为它发布了 1.0 版本(撒花~)。

blank

1.0 版本主要带来了三个新功能:

  • 支持处理文件上传,新增 File 字段
  • 支持使用外部的认证库
  • 添加了几个新的请求解析位置:json_or_form、form_and_files 以及 path

一个 API 变动(breaking change):

  • input、output、doc、auth_required 这四个装饰器移动到了程序实例和蓝本实例上(比如 app.input() / bp.input())。

还有一些代码上的修正和优化,具体可以在变更日志里看到。欢迎更新试用和提交反馈:

$ pip install -U apiflask

在代码之外,也有一些变动和改进:

如果你正在用它开发你的个人项目或是公司项目,欢迎在这里留言告诉我们(我)!

Flask 工作机会

最近在找工作,发现了一些和 Flask 相关的工作机会。因为目前并没有一个收集 Flask 相关职位的平台,所以就在 GitHub 上创建了一个仓库来分享这些职位,希望可以帮到其他正在找工作的 Flask 用户:

职位以 issue 的形式列出。目前列出来的几个都是和 Flask 关联非常大的职位,这里面有的我投递了申请(比如戴尔),有的收到了拒信(比如育碧),有的收到对方的面试邀请(比如 Dropbase)但并没有通过面试……所以这些职位都在开放中,如果你在找工作的话,尽管投递简历。同时也欢迎在投递之后回来分享面试进度/经历/经验。

如果你所在的公司正在招聘 Flask 相关的职位,或是你在未来发现某个公司发布新的 Flask 相关的职位,欢迎在这个仓库创建 issue 分享。创建 issue 时请遵循下面的格式要求:

  • 在标题注明「公司-职位-城市」,远程工作统一使用「Remote」。
  • 把职位描述里的 requirements 部分贴到 issue 内,并在最后给出职位详情链接。
  • 建议发布和 Flask 技术栈关联比较大的职位,不过 Python 相关的职位也欢迎。

顺便说一句,有很多 Python 相关的工作都会要求掌握某一种 Python Web 框架,类似这样的描述:

  • Good knowledge of web frameworks like Flask, Django, etc.

即使对应职位实际不用 Flask 也不用担心,当你掌握了某一种框架,其他的框架学习起来会非常容易,因为大部分的概念都是相通的。而面试时也会根据你擅长的框架提问,所以尽管申请就好。

祝大家都能找到自己喜欢的工作。

开始写作《Flask Web 开发实战》第二版

《Flask Web 开发实战》第二版已经开始写作,计划在今年完成这本书。那本《Python Web API 设计与开发》一直拖着没写完,让我感觉很焦虑。因为拖得太久,HelloFlask 群聊里已经开始谣传我转行送快递了 :D。

所以我想先把《Flask Web 开发实战》新版完成,这样这一年我至少完成了三个年度目标中的一个。「优化」是我擅长和喜欢做的事情,除了要用 Word 写之外,我很乐意给这本书写新版。

内容变动

在各处收集了很多读者反馈和建议,综合我自己的规划,第二版主要有这些大的变动:

  • 不再兼容 Python 2.7,基于 Python 3.x、Flask 2.x。
  • 把大部分知识点集中到第一部分,让第二部分的示例程序内容更精简。
  • 第 1 章使用 pip+venv(+pip-tools) 或 PDM 替代 Pipenv,增加更多对 PyCharm 的介绍。
  • 第 6 章使用 Flask-Mailman 替代 Flask-Mail(同时引入介绍一些新的扩展,比如 Flask-Admin)。
  • 删除第 9、10、11 章(删除后 3 个实战项目),仅保留 Sayhello 和 Bluelog,删减项目的部分功能会合并到这两个项目。
  • 第 10 章删除实战项目,只保留 Web API 开发部分,会新引入 marshmallow 和 APIFlask。
  • 第 12 章添加异步任务相关内容。
  • 第 14 章添加 Docker 相关内容。
  • 删除第 15 章(Flask 扩展开发)。
  • 删掉一些在国内访问有问题的服务介绍,比如 SendGrid(第 6 章)、Heroku(第 14 章)、Twitter 第三方登录(第 11 章)。

大部分内容变动是在做删减,第一版 704 页,第二版内容会删减到 450 页左右。

代码片段

第一部分每一章都有一个示例程序,读者需要切换到每一个子文件夹运行,如果同时自己编写练习代码的话,很容易产生混乱。所以新版的考虑是,第一部分的示例程序不再给出可运行的示例文件(至少不在书里介绍),而是把所有的代码片段放到 HelloFlask 文档,以代码片段的形式组织。读者需要的话可以自己复制代码到本地运行。作为示例,第一章的代码片段可以在这里看到:https://docs.helloflask.com/book/4/snippets/c1/。因为前六章的代码片段变化不大,所以第一版的读者也可以使用这些文档。

P.S. HelloFlask 文档(https://docs.helloflask.com)是我最近刚创建的一个文档集合。所有和书相关的内容都会放到这里,比如勘误、代码片段、衍生文章等。后续也会在这里写一些扩展快速入门介绍、Flask 基础知识等 Flask 相关的东西。

书名

第二版因为有独立的书号,所以可以改书名。责编老师认为原书名就很好,换书名会浪费掉第一本书建立的品牌。我也基本同意这个观点。目前的考虑是主书名不变,出于营销的考虑,副书名或许可以加一个「Python」关键字,比如改成「Python Web 开发入门、进阶与原理解析」。

封面

目前这本书主页上的封面不是正式封面(我用画图软件在初版封面上随手涂了两笔 >_<)。目前的想法是把封面标题颜色换成深红色,然后换一个封面图案,不过暂时还没想好换成什么。

措辞

第一版是用 Word 写的,排版很痛苦,毕竟要在 Word 里面排版代码。第二版也要继续用 Word 写,而且更加痛苦,因为第二版的书稿是编辑老师用工具从 PDF 文件转制成 Word 的,大部分格式都变得很混乱。希望这是我最后一次用 Word 来写技术书。

对于第一版,我交的终稿和最终成书有一些内容的变化,编辑老师会修正错别字和一些病句。但是后面也发现有一些句子修改得并不合理,导致句子原意产生了变化。这次我会在出版前过一遍校正后的书稿,确保不会再出现这样的情况。

另外,编辑老师还会替换一些词汇用法,比如把「我」替换为「笔者」,这个笔者勉强能接受,但是笔者最不能接受的就是要把所有的「点击」改成「单击」。单击一个链接?这太奇怪了。今年和编辑老师再次沟通了这件事,事情终于有了变化,书中的「点击」在这一版不用再死板的按照出版社的规定修改为「单击」。新的读者不会被指导在网页上单击一个链接了。

周边开源项目

我的很多开源项目的开发都是写作驱动的,上一本书驱动我开发了那几个 Flask 示例程序和扩展,这一次同样会有一些开发计划:

  • APIFlask:补齐所有文档,发布 1.0 版本。
  • Bootstrap-Flask:添加 Bootstrap 5 支持。
  • Flask-CKEditor:添加 CKEditor 5 支持,同时集成新版本内置的 Markdown 支持。
  • Flask-WTF:添加多文件上传验证支持。
  • Sayhello:添加分页、多语言、Markdown 支持等功能(总之就是尽可能把删减的示例程序里比较有意思的功能合并到这里)。
  • Bluelog:把 Albumy 的除了图片相关的功能合并过来,会换一个名字(暂定 WeBlog),作为一个社交博客。

如果你对这本书的新版有其他建议和想法,欢迎提出。这两本新书相关的动态会发到 Twitter @helloflask 和我的公众号,欢迎关注。