Flask GitHub 快速入门指南:构建你的第一个网络应用并进行版本控制
欢迎来到网络开发的精彩世界!如果你是 Python 爱好者,那么 Flask 绝对是构建轻量级网络应用的绝佳选择。Flask 是一个微框架,它不强制你使用特定的工具或库,提供了极大的灵活性。而 GitHub,作为全球最大的代码托管平台,是进行版本控制、协作和展示项目的首选工具。
将 Flask 应用与 GitHub 结合,不仅能帮你记录代码的每一次改动,还能让你轻松与他人协作,或者仅仅是安全地备份你的项目。本指南将带你一步步从零开始,创建一个简单的 Flask 应用,并通过 Git 将其推送到 GitHub。我们将详细解释每个步骤,确保即使是初学者也能轻松掌握。
预计阅读时间:约 20-30 分钟
前言:准备就绪
在开始之前,你需要确保你的系统已经安装了必要的工具。别担心,这些都是网络开发和版本控制的基础,安装过程通常很简单。
- Python: Flask 是一个 Python 框架,所以你需要安装 Python。建议安装 Python 3.6 或更高版本。你可以从 Python 官网 下载安装包。
- pip: pip 是 Python 的包管理器,用于安装 Flask 和其他库。它通常随 Python 一起安装。
- Git: Git 是一个分布式版本控制系统,用于跟踪代码改动。你可以从 Git 官网 下载安装包。安装后,建议进行一些基本的配置,比如设置你的用户名和邮箱,这些信息会与你的提交记录关联:
bash
git config --global user.name "Your Name"
git config --global user.email "[email protected]" - GitHub 账户: 如果你还没有 GitHub 账户,请前往 GitHub 官网 注册一个免费账户。
- 代码编辑器: 一个好的代码编辑器(如 VS Code, PyCharm, Sublime Text, Atom 等)会让你的编码体验更愉快。
确保所有工具都已安装并可通过命令行访问。你可以在终端中输入以下命令来检查:
bash
python --version
pip --version
git --version
如果这些命令都能正确输出版本信息,说明你已经准备好了!
第一部分:创建你的第一个 Flask 应用
我们将创建一个非常简单的 Flask 应用,它只显示一个“Hello, Flask!”消息。
步骤 1: 创建项目目录
首先,在你的电脑上选择一个合适的位置,创建一个新的文件夹来存放你的项目。例如,在桌面或文档目录下创建一个名为 my_flask_app
的文件夹。
bash
mkdir my_flask_app
cd my_flask_app
mkdir
创建文件夹,cd
进入该文件夹。
步骤 2: 创建虚拟环境
强烈建议在每个 Python 项目中使用虚拟环境(Virtual Environment)。虚拟环境可以在项目之间隔离依赖库,避免版本冲突问题。
在项目目录 (my_flask_app
) 中,使用以下命令创建虚拟环境。Python 3.3+ 内置了 venv
模块,无需额外安装。
bash
python -m venv venv
这会在当前目录下创建一个名为 venv
的文件夹(你也可以取其他名字,但 venv
是约定俗成的)。这个文件夹包含了 Python 解释器的副本以及 pip。
步骤 3: 激活虚拟环境
在安装 Flask 之前,你需要激活这个虚拟环境。激活后,你安装的所有 Python 包都会被安装到这个虚拟环境中,而不是全局的 Python 环境。
- Windows:
bash
venv\Scripts\activate
或者使用 PowerShell:
powershell
.\venv\Scripts\Activate.ps1 - macOS/Linux:
bash
source venv/bin/activate
激活成功后,你的终端提示符前会显示虚拟环境的名称,通常是 (venv)
,例如:
bash
(venv) your_username@your_computer:~/my_flask_app$
这表明你现在正在虚拟环境中工作。
步骤 4: 安装 Flask
虚拟环境激活后,使用 pip 安装 Flask:
bash
pip install Flask
pip 会自动下载 Flask 及其所有依赖项并安装到当前的虚拟环境中。
步骤 5: 编写你的第一个 Flask 应用代码
在 my_flask_app
目录中,创建一个新的 Python 文件,命名为 app.py
(这是 Flask 应用的常见入口文件名)。用你的代码编辑器打开 app.py
,然后输入以下代码:
“`python
app.py
from flask import Flask
创建一个 Flask 应用实例
name 是一个特殊的 Python 变量,当文件作为主程序运行时,它的值是 ‘main‘
Flask 需要知道在哪里查找资源(如模板和静态文件),这个参数帮助 Flask 确定根目录
app = Flask(name)
使用路由装饰器定义一个 URL 路径 ‘/’
当用户访问网站的根目录时 (如 http://127.0.0.1:5000/),会触发这个函数
@app.route(‘/’)
def hello_world():
“””
定义一个视图函数,当访问 ‘/’ 路由时被调用。
它返回一个简单的字符串作为响应。
“””
return ‘Hello, Flask!’
这是一个 Python 的惯例,确保当这个文件直接被执行时,运行 Flask 开发服务器
if name == ‘main‘:
# app.run() 启动 Flask 内置的开发服务器
# debug=True 参数开启调试模式,方便开发过程中查看错误信息和自动重载代码
app.run(debug=True)
“`
保存 app.py
文件。
代码解释:
from flask import Flask
: 导入 Flask 类。app = Flask(__name__)
: 创建 Flask 应用的实例。__name__
告诉 Flask 当前模块的名称,用于查找资源。@app.route('/')
: 这是一个装饰器,它告诉 Flask,当用户访问网站的根 URL (/
) 时,应该调用紧随其后的函数。def hello_world():
: 定义一个 Python 函数,这个函数被称为“视图函数”。当对应的 URL 被访问时,Flask 会执行这个函数。return 'Hello, Flask!'
: 视图函数返回的内容会被发送到用户的浏览器。在这里,它返回一个简单的字符串。if __name__ == '__main__':
: 这块代码只有在直接运行python app.py
文件时才会执行。app.run(debug=True)
: 启动 Flask 内置的开发服务器。debug=True
开启调试模式,这样你修改代码后不需要手动重启服务器,并且在出现错误时会显示详细的错误信息。
步骤 6: 运行 Flask 应用
在虚拟环境激活的状态下,回到终端,确保你在 my_flask_app
目录下,然后运行你的应用:
bash
python app.py
如果一切正常,你将看到类似以下的输出:
* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: XXX-XXX-XXX
这表示你的 Flask 应用已经在本地的开发服务器上运行起来了。默认情况下,它运行在 http://127.0.0.1:5000/
(也就是 http://localhost:5000/
)。
打开你的网络浏览器,访问 http://127.0.0.1:5000/
。你应该能看到页面上显示 Hello, Flask!
。
恭喜你!你已经成功创建并运行了你的第一个 Flask 应用。
要停止服务器,回到终端并按下 Ctrl + C
。
步骤 7 (可选): 添加另一个页面
为了让应用稍微丰富一点,我们再添加一个页面。修改 app.py
如下:
“`python
app.py
from flask import Flask
app = Flask(name)
@app.route(‘/’)
def hello_world():
return ‘Hello, Flask!’
添加一个新的路由和视图函数
@app.route(‘/about’)
def about():
return ‘This is a simple Flask app.’
if name == ‘main‘:
app.run(debug=True)
“`
保存文件。由于你在 debug=True
模式下运行服务器,它应该会自动检测到文件改动并重启。如果没有自动重启,手动 Ctrl+C
停止服务器,然后再次运行 python app.py
。
现在,访问 http://127.0.0.1:5000/about
,你应该能看到 “This is a simple Flask app.”。
步骤 8 (可选): 使用 HTML 模板
直接在视图函数中返回 HTML 字符串对于简单应用来说可以,但对于更复杂的页面来说,更好的做法是使用 HTML 模板。Flask 使用 Jinja2 模板引擎。
-
创建
templates
文件夹: 在my_flask_app
目录下,创建一个名为templates
的新文件夹。Flask 默认会在这个文件夹中查找模板文件。bash
mkdir templates -
创建 HTML 模板文件: 在
templates
文件夹中,创建两个 HTML 文件:index.html
和about.html
。templates/index.html
:
html
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome to my Flask App!</h1>
<p>Hello, Flask!</p>
<p><a href="/about">About Page</a></p>
</body>
</html>templates/about.html
:
html
<!DOCTYPEanesh html>
<html>
<head>
<title>About</title>
</head>
<body>
<h1>About This App</h1>
<p>This is a simple Flask app built for a quick start guide.</p>
<p><a href="/">Home Page</a></p>
</body>
</html> -
修改
app.py
使用模板: 修改app.py
文件,导入render_template
函数,并用它来渲染 HTML 文件。“`python
app.py
from flask import Flask, render_template # 导入 render_template
app = Flask(name)
@app.route(‘/’)
def index(): # 将函数名改为 index 更具描述性
return render_template(‘index.html’) # 渲染 templates/index.html@app.route(‘/about’)
def about():
return render_template(‘about.html’) # 渲染 templates/about.htmlif name == ‘main‘:
app.run(debug=True)
“`保存文件,重新运行或等待自动重启。现在访问
http://127.0.0.1:5000/
和http://127.0.0.1:5000/about
,你将看到更具结构的 HTML 页面。
至此,你的第一个 Flask 应用已经有了一个基本的结构,包含两个页面并使用了模板。
第二部分:使用 Git 进行版本控制
现在你的应用已经可以工作了,是时候开始使用 Git 来跟踪你的代码改动了。
1. 初始化 Git 仓库
在你的项目目录 my_flask_app
中,运行以下命令来初始化一个 Git 仓库:
bash
git init
这会在 my_flask_app
目录下创建一个隐藏的 .git
文件夹。这个文件夹包含了 Git 跟踪项目所需的所有信息。
终端会显示:
Initialized empty Git repository in /path/to/your/my_flask_app/.git/
2. 查看 Git 状态
随时可以使用 git status
命令来查看当前 Git 仓库的状态:
bash
git status
第一次运行 git status
,你会看到 Git 告诉你目录中有一些“未跟踪的文件”(Untracked files):app.py
, templates/
, venv/
。
“`
On branch master
No commits yet
Untracked files:
(use “git add
app.py
templates/
venv/
nothing added to commit but untracked files present (use “git add” to track)
“`
3. 创建 .gitignore
文件
注意到了吗?venv/
目录也在未跟踪文件列表中。虚拟环境通常包含很多文件,而且这些文件是可以通过 pip install -r requirements.txt
重新生成的,不应该被 Git 跟踪。
为了告诉 Git 忽略 venv/
目录和其他不需要跟踪的文件(比如编译生成的文件,IDE 配置文件等),我们需要创建一个 .gitignore
文件。
在 my_flask_app
目录中,创建一个名为 .gitignore
的文件(注意文件名前面的点)。使用你的代码编辑器打开它,添加以下内容:
“`gitignore
.gitignore
忽略 Python 虚拟环境目录
venv/
忽略 Python 编译生成的文件 (.pyc)
pycache/
*.pyc
忽略编辑器和IDE的临时文件或配置 (示例,根据你使用的编辑器添加)
.vscode/ # VS Code 配置文件
.idea/ # PyCharm 配置文件
.swp # Vim 交换文件
~ # Emacs/Vim 临时文件
忽略操作系统生成的文件
.DS_Store # macOS
Thumbs.db # Windows
忽略 requirements.txt 文件,因为我们稍后会生成它并添加到仓库 (但通常 requirements.txt 是需要添加到仓库的)
为了演示目的,我们暂时不忽略 requirements.txt
如果你不想将 requirements.txt 放入仓库,可以取消下一行的注释:
requirements.txt
“`
保存 .gitignore
文件。现在再次运行 git status
:
bash
git status
你会发现 venv/
目录不再出现在未跟踪文件列表中了。.gitignore
文件本身现在是未跟踪的。
“`
On branch master
No commits yet
Untracked files:
(use “git add
.gitignore
app.py
templates/
nothing added to commit but untracked files present (use “git add” to track)
“`
4. 将文件添加到暂存区
现在,我们需要告诉 Git 哪些文件是我们想要提交的。我们将所有当前未被忽略的文件(.gitignore
, app.py
, templates/
目录及其内容)添加到暂存区(Staging Area)。
“`bash
git add .gitignore app.py templates/
或者更简洁地添加所有未被忽略的文件:
git add .
“`
git add .
命令会将当前目录下所有未被忽略的、有改动的文件添加到暂存区。
再次运行 git status
:
bash
git status
这次,你会看到文件列表从“未跟踪的文件”变成了“要被提交的更改”(Changes to be committed),它们变成了绿色。
“`
On branch master
No commits yet
Changes to be committed:
(use “git rm –cached
new file: .gitignore
new file: app.py
new file: templates/about.html
new file: templates/index.html
“`
5. 提交更改
文件进入暂存区后,就可以进行提交(Commit)了。提交是版本控制的基本单位,它记录了项目在某个特定时间点的快照以及相关的描述信息。
bash
git commit -m "Initial commit: Setup basic Flask app with templates"
git commit
命令用于创建提交。-m
标志后面跟着一个简短的提交消息(Commit Message),用于描述这次提交做了什么。编写有意义的提交消息是一个好习惯。
提交成功后,Git 会输出本次提交的信息,包括分支、提交 ID(一个哈希值)、提交者、日期和提交消息。
[master (root-commit) a1b2c3d] Initial commit: Setup basic Flask app with templates
4 files changed, 40 insertions(+)
create mode 100644 .gitignore
create mode 100644 app.py
create mode 100644 templates/about.html
create mode 100644 templates/index.html
现在你的项目目录的当前状态已经被 Git 记录下来了。你可以随时查看提交历史 (git log
)。
6. 忽略依赖列表文件 (requirements.txt
)
在项目开发中,记录项目依赖是非常重要的,这样其他人(或未来的你)可以轻松安装运行项目所需的所有库。pip
可以帮我们生成这个列表。
确保你的虚拟环境处于激活状态,然后在项目根目录运行:
bash
pip freeze > requirements.txt
pip freeze
命令会列出当前虚拟环境中安装的所有包及其版本。>
符号将输出重定向到一个名为 requirements.txt
的文件中。
打开 requirements.txt
文件,你会看到类似这样的内容:
Flask==2.3.3
Jinja2==3.1.2
Werkzeug==2.3.7
itsdangerous==2.1.2
MarkupSafe==2.1.3
(具体的版本号可能会不同)
现在,.gitignore
文件中我们并没有忽略 requirements.txt
,所以我们可以将其添加到 Git 中。
bash
git add requirements.txt
git commit -m "Add requirements.txt"
现在你的本地 Git 仓库已经包含了项目的代码、忽略文件和依赖列表。
第三部分:连接本地仓库与 GitHub
现在,我们将把你本地的 Git 仓库连接到 GitHub,并将代码推送到 GitHub 上进行托管。
1. 在 GitHub 上创建新的仓库
- 登录你的 GitHub 账户。
- 点击页面右上角的 “+” 图标,选择 “New repository”(新建仓库)。
- 在 “Repository name” 字段中输入你想要的项目名称,例如
my_flask_app
。 - 你可以添加描述(可选)。
- 选择仓库的可见性(Public 公开 或 Private 私有)。对于大多数开源项目或个人项目,Public 都可以。
- 重要: 不要勾选 “Add a README file”、”Add .gitignore” 或 “Choose a license”。这些文件我们已经在本地创建或不需要。
- 点击 “Create repository” 按钮。
创建成功后,GitHub 会显示一个页面,其中包含了将现有本地仓库推送到这个新创建的远程仓库的说明。寻找标题为 “…or push an existing repository from the command line” 的部分。它会提供两行命令,类似这样:
bash
git remote add origin https://github.com/你的GitHub用户名/my_flask_app.git
git branch -M main # 或 master, 取决于你的Git配置和GitHub默认设置
git push -u origin main # 或 master
2. 将本地仓库关联到 GitHub 远程仓库
回到你的本地终端,确保你在项目目录 my_flask_app
中。复制并执行 GitHub 页面上提供的第一行命令:
bash
git remote add origin https://github.com/你的GitHub用户名/my_flask_app.git
这条命令的作用是:
* git remote add
: 添加一个新的远程仓库。
* origin
: 这是给这个远程仓库起的一个别名,origin
是 Git 中约定俗成的别名,代表你的主远程仓库。
* https://github.com/你的GitHub用户名/my_flask_app.git
: 这是你的 GitHub 仓库的 URL。请将 你的GitHub用户名
替换为你自己的 GitHub 用户名。
你可以运行 git remote -v
来查看你已经配置的远程仓库列表:
bash
git remote -v
输出应该类似:
origin https://github.com/你的GitHub用户名/my_flask_app.git (fetch)
origin https://github.com/你的GitHub用户名/my_flask_app.git (push)
3. 推送本地提交到 GitHub
现在,你可以将本地的提交推送到 GitHub 仓库了。使用 GitHub 页面上提供的第三行命令(第二行 git branch -M main
用于将你的本地分支重命名为 main
,如果你的本地分支已经是 main
或 master
且与 GitHub 默认设置一致,这步可能不是必须的,但执行一次也无妨):
bash
git branch -M main # 如果你的本地主分支不是 main 或 master,执行这步进行重命名
git push -u origin main # 将本地的 main 分支推送到 origin 远程仓库
git push
: 执行推送操作。-u origin main
:-u
(或--set-upstream
) 设置本地main
分支跟踪远程的origin/main
分支。这样以后你只需要简单地输入git push
或git pull
即可,无需指定origin main
。origin
是远程仓库别名,main
是要推送的分支名称。GitHub 的默认主分支现在通常是main
,而传统的 Git 默认分支是master
。请根据你的实际情况和 GitHub 页面上的提示选择main
或master
。
执行 git push
命令后,Git 可能会要求你输入 GitHub 的用户名和密码。如果你开启了双重认证,可能需要使用 Personal Access Token (PAT) 而不是普通密码。有关如何生成和使用 PAT,请参考 GitHub 的文档。
推送成功后,终端会显示一些信息,表明本地的提交已经被发送到远程仓库。
现在,刷新你在 GitHub 上创建的仓库页面,你会看到你的代码文件 (app.py
, .gitignore
, requirements.txt
, templates/
目录) 已经出现在仓库中了!
第四部分:后续开发与版本控制流程
你的项目现在已经在本地和 GitHub 上都存在了。接下来的开发流程通常是:
- 在本地进行代码修改: 在你的代码编辑器中修改
app.py
,添加新的功能,修改模板文件等。 - 查看改动: 随时使用
git status
查看你修改了哪些文件。 - 添加到暂存区: 使用
git add <filename>
或git add .
将你想要包含在下一次提交中的文件添加到暂存区。 - 提交更改: 使用
git commit -m "描述本次提交的改动"
创建一个新的提交。写一个清晰、简洁的提交消息非常重要。 - 推送到 GitHub: 使用
git push
将你的本地新提交发送到 GitHub 远程仓库。
示例:修改 homepage 标题并推送到 GitHub
- 修改
templates/index.html
,将<h1>Welcome to my Flask App!</h1>
改为<h1>My Awesome Flask App</h1>
。保存文件。 - 在终端中(确保虚拟环境激活):
bash
(venv) cd my_flask_app
(venv) git status
你会看到templates/index.html
被列在 “Changes not staged for commit” 下面。 - 将改动添加到暂存区:
bash
(venv) git add templates/index.html
(venv) git status
现在templates/index.html
在 “Changes to be committed” 下面。 - 提交更改:
bash
(venv) git commit -m "Update homepage title in template"
一个新的提交被创建。 - 推送到 GitHub:
bash
(venv) git push
Git 会将你的本地main
分支上的新提交推送到origin
远程仓库。刷新 GitHub 页面,你将看到新的提交记录和文件内容的改变。
总结与展望
恭喜你!你已经成功地:
- 创建了一个简单的 Flask 网络应用。
- 学会了使用虚拟环境管理项目依赖。
- 了解了 Flask 的基本结构和运行方式。
- 使用 Git 对项目进行了初始化和首次提交。
- 创建了
.gitignore
文件来忽略不需要跟踪的文件。 - 生成了
requirements.txt
文件记录项目依赖。 - 在 GitHub 上创建了远程仓库。
- 将本地仓库与 GitHub 远程仓库关联。
- 成功地将本地代码推送到 GitHub。
- 掌握了基本的 Git 工作流程(修改 -> 添加 -> 提交 -> 推送)。
这仅仅是 Flask 和 Git/GitHub 世界的冰山一角。接下来,你可以继续探索:
Flask 进阶:
- 更复杂的路由和 URL 构建 (
url_for
) - 处理表单数据 (使用 WTForms 库)
- 数据库集成 (使用 Flask-SQLAlchemy 库)
- 用户认证和授权
- 使用蓝图(Blueprints)组织大型应用
- 部署你的 Flask 应用到生产环境 (如 Heroku, PythonAnywhere, AWS, Vercel 等)
Git/GitHub 进阶:
- 分支(Branches)和合并(Merging):学习如何在不同的分支上开发新功能,并在完成后合并回主分支。
- 拉取请求(Pull Requests):在团队协作中如何提出代码修改建议并进行代码审查。
- 克隆仓库 (
git clone
):如何从 GitHub 上获取一个现有项目到本地。 - 拉取更改 (
git pull
):如何在团队协作中获取其他人推送到远程仓库的最新代码。 - 解决合并冲突(Merge Conflicts)。
- Git Log 的更多用法。
- GitHub 的其他功能,如 Issues (问题跟踪), Projects (项目管理), Actions (自动化工作流) 等。
通过持续学习和实践,你将能够构建更强大、更复杂的网络应用,并高效地管理你的代码。
希望这篇详细的指南能帮助你顺利迈出 Flask 和 GitHub 集成的第一步!如果在过程中遇到任何问题,不要灰心,查阅官方文档、搜索在线资源或在开发者社区提问都是非常有效的解决方法。
祝你编程愉快!