Module 02 · Web App Deployment using Flask
Hands-on Lab: Get Started with Flask Basics动手实验:Flask 基础入门
Flask 实践:第 1 部分

预计所需时间: 20 分钟
欢迎参加综合实践课程的第一个实验。本实验将带你练习使用 Flask。此前的视频已涵盖完成本实验所需的概念。如果你不清楚如何完成某项任务,或需要更多信息,可以随时暂停实验并复习本模块。
学习目标
完成本实验后,你将能够:
- 在开发模式下创建和运行 Flask 服务器
- 从端点(endpoint)返回 JSON
- 理解请求对象(request object)
关于 Skills Network Cloud IDE
Skills Network Cloud IDE 基于 Theia 和 Docker,为课程和项目中的动手实验提供环境。Theia 是一个可在桌面或云端运行的开源集成开发环境(Integrated Development Environment,IDE)。本实验将使用基于 Theia 的 Cloud IDE,以及运行在 Docker 容器中的 MongoDB。
关于实验环境的重要说明
请注意,本实验环境不会保留会话。每次连接实验时,系统都会为你创建一个新环境,之前会话中保存的数据将会丢失。请计划在一次会话中完成这些实验,以免丢失数据。
设置实验环境
开始实验前,需要完成一些准备工作。
打开终端
通过编辑器菜单 Terminal(终端) > New Terminal(新建终端) 打开终端窗口。

如果终端当前不在 /home/project 文件夹中,请切换到该项目文件夹。
cd /home/project
创建实验目录
现在可以创建一个目录来存放服务器文件。
mkdir lab
切换到 lab 目录:
cd lab
检查 Python 版本并安装 Flask
使用 python3 --version 命令检查实验环境中的 python3 版本。你应该看到如下输出:
theia@theiadocker-captainfedo1:/home/project/lab$ python3 --version
Python 3.10.12
接着,使用以下命令安装 Flask:
pip3 install flask
如果系统中已安装 Flask,你会看到以下消息:
Requirement already satisfied: flask in /home/theia/.local/lib/python3.10/site-packages (3.1.2)
Requirement already satisfied:
...
现在可以开始实验了。
可选
如果命令提示符过长,影响终端操作,可以使用以下命令缩短提示符:
export PS1="[\[\033[01;32m\]\u\[\033[00m\]: \[\033[01;34m\]\W\[\033[00m\]]\$ "
步骤 1:创建 Hello World 服务器
你的任务
- 创建
server.py文件。
首先,通过终端或文件编辑器菜单创建一个名为server.py的空文件。
点击此处查看提示。
以下命令会在正确的目录中创建该空文件。
touch /home/project/lab/server.py
在编辑器中打开 server.py
在 IDE 中打开 server.py
如果打开文件后出现名为 Python - Get Started 的新标签页,可以关闭该标签页,返回 Python 文件。
- 导入 Flask 模块。
接着,在该文件中导入 Flask 模块,开始编写服务器代码。
点击此处查看提示。
将占位模块名替换为 Flask 类,在此文件中导入该类。
from flask import {insert module name here}
- 创建 Flask 应用
导入 Flask 模块后,通过初始化 Flask 类来创建 Flask 应用程序。
点击此处查看提示。
使用 Flask 类初始化一个新应用程序。
from flask import {insert module name here}
app = {insert module name here}(__name__)
- 创建主路由。
现在可以使用上一任务中创建的应用来创建第一个路由(route)。
点击此处查看提示。
使用应用装饰器(decorator)创建根 URL “/”。
# Import the Flask class from the flask module
from flask import Flask
# Create an instance of the Flask class, passing in the name of the current module
app = Flask(__name__)
# Define a route for the root URL ("/")
@app.route("/")
def home():
return "Hello, World!"
- 定义主根 URL 对应的方法。
首先,在此文件中导入 Flask。
点击此处查看提示。
开始定义该方法。
# Import the Flask class from the flask module
from flask import Flask
# Create an instance of the Flask class, passing in the name of the current module
app = Flask(__name__)
# Define a route for the root URL ("/")
@app.route("/")
def home():
# Function that handles requests to the root URL
return "Hello, World!"
- 向客户端返回 “Hello World” 消息。
向客户端返回字符串 “Hello World”。
点击此处查看提示。
# Import the Flask class from the flask module
from flask import Flask
# Create an instance of the Flask class, passing in the name of the current module
app = Flask(__name__)
# Define a route for the root URL ("/")
@app.route("/")
def hello_world():
# Function that handles requests to the root URL
return "Hello, World!"
现在已准备好运行服务器。使用以下命令从终端运行服务器:
flask --app server --debug run

现在应该可以对 localhost:5000/ 使用 CURL 命令。由于当前终端正在运行服务器,可以使用 Split Terminal 按钮拆分终端,在第二个终端中运行以下命令。
注意: 请确认 /home/project/lab 目录中存在 server.py 文件,避免遇到连接被拒绝的错误。
curl -X GET -i -w '\n' localhost:5000
-X 参数指定 GET 命令,-i 参数用于显示响应头。

CURL 命令的输出应返回 Hello World。请注意,返回状态为 HTTP 200 OK,Content-type 为 text/html。在实验的下一部分,你将使用 JSON 代替纯文本返回自定义状态。
参考答案
请再次检查你的代码是否与以下参考答案一致。
点击此处查看答案。
# Import the Flask class from the flask module
from flask import Flask
# Create an instance of the Flask class, passing in the name of the current module
app = Flask(__name__)
# Define a route for the root URL ("/")
@app.route("/")
def hello_world():
# Function that handles requests to the root URL
return "Hello, World!"
步骤 2:返回 JSON
你的任务
恭喜你在 Flask 服务器中创建了第一个路由处理函数!@app.route() 方法可以返回多种不同的内容类型。在本项目中,请返回以下 JSON,代替 Hello World 字符串。
"message": "Hello World"
回顾视频中的内容,从方法返回 JSON 对象有两种方式:
- 返回一个 Python 字典
- 对字符串使用 jsonify() 方法
本实验要求使用第一种方式。
提示
可以修改现有的 index 方法,使其返回所需的 JSON 消息。
点击此处查看提示。
在 index 方法中返回包含
Hello World消息的字典。
# Import the Flask class from the flask module
from flask import Flask, jsonify
# Create an instance of the Flask class, passing in the name of the current module
app = Flask(__name__)
# Define a route for the root URL ("/")
@app.route("/")
def index():
return {insert dictionary here}
参考答案
请再次检查你的代码是否与以下参考答案一致。
点击此处查看答案。
# Import the Flask class from the flask module
from flask import Flask
# Create an instance of the Flask class, passing in the name of the current module
app = Flask(__name__)
# Define a route for the root URL ("/")
@app.route("/")
def index():
# Function that handles requests to the root URL
# Create a dictionary to return as a response
return {"message": "Hello World"}
如果服务器仍在运行,就可以继续。如果没有运行,请再次使用以下命令启动服务器:
flask --app server --debug run
现在应该可以对 localhost:5000/ 使用 CURL 命令。由于当前终端正在运行服务器,可以使用 Split Terminal 按钮拆分终端,在第二个终端中运行以下命令。
curl -X GET -i -w '\n' localhost:5000

CURL 命令的输出应返回 JSON:{"message": "Hello World"}。请注意,此时返回状态为 HTTP 200 OK,Content-type 为 application/json。
作者
CF