Python 中如何使用Falsk创建GET和POST请求

在这个教程中,我将展示如何使用 Flask 在 Python 中几个简单的步骤内创建 API。我将演示如何在几分钟内创建 GET 和 POST 方法。

如何使用 Flask 在 Python 中创建 API

API 在互联网和现代信息基础设施中发挥着至关重要的作用。API,即应用程序编程接口,包括一组规则、协议和工具,使得软件能够相互通信。API 促使两个软件系统之间进行结构化和预定义的交互,使它们能够交换信息或执行操作。

考虑这个例子:当您登录到 Medium 帐户时,您正在使用一个 API。通过使用您的用户名和密码提交登录表单后,此信息会迅速传输到服务器进行验证。服务器然后验证凭据并发送响应,在成功验证后授予您访问权限。这展示了 API 的功能。

存在各种类型的 API 和多种实现方法。在本教程中,我将指导您使用 Flask 在 Python 中构建 API,Flask 是一个广泛用于开发网站和 API 的 Web 框架。具体而言,我们将创建一个 GET 和一个 POST API。如果当前对 GET 和 POST 的概念还不清楚,不用担心 —— 我将在后面提供详细的解释。

目录:

  • 为什么使用 Python 创建 API
  • 使用 Flask 创建 Python API
  • 使用 Flask 在 Python 中创建 GET API
  • 使用 Flask 在 Python 中创建 POST API

为什么使用 Python 创建 API

在互联网的背景下,我们已经讨论了 API 的重要性,但我们还没有深入探讨如何使用 Python 创建一个 API。Python 以其简单性而广受认可,是一种广泛使用的编程语言。

Python 的语法清晰易读,使其非常适合开发和维护各种软件项目,包括构建 API。此外,Python 拥有一个庞大且高度活跃的社区,这是导致其在各种软件项目中广泛采用的关键因素。

使用 Flask 创建 Python API

Flask 是一个专为在 Python 中开发 Web 应用程序而设计的微框架。它具有轻量、快速、简单和灵活的特点。利用 Flask 可以创建复杂的 Web 应用程序,如 API。

Flask 以 Python 为基础,依赖于 WSGI 工具,这是一个用于 Python Web 应用程序的协议系统,以及 Jinja2,一个基于 Python 的模板引擎。

Flask 的一大亮点在于其简单性和广泛的定制可能性。仅需几行代码,您就可以建立一个 API 端点(称为托管 API 的 URL),并轻松集成一个 HTML 模板。

在接下来的部分,我将向您介绍如何使用 Python 和 Flask 构建 GET 和 POST API,所有操作都在一个简洁的代码块中完成。

注意:首先确保使用 pip install flaskconda install flask(如果您使用 conda 虚拟环境管理器)安装 Flask。

使用 Flask 在 Python 中创建 GET API

GET 方法是一种使用超文本传输协议(HTTP)从源检索信息的 API 类型。此方法用于向服务器发送请求,在 URL 中作为查询的请求参数可用。GET 请求的示例:

https://api.example.com/data?key1=value1&key2=value2

您正在向服务器发送有关 ‘key1’ 的请求,其值为 ‘value1’,以及 ‘key2’ 的请求,其值为 ‘value2’。数据和信息是公开可用的,除了用于查询的参数外,无需向服务器发送其他参数。例如,不需要凭据或证书。

GET 方法在加载网站时也会使用。在本节中,我们将使用 Flask 在 Python 中创建一个 GET API,以返回一个简单的 HTML 页面。

让我们编写代码!将以下代码保存为 “app.py”:

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/')
def index():
    return """
    
    
    
        
        Congratulations
    
    
        

Congratulations, this is your first API endpoint!

"""
if __name__ == '__main__': app.run(debug=True)

嗯,现在只需使用命令 flask run --app app 启动 Flask 应用程序,然后转到 http://127.0.0.1:5000。您将看到您的第一个在 Python 中使用 Flask 创建的 GET API:

这是一个非常简单的案例,但应该很有信息量。我们将 API 运行的 URL 称为“端点”。

让我们尝试构建一个稍微复杂的例子。我们将创建一个 GET 端点,通过查询参数可以请求数据。我们在 .py 文件的“服务器”中的数据将是:

data = [
    {"city": "Napoli", "country": "Italy"},
    {"city": "Pisa", "country": "Italy"},
    {"city": "Reykjavik", "country": "Iceland"},
    {"city": "Akureyri", "country": "Iceland"}
]

现在,我们将在“/cities”站点中创建一个部分。请记住 Flask 应用程序仍然需要运行(使用命令 flask run --app app)。

from flask import Flask, jsonify, request

app = Flask(__name__)

# 提供的数据
data = [
    {"city": "Napoli", "country": "Italy"},
    {"city": "Pisa", "country": "Italy"},
    {"city": "Reykjavik", "country": "Iceland"},
    {"city": "Akureyri", "country": "Iceland"}
]

@app.route('/cities', methods=['GET'])
def get_cities():
    return jsonify(data)

如果访问此页面,将返回我们数据集中的所有城市:

[
  {
    "city": "Napoli",
    "country": "Italy"
  },
  {
    "city": "Pisa",
    "country": "Italy"
  },
  {
    "city": "Reykjavik",
    "country": "Iceland"
  },
  {
    "city": "Akureyri",
    "country": "Iceland"
  }
]

如果我们想要使用 URL 通过查询参数过滤我们的数据,该怎么办呢?好吧,我们需要在我们的代码中添加一些行。我们将使用 Python 中的条件语句实现简单的逻辑。我们将接受查询参数如下:

  • 国家
  • 城市
  • 城市和国家都有
  • 以上都没有

因此,我们将以如下方式创建一个 if-then-else 语句:

if city and country:
     filtered_cities = [c for c in data if c['city'] == city and c['country'] == country]
     return jsonify(filtered_cities)
elif city:
    filtered_cities = [c for c in data if c['city'] == city]
    return jsonify(filtered_cities)
elif country:
    filtered_cities = [c for c in data if c['country'] == country]
    return jsonify(filtered_cities)
else:
    return jsonify(data)

在该代码中,我们可以处理所有可能的组合。如果我们应用筛选器,我们将收到经过筛选的数据,否则我们仍将得到经过筛选的数据。

完整的新代码将是:

from flask import Flask, jsonify, request

app = Flask(__name__)

data = [
    {"city": "Napoli", "country": "Italy"},
    {"city": "Pisa", "country": "Italy"},
    {"city": "Reykjavik", "country": "Iceland"},
    {"city": "Akureyri", "country": "Iceland"}
]

@app.route('/cities', methods=['GET'])
def get_cities():
    city = request.args.get('city')
    country = request.args.get('country')

    if city and country:
        filtered_cities = [c for c in data if c['city'] == city and c['country'] == country]
        return jsonify(filtered_cities)
    elif city:
        filtered_cities = [c for c in data if c['city'] == city]
        return jsonify(filtered_cities)
    elif country:
        filtered_cities = [c for c in data if c['country'] == country]
        return jsonify(filtered_cities)
    else:
        return jsonify(data)

if __name__ == '__main__':
    app.run(debug=True)

让我们试一个例子:如果我们想要获取一个意大利城市,我们可以使用此 URL:http://127.0.0.1:5000/cities?country=Italy

[
  {
    "city": "Napoli",
    "country": "Italy"
  },
  {
    "city": "Pisa",
    "country": "Italy"
  }
]

太好了!但是如果我们想要输入一些数据怎么办?要输入用户数据,我们不能使用 GET 方法。到目前为止,我们从服务器或 URL 获取数据时没有发送数据,除了参数之外。如果我们想要发送数据,我们将不得不创建一个 POST 方法。

使用 Flask 在 Python 中实现 POST API

POST 方法使我们能够向服务器传递信息。例如,当我们使用登录表单时,我们将凭据发送到服务器以验证其准确性,并获取对服务的访问权限。这个操作不仅仅是从服务器接收数据,用户还在向服务器传递数据。

考虑这种情况:我们想要将一个新的城市添加到我们网站城市数据集中。我们应该如何实现呢?答案就在于使用 POST 方法。

让我们看看如何在 Python 中使用 Flask 创建 POST API。我们可以选择使用相同的端点,也可以创建一个新的端点。为了方便起见,我们选择了前者,但方法的选择并不重要。

以下是实现这一目标的代码:

@app.route('/cities', methods=['POST'])
def add_city():
    new_city = request.json
    if 'city' in new_city and 'country' in new_city:
        data.append(new_city)
        return jsonify({"message": "成功添加城市", "city": new_city}), 201
    else:
        return jsonify({"error": "城市和国家是必填字段"}), 400

我们将发送一个包含新数据的 JSON(一个简单的 Python 字典),这个端点将把新数据附加到我们的城市数据集中,并返回一个带有代码的消息。通过将这些代码行加入到我们之前的代码中,我们的 Python 文件将如下所示:

from flask import Flask, jsonify, request

app = Flask(__name__)

# 提供的数据
data = [
    {"city": "Napoli", "country": "Italy"},
    {"city": "Pisa", "country": "Italy"},
    {"city": "Reykjavik", "country": "Iceland"},
    {"city": "Akureyri", "country": "Iceland"}
]

@app.route('/cities', methods=['GET'])
def get_cities():
    return jsonify(data)

@app.route('/cities',

 methods=['POST'])
def add_city():
    new_city = request.json
    if 'city' in new_city and 'country' in new_city:
        data.append(new_city)
        return jsonify({"message": "成功添加城市", "city": new_city}), 201
    else:
        return jsonify({"error": "城市和国家是必填字段"}), 400

if __name__ == '__main__':
    app.run(debug=True)

要在 Python 中使用 POST 方法发送数据,我们需要在一个单独的 Python 文件中执行几行代码。执行 Python 中的 POST 请求的代码如下:

import requests

url = 'http://127.0.0.1:5000/cities'
data = {'city': 'Sevilla', 'country': 'Spain'}
x = requests.post(url, json=data)
print(x.text)

注意:请记住 Flask 应用程序仍然需要运行。 (使用命令 flask run --app app

现在,让我们尝试通过添加城市 = ‘Sevilla’ 和国家 = ‘Spain’ 来进行 POST 请求。我们将观察到以下输出:

{
  "city": {
    "city": "Sevilla",
    "country": "Spain"
  },
  "message": "成功添加城市"
}

如果现在调用我们的端点会发生什么?以下是更新的数据:

[
  {
    "city": "Napoli",
    "country": "Italy"
  },
  {
    "city": "Pisa",
    "country": "Italy"
  },
  {
    "city": "Reykjavik",
    "country": "Iceland"
  },
  {
    "city": "Akureyri",
    "country": "Iceland"
  },
  {
    "city": "Sevilla",
    "country": "Spain"
  }
]

太棒了!我们成功地用几个简单的步骤在 Python 中使用 Flask 构建了一个 POST API。现在,我们可以使用 GET 方法从 URL 或服务器检索数据,并使用 POST 方法添加新数据。

总结思考

在本教程中,我演示了如何使用 Flask 在 Python 中创建 API。我们探讨了 API 在网络中的重要性,以及为什么选择 Python 作为构建它们的合适选择。同时,我们深入了解了在 Python 中使用 Flask 创建 GET 和 POST API 的过程。

你可能感兴趣的:(Python,python,开发语言)