File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -523,4 +523,4 @@ $ git push
523523
524524* 访问 [ Coverage.py 文档] ( https://coverage.readthedocs.io ) 或执行 coverage help 命令来查看更多用法。
525525* 使用标准库中的 unittest 编写单元测试并不是唯一选择,你也可以使用第三方测试框架,比如非常流行的 [ pytest] ( https://pytest.org ) 。
526- * 如果你是 [ 《Flask Web 开发实战》 ] ( http://helloflask.com/book/1 ) 的读者,第 12 章详细介绍了测试 Flask 程序的相关知识,包括使用 [ Selenium ] ( https://www.seleniumhq.org/ ) 编写用户界面测试,使用 [ Flake8 ] ( https://github.com/PyCQA/flake8 ) 检查代码质量等。
526+
Original file line number Diff line number Diff line change @@ -242,4 +242,4 @@ $ git pull
242242
243243* 因为 PythonAnywhere 支持在线管理文件、编辑代码、执行命令,你可以在学习编程的过程中使用它来在线开发 Web 程序。
244244* PythonAnywhere 的 Web 面板还有一些功能设置:Log files 部分可以查看你的程序日志,Traffic 部分显示了你的程序访问流量情况,Security 部分可以为你的程序程序开启强制启用 HTTPS 和密码保护。
245- * 如果你是 [ 《Flask Web 开发实战》 ] ( http://helloflask.com/book/1 ) 的读者,第 14 章详细介绍了部署 Flask 程序的两种方式:传统部署和云部署。
245+
Original file line number Diff line number Diff line change 44
55## 为本书付费
66
7- 等等,如果你还没有为这本书付费的话,先别急着出门。访问[ 这里] ( chapters/ 0-pay.md) 查看付费信息。我需要你的支持。
7+ 等等,如果你还没有为这本书付费的话,先别急着出门。访问[ 这里] ( 0-pay.md ) 查看付费信息。谢谢你的支持!
88
99## 留言 & 打卡 & 反馈
1010
1313
1414## 进阶阅读
1515
16- 在这本教程几乎每一章的结尾,我都会提到 [ 《Flask Web 开发实战》] ( http://helloflask.com/book/1 ) 。每次写到这里,我都觉得自己好像在写“问候家明”或是“熹贵妃安”。所以,最合适的进阶读物我已经推荐过很多次了。除了这本书 ,其他的进阶读物如下:
16+ 最开始,本书的写作是为了作为 [ 《Flask Web 开发实战:入门、进阶与原理解析 》] ( http://helloflask.com/book/1 ) 的先导读物。如果你接下来想要进一步学习 Flask 和 Python Web 开发,那么《Flask Web 开发实战》或是它的升级版《 [ Flask 从入门到进阶:Python Web 开发工程化实践 ] ( https://helloflask.com/book/4 ) 》(将于 2025 年 11 月出版)是很合适的进阶读物。除了这两本书 ,其他的进阶读物如下:
1717
1818* [ Flask 官方文档] ( https://flask.palletsprojects.com/ )
19- * [ Flask 文档中文翻译] ( https://flask-zh.readthedocs.io / )
19+ * [ Flask 文档中文翻译] ( https://flask.palletsprojects.com/zh-cn/stable / )
2020* [ Flask Mega-Tutorial] ( https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world )
2121* [ 知乎专栏 Hello, Flask!] ( https://zhuanlan.zhihu.com/flask )
2222
2828
2929你喜欢这本书的写作模式吗?
3030
31- 在这个 AI 编程时代,了解基本的编程概念和软技能变得尤为重要。我正在写一本《[ 编程入门教程] ( https://github .com/greyli/cookbook ) 》。写作模式类似这本书,每一章涉及一个编程工具或概念。提供尽可能少的细节,但是尽可能让你自己动手一起写代码 。
31+ 在这个 AI 编程时代,了解基本的编程概念和软技能变得尤为重要。我正在写一本《编程入门教程》。写作模式类似这本书,每一章涉及一个编程工具或概念。提供尽可能少的细节,但是尽可能让你自己动手一起写代码。如果你想获取关于这本书的最新动态,欢迎关注我的 [ Twitter ] ( https://x .com/greylihui ) 和 [ 微信公众号 ] ( https:// greyli.com/files/qrcode_gh.jpg ) ,或是通过邮件订阅 [ 我的 Newsletter ] ( https://greyli.com/subscribe/ ) 。
Original file line number Diff line number Diff line change @@ -273,4 +273,4 @@ $ git push
273273* 了解 HTTP 基本知识将会有助于你了解 Flask 的工作原理。
274274 * 阅读文章[ 《互联网是如何工作的》] ( https://tutorial.djangogirls.org/zh/how_the_internet_works/ ) 。
275275 * 阅读文章[ 《从 HTTP 请求 - 响应循环探索 Flask 的基本工作方式》] ( https://zhuanlan.zhihu.com/p/42231394 ) 。
276- * 如果你是 [ 《Flask Web 开发实战》 ] ( http://helloflask.com/book/1 ) 的读者,这部分的进阶内容可以在第 1 章《初识 Flask》和第 2 章《HTTP 和 Flask》找到。
276+
Original file line number Diff line number Diff line change @@ -148,4 +148,4 @@ $ git push
148148
149149* 使用 [ Faker] ( https://github.com/joke2k/faker ) 可以实现自动生成虚拟数据,它支持丰富的数据类型,比如时间、人名、地名、随机字符等。
150150* 除了过滤器,Jinja2 还在模板中提供了一些测试器、全局函数可以使用;除此之外,还有更丰富的控制结构支持,有一些我们会在后面学习到,更多的内容则可以访问 [ Jinja2 文档] ( https://jinja.palletsprojects.com/en/3.0.x/templates ) 学习。
151- * 如果你是 [ 《Flask Web 开发实战》 ] ( http://helloflask.com/book/1 ) 的读者,模板相关内容可以在第 3 章《模板》找到,Faker 相关内容可以在第 7 章找到。
151+
Original file line number Diff line number Diff line change @@ -420,4 +420,4 @@ $ git push
420420* 在生产环境,你可以更换更合适的 DBMS,因为 SQLAlchemy 支持多种 SQL 数据库引擎,通常只需要改动非常少的代码。
421421* 我们的程序只有一个用户,所以没有将 User 表和 Movie 表建立关联。访问 Flask-SQLAlchemy 文档的“[ 声明模型] ( https://flask-sqlalchemy.palletsprojects.com/en/2.x/models/#one-to-many-relationships ) ”章节可以看到相关内容。
422422* 阅读 [ SQLAlchemy 官方文档和教程] ( https://docs.sqlalchemy.org/en/latest/ ) 详细了解它的用法。注意我们在这里使用 Flask-SQLAlchemy 来集成它,所以用法和单独使用 SQLAlchemy 有一些不同。作为参考,你可以同时阅读 [ Flask-SQLAlchemy 官方文档] ( https://flask-sqlalchemy.palletsprojects.com/en/2.x/ ) 。
423- * 如果你是 [ 《Flask Web 开发实战》 ] ( http://helloflask.com/book/1 ) 的读者,第 5 章详细介绍了 SQLAlchemy 和 Flask-Migrate 的使用,第 8 章和第 9 章引入了更复杂的模型关系和查询方法。
423+
Original file line number Diff line number Diff line change @@ -356,4 +356,4 @@ $ git push
356356- CSRF 是一种常见的攻击手段。以我们的删除表单为例,某恶意网站的页面中内嵌了一段代码,访问时会自动发送一个删除某个电影条目的 POST 请求到我们的程序。如果我们访问了这个恶意网站,就会导致电影条目被删除,因为我们的程序没法分辨请求发自哪里。解决方法通常是在表单里添加一个包含随机字符串的隐藏字段,同时在 Cookie 中也创建一个同样的随机字符串,在提交时通过对比两个值是否一致来判断是否是用户自己发送的请求。在我们的程序中没有实现 CSRF 保护。
357357- 使用 Flask-WTF 时,表单类在模板中的渲染代码基本相同,你可以编写宏来渲染表单字段。如果你使用 Bootstap,那么扩展 [ Bootstrap-Flask] ( https://github.com/helloflask/bootstrap-flask ) 内置了多个表单相关的宏,可以简化渲染工作。
358358- 你可以把删除按钮的行内 JavaScript 代码改为事件监听函数,写到单独的 JavaScript 文件里。再进一步,你也可以使用 JavaScript 来监听点击删除按钮的动作,并发送删除条目的 POST 请求,这样删除按钮就可以使用普通 ` <a> ` 标签(CSRF 令牌存储在元素属性里),而不用创建表单元素。
359- - 如果你是 [ 《Flask Web 开发实战》 ] ( http://helloflask.com/book/1 ) 的读者,第 4 章介绍了表单处理的各个方面,包括表单类的编写和渲染、错误消息显示、自定义错误消息语言、文件和多文件上传、富文本编辑器等等。
359+
Original file line number Diff line number Diff line change @@ -390,4 +390,4 @@ $ git push
390390## 进阶提示
391391
392392* 访问 [ Flask-Login 文档] ( https://flask-login.readthedocs.io/ ) 了解更多细节和用法。
393- * 如果你是 [ 《Flask Web 开发实战》 ] ( http://helloflask.com/book/1 ) 的读者,第 2 章通过一个示例介绍了用户认证的实现方式;第 8 章包含对 Flask-Login 更详细的介绍。
393+
Original file line number Diff line number Diff line change @@ -525,5 +525,4 @@ $ git push
525525
526526## 进阶提示
527527
528- - 如果你是[ 《Flask Web 开发实战》] ( http://helloflask.com/book/1 ) 的读者,第 7 章介绍了使用包组织程序,第 8 章介绍了大型项目结构以及如何使用蓝本和工厂函数组织程序。
529528- 查看《Flask Web 开发实战》示例程序 [ Greybook 的源码] ( https://github.com/greyli/greybook ) ,了解更大的程序的代码组织结构示例。
You can’t perform that action at this time.
0 commit comments