使用Python & Flask 实现RESTful Web API的实例

以下是详细的攻略:

1. 确定需求 & 设计接口

在部署RESTful API服务之前,我们需要先确保实现的功能和设计的API接口符合需求。

在本案例中,我们设定了两个API接口:

  • /todolist/api/v1.0/tasks:获取所有任务(GET);添加新任务(POST)。
  • /todolist/api/v1.0/tasks/:task_id:获取某个具体任务(GET);更新某个具体任务(PUT);删除某个具体任务(DELETE)。

接口设计:

请求方式 URL 功能
GET /todolist/api/v1.0/tasks 获取所有任务
POST /todolist/api/v1.0/tasks 添加新任务
GET /todolist/api/v1.0/tasks/:task_id 获取某个具体任务
PUT /todolist/api/v1.0/tasks/:task_id 更新某个具体任务
DELETE /todolist/api/v1.0/tasks/:task_id 删除某个具体任务

2. 安装 Flask & 创建项目文件夹

接下来,我们开始创建Flask项目。在开始之前,需要提前安装好 Flask。

使用如下命令在终端安装Flask:

pip install Flask

在安装完Flask后,我们创建一个文件夹来存放我们的项目,可以在终端中运行如下命令:

mkdir todolist
cd todolist

3. 创建项目结构

在项目文件夹中,我们需要创建如下文件夹和文件:

todolist/
    |—— app.py
    |—— requirements.txt
    |—— api/
    |      |—— __init__.py
    |      |—— tasks.py
  • app.py: 项目启动文件,我们将在这个文件中编写整个应用的设置和路由。
  • requirements.txt:描述项目所需的依赖项,我们在本案例中需要安装Flask和Flask-RESTful。
  • api/init.py:初始化Python模块,在这个文件中我们将初始化Flask-RESTful API并将其绑定到Flask应用程序。
  • api/tasks.py:包含所有涉及任务的功能函数和路由处理程序。

4. 编写 API

4.1 编写 /todolist/api/v1.0/tasks GET 方法

我们现在需要将我们的API路由添加到应用程序中。首先,我们编写/tasks路由的GET方法来检索所有任务。在/api/tasks.py文件中,我们添加以下方法:

from flask_restful import Resource

tasks = [
    {
        'id': 1,
        'title': u'Buy groceries',
        'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
        'done': False
    },
    {
        'id': 2,
        'title': u'Learn Python',
        'description': u'Need to find a good Python tutorial on the web',
        'done': False
    }
]

class TaskList(Resource):
    def get(self):
        return {'tasks': tasks}

这个方法返回已经存储在tasks列表中的一些样本数据。

我们现在已经在/api/tasks.py文件中定义了TaskList类,因此我们可以在此处初始化API:

from flask_restful import Api
from api.tasks import TaskList

app = Flask(__name__)
api = Api(app)

api.add_resource(TaskList, '/todolist/api/v1.0/tasks')

这里,我们已经将TaskList添加到API中,因此它已经绑定到路由/todolist/api/v1.0/tasks。

4.2 编写 /todolist/api/v1.0/tasks POST 方法

我们将使用POST方法来向/tasks路由添加新任务数据。

在/api/tasks.py文件中,我们现在将定义Task新类并将其添加到API中:

from flask import request
from flask_restful import Resource

tasks = [
    {
        'id': 1,
        'title': u'Buy groceries',
        'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
        'done': False
    },
    {
        'id': 2,
        'title': u'Learn Python',
        'description': u'Need to find a good Python tutorial on the web',
        'done': False
    }
]

class TaskList(Resource):
    def get(self):
        return {'tasks': tasks}

    def post(self):
        task = {
            'id': tasks[-1]['id'] + 1,
            'title': request.json['title'],
            'description': request.json.get('description', ""),
            'done': False
        }
        tasks.append(task)
        return task, 201

函数post()将从传递到/tasks接口的POST请求中读取任务数据并将其添加到tasks列表中。我们caller通过代码request.json来使用POST请求中的JSON数据.

4.3 编写 /todolist/api/v1.0/tasks/:task_id GET 方法

首先,我们要获取某个具体任务,我们需要查询列表中的任务,找到相应的任务并返回它。由于任务id是我们唯一的索引字符串,我们可以使用它来查询特定任务。

在/api/tasks.py文件中,我们将添加GET方法来查询具有特定id的特定任务:

from flask import abort
from flask_restful import Resource

class Task(Resource):
    def get(self, task_id):
        task = [task for task in tasks if task['id'] == task_id]
        if len(task) == 0:
            abort(404)
        return {'task': task[0]}

这里代码我们使用了Python for循环跟if语句,并使用Flask的abort()函数返回404错误码。

我们现在可以将新的resource类添加到API中:

from api.tasks import TaskList, Task

api.add_resource(TaskList, '/todolist/api/v1.0/tasks')
api.add_resource(Task, '/todolist/api/v1.0/tasks/<int:task_id>')

4.4 编写 /todolist/api/v1.0/tasks/:task_id PUT 方法

PUT方法使用于更新任务。我们将使用PUT方法修正某个具体任务的信息,这些信息可以传递到/tasks/ API中。

在/api/tasks.py文件中,我们现在添加PUT方法来修改具有特定id的特定任务:

class Task(Resource):
    def get(self, task_id):
        task = [task for task in tasks if task['id'] == task_id]
        if len(task) == 0:
            abort(404)
        return {'task': task[0]}

    def put(self, task_id):
        task = [task for task in tasks if task['id'] == task_id]
        if len(task) == 0:
            abort(404)
        task = task[0]
        task['title'] = request.json.get('title', task['title'])
        task['description'] = request.json.get('description', task['description'])
        task['done'] = request.json.get('done', task['done'])
        return task

请求中的新任务数据将覆盖现有的任务字段。

4.5 编写 /todolist/api/v1.0/tasks/:task_id DELETE 方法

最后,我们需要实现删除任务。这将从/tasks路由中的特定任务ID删除任务。

在/api/tasks.py文件中,我们现在将定义DELETE方法来删除具有特定id的特定任务:

class Task(Resource):
    def get(self, task_id):
        task = [task for task in tasks if task['id'] == task_id]
        if len(task) == 0:
            abort(404)
        return {'task': task[0]}

    def put(self, task_id):
        task = [task for task in tasks if task['id'] == task_id]
        if len(task) == 0:
            abort(404)
        task = task[0]
        task['title'] = request.json.get('title', task['title'])
        task['description'] = request.json.get('description', task['description'])
        task['done'] = request.json.get('done', task['done'])
        return task

    def delete(self, task_id):
        task = [task for task in tasks if task['id'] == task_id]
        if len(task) == 0:
            abort(404)
        tasks.remove(task[0])
        return {'result': True}

5. 部署应用程序

接下来,我们要部署应用程序。

首先,我们需要创建和初始化Python虚拟环境。

python -m venv venv
venv/Scripts/activate

我们需要使用requirements.txt安装Flask和Flask-RESTful依赖项。请确保已转到包含requirements.txt的目录。输入以下命令:

pip install -r requirements.txt

现在,启动应用程序:

python app.py

你应该能够在浏览器中打开http://127.0.0.1:5000/todolist/api/v1.0/tasks并看到所有任务。

示例一

我们现在将使用python-requests库进行测试,以测试我们刚刚部署的应用程序。这个示例中,我们将添加一些新的任务并获取任务列表 -

import requests

# Add New Task
response = requests.post('http://localhost:5000/todolist/api/v1.0/tasks', json={'title': 'Read a book'})
print(response.status_code, response.json())

# Get All Tasks
response = requests.get('http://localhost:5000/todolist/api/v1.0/tasks')
print(response.status_code, response.json())

输出结果:

201 {'description': '', 'done': False, 'id': 3, 'title': 'Read a book'}
200 {'tasks': [{'description': 'Milk, Cheese, Pizza, Fruit, Tylenol', 'done': False, 'id': 1, 'title': 'Buy groceries'}, {'description': 'Need to find a good Python tutorial on the web', 'done': False, 'id': 2, 'title': 'Learn Python'}, {'description': '', 'done': False, 'id': 3, 'title': 'Read a book'}]}

我们的新任务已成功添加在列表中。

示例二

我们现在将调用API中的其他方法,比如删除任务和更新任务。

import requests

# Add New Task
response = requests.post('http://localhost:5000/todolist/api/v1.0/tasks', json={'title': 'Read a book'})

# Delete Task
response = requests.delete('http://localhost:5000/todolist/api/v1.0/tasks/3')
print(response.status_code)

# Get All Tasks After Delete
response = requests.get('http://localhost:5000/todolist/api/v1.0/tasks')
print(response.status_code, response.json())

# Update Task
response = requests.put('http://localhost:5000/todolist/api/v1.0/tasks/2', json={'title': 'Learn Flask'})
print(response.status_code, response.json())

# Get Specific Task
response = requests.get('http://localhost:5000/todolist/api/v1.0/tasks/2')
print(response.status_code, response.json())

输出结果:

204
200 {'tasks': [{'description': 'Milk, Cheese, Pizza, Fruit, Tylenol', 'done': False, 'id': 1, 'title': 'Buy groceries'}, {'description': 'Need to find a good Python tutorial on the web', 'done': False, 'id': 2, 'title': 'Learn Python'}]}
200 {'description': 'Need to find a good Python tutorial on the web', 'done': False, 'id': 2, 'title': 'Learn Flask'}
200 {'task': {'description': 'Need to find a good Python tutorial on the web', 'done': False, 'id': 2, 'title': 'Learn Flask'}}

在这个示例中,我们成功地调用了API的其他方法,如DELETE,PUT和GET。

这样,我们就成功地创建了一个使用Python和Flask框架实现RESTful Web API的应用程序,并成功地测试完涉及到的API方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python & Flask 实现RESTful Web API的实例 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Python Flask入门之模板

    下面是Python Flask入门之模板的完整攻略: 1. 概述 Python Flask是一种轻量级的Web框架,提供了非常简单的方式来构建Web应用程序。在Flask中,模板是用来定义页面布局、数据展示和用户输入的一种方法。通过使用模板,可以在不同的页面中嵌入一些公共的HTML代码、样式等。本文将是一个Python Flask模板入门教程。 2. 准备工…

    Flask 2023年5月15日
    00
  • 用 Flask 实现发送电子邮件

    Flask 是一款轻量级的 Web 框架,非常适合快速开发小型 Web 应用。 在这篇文章中,我们将详细介绍如何在 Flask 应用中发送邮件。 安装 Flask-Mail 扩展 首先,我们需要安装 Flask-Mail 扩展来发送邮件。可以使用下面的命令来安装 Flask-Mail: pip install Flask-Mail 接下来,我们需要设置 Fl…

    Flask 2023年3月13日
    00
  • Python Flask框架模块安装级使用介绍

    Python Flask是一个轻量级的Web应用框架,它基于Werkzeug和Jinja2库构建。 在使用Flask之前,我们需要使用pip工具安装Flask模块。打开命令行窗口,输入以下命令安装Flask模块: pip install flask 安装完毕后,我们可以创建一个Python文件,通过import语句来导入Flask模块,如下所示: from …

    Flask 2023年5月15日
    00
  • 将python项目打包成exe与安装包的全过程

    将 Python 项目打包成 exe 需要使用 pyinstaller 工具。pyinstaller 是一个非常常用的 Python 打包工具,可以将 Python 代码打包成可执行文件,支持 Windows、Linux 和 Mac OS 等多个平台。下面是将 Python 项目打包成 exe 的完整攻略: 安装 pyinstaller 在命令行中执行以下命…

    Flask 2023年5月16日
    00
  • Flask 入门系列 Cookie与session的介绍

    Flask 入门系列 Cookie与Session的介绍 本文将介绍 Flask 中 Cookie 和 Session 的使用方法,并给出两个示例说明。 Cookie 什么是 Cookie Cookie 是存储在客户端中的数据。它可以在不同请求之间传递,并且可以被服务器读取和修改。Cookie 最常见的应用场景是保存用户的状态信息,比如用户的登录状态。 设置…

    Flask 2023年5月16日
    00
  • Flask框架通过Flask_login实现用户登录功能示例

    下面我将为你详细讲解 Flask 框架通过 Flask_login 实现用户登录功能的完整攻略。 1. 简介 Flask 框架是一个轻量级、开源的Python Web框架,它基于Werkzeug WSGI工具箱和Jinja2 模板引擎。Flask 在设计时保持了简洁明了的特点,允许开发者使用相对简单的代码,快速搭建出功能完善的Web应用。 Flask_log…

    Flask 2023年5月15日
    00
  • 一个基于flask的web应用诞生 flask和mysql相连(4)

    下面来详细讲解“一个基于flask的web应用诞生 flask和mysql相连(4)”的完整攻略,并且包含两条示例说明。 标题 一、前言 在建立web应用的时候,数据的处理是非常重要的一项任务,而flask本身只是一个web应用框架,并不具备直接处理关系型数据库的能力,需要借助mysql等数据库来进行数据的存取操作。而本篇攻略将讲解如何基于flask框架来实…

    Flask 2023年5月15日
    00
  • 前端实现滑动按钮AJAX与后端交互的示例代码

    下面我将为你详细讲解“前端实现滑动按钮AJAX与后端交互的示例代码”的完整攻略,其中包括两条示例说明。 示例如下 示例一:实现滑动按钮的基本功能 1. HTML代码 首先,在html文件中添加如下代码: <div class="switch-box"> <input type="checkbox" i…

    Flask 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部