# Flask Web 开发：基于 Python 的 Web 应用开发实战

## 说明

* 本仓库为《Flask Web 开发：基于 Python 的 Web 应用开发实战》形成 Gitbook 的代码
* 整理成 [GitBook](https://l1nwatch.gitbooks.io/flask-web-python-web/content/) 形式了

## 本书结构

本书分为三部分

* 第一部分 Flask 简介 简要介绍如何使用 Flask 框架及一些扩展开发 Web 程序
  * 第 1 章 说明如何安装和设置 Flask 框架
  * 第 2 章 通过一个简单的程序介绍如何使用 Flask
  * 第 3 章 介绍如何在 Flask 程序中使用模板
  * 第 4 章 介绍 Web 表单
  * 第 5 章 介绍数据库
  * 第 6 章 介绍如何实现电子邮件支持
  * 第 7 章 提供一个可供中大型程序使用的程序结构
* 第二部分 实例: 社交博客程序 开发 Flasky,这是作者为本书开发的开源博客和社交网络程序
  * 第 8 章 实现用户认证系统
  * 第 9 章 实现用户角色和权限
  * 第 10 章 实现用户资料页
  * 第 11 章 开发博客界面
  * 第 12 章 实现关注功能
  * 第 13 章 实现博客文章的用户评论功能
  * 第 14 章 实现应用编程接口(Application Programming Interface, API)
* 第三部分 成功在望 介绍与开发程序没有直接关系,但在程序发布之前要考虑的事项
  * 第 15 章 详细说明各种单元测试策略
  * 第 16 章 简要介绍性能分析技术
  * 第 17 章 说明 Flask 程序的部署方式, 包括传统方式和云方式
  * 第 18 章 列出其他资源

### 如何使用示例代码

参考: <https://github.com/miguelgrinberg/flasky>

第 1 章会要求你签出程序的初始发布版本, 然后在适当的时候指示你需要向前推进查看提交历史。切换提交历史的 Git 命令是 `git checkout`。

```
git checkout 1a
```

1a 代表一个标签(tag), 是项目中某次提交历史的名字。

一般情况下, 你无需修改程序的源文件, 但如果修改了, Git 会阻止你签出其他历史版本, 因为这会导致本地修改历史的丢失。 签出其他历史版本之前, 要把文件还原到原始状态。 最简单的方法是使用 `git reset` 命令:

```
git reset --hard
```

这个命令会损坏本地修改

可能经常需要从 GitHub 上下载修正和改进后的源码用于更新本地仓库, 完成这个操作的命令:

```
git fetch --all
git fetch --tags
git reset --hard origin/master
```

`git fetch` 命令用于利用 GitHub 上的远程仓库更新本地仓库的提交历史和标签, 但不会改动真正的源文件, 随后执行的 `git reset` 命令才是用于更新文件的操作

另一个有用的操作是查看程序两个版本之间的区别,以便了解改动详情。在命令行中,可以使用 `git diff` 命令进行查看。

```
git diff 2a 2b
```

### 使用代码示例


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://l1nwatch.gitbook.io/flask-web-python-web/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
