Python进行Restful API开发实例详解

yizhihongxing

下面我会详细讲解 Python 进行 Restful API 开发实例的完整攻略,并提供两个示例说明。

准备工作

在进行 Restful API 开发之前,需要安装 Flask 和 Flask-RESTful 等库。执行以下命令进行安装:

pip install Flask Flask-RESTful

示例一:ToDo List

在这个示例中,我们将创建一个简单的 ToDo List,包含以下操作:

  • 获取所有 tasks
  • 获取单个 task
  • 创建 task
  • 更新 task
  • 删除 task

  • 创建 Flask 应用
    我们首先创建一个简单的 Flask 应用,代码如下:

from flask import Flask

app = Flask(__name__)

if __name__ == '__main__':
    app.run(debug=True)
  1. 创建 tasks 数据
    我们创建 tasks 数据来模拟正式的数据库,代码如下:
tasks = [
    {
        'id': 1,
        'title': 'Learn Python',
        'description': 'Learn Python basics',
        'done': False
    },
    {
        'id': 2,
        'title': 'Read book',
        'description': 'Read book for 1 hour',
        'done': False
    }
]
  1. 创建 API 资源
    接下来,我们定义 Flask-RESTful 的 Resource 类来管理 API 资源。我们创建一个 TaskList 类来获取所有 tasks,以及一个 Task 类来获取单个 task。
from flask_restful import Resource

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

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

然后,我们在 Flask 应用中添加任务资源的路由:

from flask_restful import Api

api = Api(app)
api.add_resource(TaskList, '/tasks/')
api.add_resource(Task, '/tasks/<int:id>')

现在,我们可以在浏览器中访问 http://localhost:5000/tasks/ 来获取所有 tasks,访问 http://localhost:5000/tasks/1 来获取具有 ID 为 1 的单个 task。

  1. 更新和删除 task
    下一步,我们添加更新和删除 task 的方法。我们使用 PUT 请求来更新 task,使用 DELETE 请求来删除 task。
class Task(Resource):
    def get(self, id):
        for task in tasks:
            if task['id'] == id:
                return task
        return {'task': None}, 404

    def put(self, id):
        task = [task for task in tasks if task['id'] == id]
        if len(task) == 0:
            return {'task': None}, 404
        task = task[0]
        args = parser.parse_args()
        task['title'] = args['title']
        task['description'] = args['description']
        task['done'] = args['done']
        return {'task': task}

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

我们还需要定义 PUT 和 DELETE 请求的参数:

from flask_restful import reqparse

parser = reqparse.RequestParser()
parser.add_argument('title', type=str)
parser.add_argument('description', type=str)
parser.add_argument('done', type=bool)
  1. 创建 task
    最后,我们添加一个 POST 请求来创建 task。
class TaskList(Resource):
    def get(self):
        return {'tasks': tasks}

    def post(self):
        args = parser.parse_args()
        task = {
            'id': len(tasks) + 1,
            'title': args['title'],
            'description': args['description'],
            'done': False
        }
        tasks.append(task)
        return {'task': task}, 201

api.add_resource(TaskList, '/tasks/')
api.add_resource(Task, '/tasks/<int:id>')

现在,我们可以使用 POST 请求来创建一个 task:

$ curl -H "Content-Type: application/json" -X POST -d '{"title":"new task", "description":"new task description"}' http://localhost:5000/tasks/

示例二:简单的 RESTful API

在这个示例中,我们将创建一个简单的 RESTful API,包含以下操作:

  • 获取所有 students
  • 获取单个 student
  • 创建 student
  • 更新 student
  • 删除 student

  • 创建 Flask 应用
    我们首先创建一个简单的 Flask 应用,代码如下:

from flask import Flask, jsonify, request

app = Flask(__name__)

if __name__ == '__main__':
    app.run(debug=True)
  1. 创建 students 数据
    我们创建 students 数据来模拟正式的数据库,代码如下:
from datetime import datetime

students = [
    {
        'id': 1,
        'name': 'Anna',
        'age': 22,
        'created_at': datetime.now()
    },
    {
        'id': 2,
        'name': 'Bob',
        'age': 20,
        'created_at': datetime.now()
    }
]
  1. 创建 API 路由
    接下来,我们创建路由来定义 API 的各个功能,包括获取所有 students、获取单个 student 以及更新和删除 student。需要注意的是,在进行 POST 和 PUT 请求的处理时,我们需要从 request 中获取数据。
@app.route('/students', methods=['GET', 'POST'])
def handle_students():
    if request.method == 'GET':
        return jsonify(students)

    if request.method == 'POST':
        student = {
            'id': len(students) + 1,
            'name': request.json['name'],
            'age': request.json['age'],
            'created_at': datetime.now()
        }
        students.append(student)
        return jsonify(student), 201

@app.route('/students/<int:id>', methods=['GET', 'PUT', 'DELETE'])
def handle_student(id):
    student = [student for student in students if student['id'] == id]
    if len(student) == 0:
        return jsonify({'error': 'student not found'}), 404
    student = student[0]

    if request.method == 'GET':
        return jsonify(student)

    if request.method == 'PUT':
        student['name'] = request.json['name']
        student['age'] = request.json['age']
        student['created_at'] = datetime.now()
        return jsonify(student)

    if request.method == 'DELETE':
        students.remove(student)
        return jsonify({'result': True})
  1. 测试 API
    现在,我们可以在浏览器或终端中发送 GET、POST、PUT、DELETE 等请求来对 API 进行测试。例如,我们可以使用 curl 命令来创建一个新的 student:
$ curl -H "Content-Type: application/json" -X POST -d '{"name":"Lucy", "age":"28"}' http://localhost:5000/students

至此,我们完成了一个简单的 RESTful API 的开发。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python进行Restful API开发实例详解 - Python技术站

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

相关文章

  • Python使用Flask Migrate模块迁移数据库

    下面我将详细讲解如何在Python中使用Flask Migrate模块迁移数据库的完整攻略。 准备工作 使用Flask Migrate模块迁移数据库前,需要确认已安装以下组件: Flask Flask Migrate Flask Script SQLAlchemy 如果未安装以上组件,可以使用以下命令进行安装: pip install flask flask…

    Flask 2023年5月16日
    00
  • 使用Python的Flask框架构建大型Web应用程序的结构示例

    接下来我将为你详细讲解如何使用Python的Flask框架构建大型Web应用程序的结构示例,包括两个示例。 第一个示例:基于MVC的Web应用程序架构 概述:在这个示例中,我们先使用基于Model-View-Controller (MVC)设计模式的Web应用程序结构来创建一个Flask应用程序。 步骤一:创建Flask应用程序 # 导入Flask框架类 f…

    Flask 2023年5月15日
    00
  • 基于go-cqhttp与Flask搭建定制机器人项目实战示例

    下面我将详细讲解“基于go-cqhttp与Flask搭建定制机器人项目实战示例”的完整攻略,这个过程中包含两条示例的说明。 简介 本攻略将介绍使用go-cqhttp和Flask两个工具搭建一个定制的QQ机器人项目。其中第一条示例将展示如何使用go-cqhttp和Flask来实现一个抢购机器人,而第二条则将介绍如何使用这两个工具来实现一个天气查询机器人。 环境…

    Flask 2023年5月16日
    00
  • Python使用Flask框架获取当前查询参数的方法

    下面是关于“Python使用Flask框架获取当前查询参数的方法”的完整攻略: 什么是查询参数? 在网页中,我们经常需要向后端服务器发送一些请求,例如搜索、排序等请求。我们可以通过在请求的URL中添加查询参数来携带请求的信息。例如,搜索某个商品,我们可以使用如下的URL: https://example.com/search?q=iphone 在这个URL中…

    Flask 2023年5月16日
    00
  • Python的Flask框架中@app.route的用法教程

    下面是Python Flask框架中@app.route的用法教程攻略及示例说明。 什么是@app.route @app.route是一个装饰器,它用来注册一个网页的URL路径,每次当用户发送请求到该URL时,相应的函数就会被执行。这个装饰器通常用于Flask中的视图函数。 @app.route所装饰的函数将会作为视图函数,当访问被装饰的URL路径时,将触发…

    Flask 2023年5月15日
    00
  • ajax post下载flask文件流以及中文文件名问题

    下面是关于“ajax post下载flask文件流以及中文文件名问题”的完整攻略,其中包含两条示例说明。 1. AJAX post下载Flask文件流 1.1 前端实现 function downloadFile() { var xhr = new XMLHttpRequest(); xhr.open(‘POST’, ‘/download’, true); …

    Flask 2023年5月16日
    00
  • Python实现从url中提取域名的几种方法

    下面是我的完整回答。 Python实现从url中提取域名的几种方法 提取url中的域名是一个常见的需求。在Python中,可以使用多种方法来实现这一目标。 方法一:使用Python内置库 Python内置了一个urllib.parse库,它可以帮助我们解析url中的各个部分。 我们只需要使用urlsplit函数来将url分解成几个部分,然后从中提取出域名即可…

    Flask 2023年5月16日
    00
  • python3-flask-3将信息写入日志的实操方法

    下面我来详细讲解“python3-flask-3将信息写入日志的实操方法”的完整攻略。 1. 简介 在Flask应用程序中,日志可以帮助我们快速找到应用程序的问题。在日志中记录的对应的信息,有助于我们更快的定位问题并进行修复。在本文中,我们将会详细介绍如何将信息写入日志。在实现本案例时,我们会使用Python3、Flask框架,下面是示例代码。 2. 实现 …

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