Coursera 笔记

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 服务器

你的任务

  1. 创建 server.py 文件。
    首先,通过终端或文件编辑器菜单创建一个名为 server.py 的空文件。

点击此处查看提示。

以下命令会在正确的目录中创建该空文件。

touch /home/project/lab/server.py

在编辑器中打开 server.py

在 IDE 中打开 server.py

如果打开文件后出现名为 Python - Get Started 的新标签页,可以关闭该标签页,返回 Python 文件。

  1. 导入 Flask 模块。
    接着,在该文件中导入 Flask 模块,开始编写服务器代码。

点击此处查看提示。

将占位模块名替换为 Flask 类,在此文件中导入该类。

from flask import {insert module name here}
  1. 创建 Flask 应用
    导入 Flask 模块后,通过初始化 Flask 类来创建 Flask 应用程序。

点击此处查看提示。

使用 Flask 类初始化一个新应用程序。

from flask import {insert module name here}
app = {insert module name here}(__name__)
  1. 创建主路由。
    现在可以使用上一任务中创建的应用来创建第一个路由(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!"
  1. 定义主根 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!"
  1. 向客户端返回 “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 对象有两种方式:

  1. 返回一个 Python 字典
  2. 对字符串使用 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

© IBM Corporation 2023。保留所有权利。