2024最新Flask教程:结合GitHub进行版本控制 – wiki基地


2024年终极指南:Flask Web开发与GitHub版本控制协同工作流

在2024年的今天,现代Web开发不仅仅是编写代码,更是一门关于协作、迭代和维护的艺术。Python的轻量级Web框架Flask,以其灵活性和简洁性,依然是无数开发者入门和构建复杂应用的首选。然而,要将一个项目从本地的“玩具”提升为可维护、可协作的专业产品,版本控制是不可或缺的一环。Git及其最流行的托管平台GitHub,正是为此而生。

本教程将带领你走过一个完整的项目生命周期,从零开始搭建一个Flask应用,并将其与一个专业的Git/GitHub工作流相结合。我们将不仅仅学习命令,更会理解其背后的思想和最佳实践。

目录

  1. 环境搭建:坚实的地基
    • Python与虚拟环境
    • 安装Flask与Git
    • 配置GitHub账户
  2. 项目启动:第一个Flask应用与本地Git仓库
    • 创建项目结构
    • 编写一个简单的Flask应用
    • git init:版本控制的起点
    • .gitignore:告诉Git忽略什么
    • 你的第一次提交:git add & git commit
  3. 连接世界:将本地仓库推送到GitHub
    • 在GitHub上创建远程仓库
    • 连接本地与远程
    • git push:分享你的代码
  4. 功能迭代:分支驱动开发(Branching Workflow)
    • main分支的神圣性
    • 创建功能分支:git branch & git checkout
    • 在新分支上开发新功能
  5. 协作的核心:Pull Request工作流
    • 发起一个Pull Request (PR)
    • 代码审查(Code Review)
    • 合并分支与解决冲突
    • 保持本地main分支同步
  6. 进阶与最佳实践
    • 依赖管理:requirements.txt
    • 环境变量:保护你的敏感信息
    • 标签(Tagging):为你的版本打上标记
    • 编写有意义的Commit Message

第一章:环境搭建:坚实的地基

在开始编码之前,一个干净、隔离的开发环境至关重要。

1.1 Python与虚拟环境

确保你的系统已安装Python 3.8或更高版本。现代Python开发强烈推荐使用虚拟环境,它可以为每个项目创建一个独立的Python解释器和包集合,避免不同项目间的依赖冲突。

打开你的终端(在Windows上是CMD或PowerShell,在macOS/Linux上是Terminal)。

“`bash

1. 创建项目文件夹

mkdir flask-github-project
cd flask-github-project

2. 创建虚拟环境 (venv是Python内置的模块)

python -m venv .venv

3. 激活虚拟环境

Windows

.\venv\Scripts\activate

macOS / Linux

source .venv/bin/activate
“`

激活后,你会看到终端提示符前多了 (.venv) 的字样,表示你现在正处于这个隔离的环境中。

1.2 安装Flask与Git

在激活的虚拟环境中,使用pip安装Flask:

bash
pip install Flask

接下来,确保你已经安装了Git。你可以在终端中输入 git --version 来检查。如果没有安装,请访问 Git官网 下载并安装。

1.3 配置GitHub账户

如果你还没有GitHub账户,现在就去 GitHub官网 注册一个。安装完Git后,配置你的用户名和邮箱,这会作为你每次提交代码的身份标识。

bash
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

第二章:项目启动:第一个Flask应用与本地Git仓库

环境就绪,让我们开始构建应用并引入版本控制。

2.1 创建项目结构

一个基本的Flask项目结构如下:

flask-github-project/
├── .venv/ # 虚拟环境文件夹
├── app.py # 我们的主应用文件
└── templates/ # 存放HTML模板
└── index.html

创建 app.pytemplates/index.html

2.2 编写一个简单的Flask应用

app.py:

“`python
from flask import Flask, render_template
import random

app = Flask(name)

quotes = [
“The only way to do great work is to love what you do. – Steve Jobs”,
“Strive not to be a success, but rather to be of value. – Albert Einstein”,
“The mind is everything. What you think you become. – Buddha”,
“Your time is limited, don’t waste it living someone else’s life. – Steve Jobs”
]

@app.route(‘/’)
def index():
quote = random.choice(quotes)
return render_template(‘index.html’, quote=quote)

if name == ‘main‘:
app.run(debug=True)
“`

templates/index.html:

“`html






Quote of the Day


“{{ quote.split(‘ – ‘)[0] }}”

– {{ quote.split(‘ – ‘)[1] }}


“`

在终端中运行应用:

bash
flask run

访问 http://127.0.0.1:5000,你应该能看到一个每日名言页面,每次刷新都会变化。

2.3 git init:版本控制的起点

现在,让我们用Git来管理这个项目。在项目根目录下执行:

bash
git init

这个命令会创建一个名为 .git 的隐藏文件夹,它包含了Git仓库的所有元数据。你的项目现在就是一个本地Git仓库了。

2.4 .gitignore:告诉Git忽略什么

我们不希望将所有文件都提交到版本控制中,比如虚拟环境文件夹 .venv、Python编译的缓存文件 __pycache__ 等。创建一个名为 .gitignore 的文件,并添加以下内容:

.gitignore:

“`

Virtual Environment

.venv/
venv/
*.pyc

Python cache

pycache/

IDE / Editor specific files

.idea/
.vscode/

Environment variables file

.env
“`

这个文件至关重要,它能保持你的仓库干净、整洁。

2.5 你的第一次提交:git add & git commit

现在,我们将项目文件添加到Git的“暂存区”(Staging Area),然后提交到仓库。

“`bash

1. 查看当前状态,Git会告诉你哪些文件是“未跟踪”的

git status

2. 将所有新文件和修改过的文件添加到暂存区

git add .

3. 再次查看状态,你会看到文件已准备好被提交

git status

4. 提交暂存区的文件到本地仓库,并附上描述性信息

git commit -m “Initial commit: Create basic Flask quote application”
“`

-m 后面的字符串是“提交信息”(Commit Message),它简要描述了这次提交做了什么。编写清晰的Commit Message是极其重要的好习惯。

使用 git log 可以查看提交历史。

第三章:连接世界:将本地仓库推送到GitHub

本地仓库很棒,但将它托管到GitHub上才能实现备份、协作和更广泛的可见性。

3.1 在GitHub上创建远程仓库

  1. 登录GitHub。
  2. 点击右上角的 + 号,选择 “New repository”。
  3. 给仓库命名,例如 flask-github-project
  4. 不要勾选 “Initialize this repository with a README”。因为我们已经有了一个本地仓库。
  5. 点击 “Create repository”。

3.2 连接本地与远程

GitHub会提供一个URL,通常是HTTPS或SSH格式。我们将这个URL添加为本地仓库的“远程”地址,并通常将其命名为 origin

bash
git remote add origin https://github.com/YourUsername/flask-github-project.git

请将 YourUsername 替换为你的GitHub用户名。

3.3 git push:分享你的代码

现在,将本地的提交推送到GitHub上的 origin 仓库。在2024年,默认的主分支名通常是 main

bash
git push -u origin main

  • push:推送操作。
  • origin:我们刚刚设置的远程仓库名。
  • main:我们要推送的本地分支名。
  • -u (或 --set-upstream):这个参数会建立本地 main 分支与远程 origin/main 分支的联系。这样,以后你在这个分支上执行 git pushgit pull 时,就无需再指定 origin main

现在刷新你的GitHub仓库页面,你会看到所有代码都已上传!

第四章:功能迭代:分支驱动开发

直接在 main 分支上开发新功能是危险的,容易引入不稳定的代码。专业的做法是为每个新功能或修复创建一个独立的分支。

4.1 main分支的神圣性

main 分支应该永远保持稳定、可部署的状态。所有新的开发工作都应该在其他分支上进行。

4.2 创建功能分支

假设我们要添加一个新功能:允许用户通过URL访问特定的名言。我们将为此创建一个新分支。

“`bash

1. 创建一个名为 feature/specific-quote 的新分支并立即切换过去

git checkout -b feature/specific-quote
``
这等同于
git branch feature/specific-quotegit checkout feature/specific-quote两条命令的组合。分支名采用type/name的格式(如feature/fix/docs/`)是一种很好的实践。

4.3 在新分支上开发新功能

现在,我们所有的修改都将在这个新分支上进行,不会影响到 main 分支。

修改 app.py

“`python

… (之前的代码保持不变) …

@app.route(‘/quote/‘)
def specific_quote(quote_id):
if 0 <= quote_id < len(quotes):
quote = quotes[quote_id]
return render_template(‘index.html’, quote=quote)
else:
return “Quote not found!”, 404

… (之后的代码保持不变) …

“`

功能开发完成,让我们提交这次更改。

“`bash

1. 查看状态,确认修改的文件

git status

2. 添加修改到暂存区

git add app.py

3. 提交到当前分支

git commit -m “feat: Add route for specific quotes by ID”
``
注意Commit Message使用了
feat:` 前缀,这是一种“约定式提交”(Conventional Commits)规范,有助于自动化和清晰化历史记录。

现在,将这个新分支也推送到GitHub:

bash
git push origin feature/specific-quote

第五章:协作的核心:Pull Request工作流

分支已经推送到远程,现在我们需要一种方式将它的代码合并回 main 分支。这就是Pull Request(PR)的用武之地。

5.1 发起一个Pull Request (PR)

  1. 打开你的GitHub仓库页面。
  2. 你会看到一个黄色的提示条,建议你为最近推送的 feature/specific-quote 分支创建一个Pull Request。点击 “Compare & pull request”。
  3. 填写PR的标题和描述。详细描述你做了什么、为什么这么做,以及如何测试。这是一个与团队成员沟通的重要环节。
  4. 点击 “Create pull request”。

5.2 代码审查(Code Review)

PR创建后,你的团队成员(或者你自己,在个人项目中)可以审查代码。他们可以逐行评论,提出修改建议。这是一个保证代码质量、分享知识的关键步骤。

5.3 合并分支与解决冲突

如果代码没有问题,就可以合并了。点击 “Merge pull request” 按钮。GitHub提供了几种合并方式:
* Create a merge commit:保留所有功能分支的提交历史,并在 main 上创建一个新的合并提交。
* Squash and merge:将功能分支上的所有提交压缩成一个单一的提交,然后合并到 main。这能让 main 分支的历史非常干净。
* Rebase and merge:将功能分支的提交“变基”到 main 的最新状态之上,然后快进合并。历史是线性的,但操作更复杂。

对于初学者和大多数项目,“Squash and merge”是一个非常好的选择。

合并后,GitHub会提示你是否要删除这个已经合并的分支,这通常是安全的。

关于冲突:如果在你开发功能分支时,main 分支上也有人提交了修改,并且修改了同一个文件的同一部分,那么合并时就会产生“合并冲突”。GitHub会提示你冲突,并阻止自动合并。你需要在本地解决这些冲突,然后再次推送。解决冲突是Git的必备技能,需要专门练习。

5.4 保持本地main分支同步

远程的 main 分支已经更新了,但你的本地 main 分支还是旧的。需要将它同步过来。

“`bash

1. 切换回 main 分支

git checkout main

2. 从远程仓库拉取最新的变更

git pull origin main

3. (可选) 删除已经合并的本地功能分支

git branch -d feature/specific-quote
“`

现在你的本地 main 分支也包含了新功能,整个开发周期完成!

第六章:进阶与最佳实践

6.1 依赖管理:requirements.txt

你的项目依赖于Flask。为了让其他协作者(或未来的你)能快速搭建同样的环境,我们需要一个依赖清单。

“`bash

在激活的虚拟环境中,将当前环境的包列表导出到 requirements.txt

pip freeze > requirements.txt
“`

现在,项目根目录下多了一个 requirements.txt 文件。记得将它添加到Git并提交。

bash
git add requirements.txt
git commit -m "docs: Add dependency file"
git push origin main

其他人在克隆你的项目后,只需执行 pip install -r requirements.txt 即可安装所有依赖。

6.2 环境变量:保护你的敏感信息

假设你的应用未来需要连接数据库或使用API密钥。绝对不要将这些敏感信息硬编码在代码中并提交到GitHub!

最佳实践是使用环境变量。创建一个 .env 文件(确保它在 .gitignore):

.env:
FLASK_ENV=development
SECRET_KEY=a_very_secret_key_that_is_not_this

然后使用一个库(如 python-dotenv)来加载这些变量。

bash
pip install python-dotenv

app.py 的开头添加:

“`python
from dotenv import load_dotenv
import os

load_dotenv() # 加载 .env 文件中的变量

app = Flask(name)
app.config[‘SECRET_KEY’] = os.getenv(‘SECRET_KEY’)

“`

6.3 标签(Tagging):为你的版本打上标记

当你的项目达到一个重要的里程碑(如v1.0.0发布),你可以使用Git的标签功能来创建一个永久性的标记。

“`bash

创建一个带注释的标签

git tag -a v1.0.0 -m “First stable release with quote features”

将标签推送到远程仓库

git push origin v1.0.0

或者一次性推送所有标签

git push –tags
“`

在GitHub的仓库页面,你可以在 “Releases” 部分看到这些标签。

结论

恭喜你!你已经走完了一个结合Flask和现代Git/GitHub工作流的完整开发周期。让我们回顾一下核心要点:

  • 隔离的环境:始终使用虚拟环境。
  • 原子化提交:每个提交都应该是一个逻辑上独立的单元,并附有清晰的提交信息。
  • 分支驱动:永远不要直接在 main 分支上工作。为每个任务创建新分支。
  • Pull Request:将PR作为代码合并、审查和讨论的中心。
  • 保持同步:定期 git pull 以获取远程的最新更改。
  • 管理依赖和配置:使用 requirements.txt 和环境变量。

Flask为你提供了构建应用的自由,而Git和GitHub则为这个创作过程提供了结构、安全和协作的框架。掌握这套工作流,你不仅仅是在写代码,更是在以一种专业、高效和可持续的方式构建软件。从这里出发,你可以继续探索CI/CD(使用GitHub Actions自动化测试和部署)、数据库集成(Flask-SQLAlchemy)、容器化(Docker)等更广阔的世界。祝你编程愉快!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部