Python进行Restful API开发实例详解

下面我会详细讲解 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日

相关文章

  • flask上传作品之dbm操作的实现

    下面我将详细讲解“flask上传作品之dbm操作的实现”的完整攻略。 1. 确定需求与工具 在开始编码之前,我们需要明确需求并选好所需要的工具。 需求:实现通过flask上传作品并将相关信息储存在dbm数据库中。 工具:flask、dbm 2. 导入所需模块 在编写代码之前,我们需要先导入所需的模块。下面是一个简单的导入步骤,需要额外安装flask和dbm包…

    Flask 2023年5月16日
    00
  • Flask中特殊装饰器的使用

    下面我将给出一个完整的Flask中特殊装饰器的使用攻略。 一、介绍 在 Flask 中,我们可以使用特殊装饰器来扩展 Flask 的功能。Flask 提供了很多特殊装饰器,比如 @app.route、@app.before_request、@app.after_request 等等,这些装饰器可以把一些特定的函数绑定到 Flask 的请求处理过程中,实现对请…

    Flask 2023年5月16日
    00
  • Python3创建Django项目的几种方法(3种)

    下面给你详细讲解Python3创建Django项目的几种方法。 方法一:使用django-admin.py 安装 Django,使用 pip install Django 命令进行安装。 在终端中输入 django-admin.py startproject projectname,其中 projectname 为你要创建的项目名称。 在终端中输入 cd p…

    Flask 2023年5月16日
    00
  • 如何将python代码生成API接口

    下面是详细的“如何将python代码生成API接口”的完整攻略: 1. 安装Flask 首先,我们需要安装一个轻量级的Python web框架 Flask,它可以帮我们快速构建一个 RESTful API。安装命令如下: pip install Flask 2. 编写Python代码 在安装好 Flask 后,我们需要编写 Python 代码,将其转化为网络…

    Flask 2023年5月16日
    00
  • Nginx如何根据前缀路径转发到不同的Flask服务

    根据您的要求,这里为您详细讲解“Nginx如何根据前缀路径转发到不同的Flask服务”的完整攻略。 概述 Flask是一个轻量级的Python web框架,在一些简单的web应用中很受欢迎。而Nginx是一款高性能的HTTP和反向代理服务器。Nginx和Flask的结合可以实现高并发、高可用性的web服务。在某些场景中,我们会需要在同一台服务器上部署多个Fl…

    Flask 2023年5月16日
    00
  • Django和Flask框架优缺点对比

    Django和Flask是两个最常用的Python web框架,它们极大地简化了Web应用程序的开发。然而,它们之间有许多不同点。在本攻略中,我们将深入探讨Django和Flask的优缺点对比,让你更好地了解它们的差异,从而有针对性地进行选型。 Django框架优缺点对比 优点 强大的ORM Django附带了自己的ORM,它可以让你很容易地与数据库交互。O…

    Flask 2023年5月15日
    00
  • Flask sqlalchemy一对多与多对一与一对一及多对多关系介绍

    下面给您详细讲解“Flask sqlalchemy一对多与多对一与一对一及多对多关系介绍”的完整攻略。 一对多关系 一对多关系适用于一个模型拥有多个其他模型的实例,但是其他模型的实例只属于一个模型实例。比如一个用户可以拥有多篇文章,但是一篇文章只属于一个用户。 在 Flask sqlalchemy 中可以使用 relationship 属性来建立一对多关系,…

    Flask 2023年5月15日
    00
  • 一个基于flask的web应用诞生 使用模板引擎和表单插件(2)

    我会详细讲解“一个基于flask的web应用诞生 使用模板引擎和表单插件(2)”的完整攻略,并包含两条示例说明。 【标题1:准备工作】 在开始构建一个基于flask的web应用之前,需要进行一些准备工作。 安装Flask Flask是一个Python的轻量级Web框架,如果你还没有安装它,请先通过pip安装。 pip install Flask 获取示例代码…

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