所有文章 > API开发 > 使用 Django REST Framework构建Web API操作步骤
使用 Django REST Framework构建Web API操作步骤

使用 Django REST Framework构建Web API操作步骤

今天我们将一起学习如何使用 Django REST Framework(简称 DRF)来构建一个 Web API。无论你是新手,还是有一定经验的开发者,掌握 DRF 都能让你高效地构建 RESTful API,提供灵活的数据访问接口。

在这篇文章中,我会带你从基础入手,一步步建立一个简单的 API 项目,并展示如何使用 DRF 提供的强大功能来处理模型、序列化、视图和路由等以及如何用python命令行格式化json文件。最重要的是,学习这些后,你可以用它们去构建属于自己的应用程序,甚至是后台服务。

一、如何使用 Django REST Framework(简称 DRF)来构建一个 Web API

1、安装 Django 和 Django REST Framework

在开始之前,我们首先要安装 Django 和 Django REST Framework,它们是我们开发 API 的基础。

首先,使用以下命令安装 Django:

pip install django

接着,安装 DRF:

pip install djangorestframework

然后,在你的 Django 项目中的 settings.py 文件里,加入 'rest_framework' 到 INSTALLED_APPS

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # 添加 DRF
]

2、创建一个简单的 API

接下来,我们将通过 DRF 创建一个简单的 API。我们从定义一个模型开始,然后通过序列化器将数据转换成 JSON 格式,最后提供接口让用户访问。

(1)定义模型

在 Django 中,模型是我们用于定义数据结构的地方。比如,我们创建一个 Book 模型,包含书籍的标题、作者和出版日期:

from django.db import models

class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
published_date = models.DateField()

def __str__(self):
return self.title

代码解析

  • Book 类继承自 models.Model,它会自动创建数据库表来存储书籍数据。
  • title 和 author 使用 CharField 存储文本,published_date 使用 DateField 存储日期。

运行以下命令来创建数据库表:

python manage.py makemigrations
python manage.py migrate

2)创建序列化器

序列化器(Serializer)是将数据转换为 JSON 格式的工具。DRF 提供了一个强大的 ModelSerializer,它可以自动地将 Django 模型转为 JSON 格式。

在 serializers.py 中创建一个序列化器:

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['id', 'title', 'author', 'published_date']

代码解析

  • BookSerializer 继承自 ModelSerializer,它会根据 Book 模型自动生成序列化规则。
  • fields 用来指定我们需要序列化哪些字段。

(3)创建视图

DRF 提供了多种视图类,我们可以用它们来处理 HTTP 请求。在这里,我们将使用 ListCreateAPIView,它支持获取所有书籍数据以及创建新书籍。

在 views.py 中,添加如下代码:

from rest_framework import generics
from .models import Book
from .serializers import BookSerializer

class BookListCreateView(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer

代码解析

  • BookListCreateView 继承自 generics.ListCreateAPIView,它提供了两个功能:列出所有书籍和创建新书籍。
  • queryset 用来获取数据库中的所有书籍。
  • serializer_class 指定我们要用来序列化数据的类。

(4)配置 URL 路由

为了让 API 能被访问,我们需要配置 URL 路由。在 urls.py 中添加以下内容:

from django.urls import path
from .views import BookListCreateView

urlpatterns = [
path('api/books/', BookListCreateView.as_view(), name='book-list-create'),
]

代码解析

  • 这行代码将 /api/books/ 映射到 BookListCreateView 视图。通过这个 URL,用户可以访问到所有书籍的数据,并可以通过 POST 请求添加新书籍。

(5)如何获取数据库表结构工具

获取数据库表结构工具的步骤如下:

  1. screw(螺丝钉)
  1. MySQL Workbench
  • MySQL Workbench是MySQL官方提供的图形化管理工具,可以查看和管理数据库表结构。
  • 你可以从MySQL官方网站免费下载MySQL Workbench:MySQL Workbench
  1. dbForge Studio for MySQL
  • dbForge Studio for MySQL是一个强大的数据库管理工具,支持MySQL数据库。
  • 你可以通过ComponentSource网站购买dbForge Studio for MySQL的许可证:dbForge Studio for MySQL 价格
  1. 编程语言的数据库接口
  • 许多编程语言如Python、Java、PHP等都提供了数据库接口,可以在程序中动态获取表结构信息。
  • 例如,Python的sqlite3模块和pandas库,Java的JDBC,PHP的PDO扩展等。。
  1. 数据库管理工具
  • 除了MySQL Workbench,还有其他数据库管理工具如pgAdmin(PostgreSQL)、SQL Server Management Studio (SSMS)(SQL Server)等,它们提供了图形化界面来查看和管理数据库表结构

(6)获取数据库表结构工具有哪些

获取数据库表结构工具有很多,这里列举一些常用的

  1. MySQL Workbench
  • MySQL官方提供的集成环境,用于数据库设计、开发和管理。
  1. phpMyAdmin
  • 一个基于Web的MySQL数据库管理工具,可以导出数据库结构和数据。
  1. Navicat
  • 一个支持多种数据库的图形化管理工具,包括MySQL、PostgreSQL、Oracle等。
  1. DBeaver
  • 一个开源的数据库管理工具,支持多种数据库,包括MySQL、PostgreSQL、SQLite等。
  1. Toad
  • 一个数据库管理工具,支持多种数据库系统,提供数据建模、代码生成等功能。
  1. dbForge Studio
  • 一系列数据库管理工具,支持MySQL、SQL Server、Oracle等。

3、测试 API

现在我们已经完成了 API 的基本设置。你可以通过运行开发服务器来测试 API:

python manage.py runserver

打开浏览器,访问 http://127.0.0.1:8000/api/books/,你应该能看到一个 JSON 格式的书籍列表。如果你使用 POST 请求并传递数据,新的书籍将被创建。

小贴士:你可以使用 Postman 或 Insomnia 等工具来测试你的 API。通过这些工具,你可以方便地发送 GET、POST、PUT 和 DELETE 请求,查看 API 返回的结果。

4、添加权限控制

在实际开发中,我们通常希望对 API 进行权限控制,确保只有授权用户才能访问某些功能。DRF 提供了权限系统来简化这一过程。

例如,只有认证用户才能访问书籍数据:

from rest_framework.permissions import IsAuthenticated

class BookListCreateView(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
permission_classes = [IsAuthenticated]

代码解析

  • permission_classes = [IsAuthenticated] 表示只有经过认证的用户才能访问该视图。

5、处理分页

API 返回的数据量很大时,我们可以为它添加分页功能,这样用户就能分批获取数据,而不会一次性加载所有数据。

在 settings.py 中,配置分页参数:

REST_FRAMEWORK = {
'PAGE_SIZE': 5,
}

代码解析

  • 这将自动限制每次返回最多 5 条记录。你可以根据需要调整这个值。

6、错误处理

DRF 提供了丰富的错误处理机制,默认情况下,当出现错误时,DRF 会自动返回带有错误信息的响应。比如,当发送无效的数据时,DRF 会返回 400 错误,并显示详细的错误消息。

你也可以自定义错误消息,或者在视图中处理特定的异常。

二、如何用python命令行格式化json文件

在Python中,你可以使用内置的json模块来格式化JSON文件。以下是一个简单的命令行脚本,它读取一个JSON文件,然后将其格式化并打印到标准输出。这个脚本就是用于“python命令行格式化json文件”的实用工具。如果你想要将格式化后的JSON写回文件,也可以在脚本中添加相应的代码。下面我们来学习下如何用python命令行格式化json文件:

首先,确保你的JSON文件是有效的。以下是一个名为format_json.py的Python脚本示例,它专门用于“python命令行格式化json文件”:

import json
import sys

def format_json(input_file_path, output_file_path=None):
try:
with open(input_file_path, 'r') as file:
data = json.load(file)

# 格式化JSON数据
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)

if output_file_path:
# 将格式化后的JSON写入文件
with open(output_file_path, 'w') as file:
file.write(formatted_json)
else:
# 打印格式化后的JSON到标准输出
print(formatted_json)

except FileNotFoundError:
print(f"Error: The file {input_file_path} does not exist.")
except json.JSONDecodeError:
print("Error: The file contains invalid JSON.")
except Exception as e:
print(f"An unexpected error occurred: {e}")

if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python format_json.py <input_file_path> [output_file_path]")
else:
input_file_path = sys.argv[1]
output_file_path = sys.argv[2] if len(sys.argv) > 2 else None
format_json(input_file_path, output_file_path)

使用这个脚本,你可以通过命令行传递输入文件的路径,如果需要,还可以传递输出文件的路径。例如,如果你想要“python命令行格式化json文件”,可以这样做:

python format_json.py input.json

这将格式化input.json文件并打印到标准输出。如果你想要将格式化后的JSON写入新文件,可以这样做:

python format_json.py input.json output.json

这将创建一个名为output.json的文件,其中包含格式化后的JSON数据。这个操作也是“python命令行格式化json文件”的一个应用场景。

请确保在运行脚本之前,你的Python环境已经设置好,并且你有权限读取和写入指定的文件。这个脚本是“python命令行格式化json文件”的一个实际应用,可以帮助你快速格式化JSON数据,无论是打印到控制台还是写入到新文件。

三、总结

今天,我们一起学习了 Django REST Framework,从如何安装、定义模型,到如何使用 DRF 创建 API,最后我们还学会了如何进行权限控制和分页处理以及如何用python命令行格式化json文件、如何获取数据库表结构工具。通过 DRF,你可以轻松地为你的 Django 项目提供 RESTful API,帮助前端和移动端更方便地访问后端数据。

练习题

  1. 在现有 API 的基础上,添加一个功能,允许用户更新书籍信息。
  2. 添加一个功能,允许用户根据书名或作者搜索书籍。
  3. 为 API 添加用户认证和授权,确保只有管理员才能删除书籍。

今天的 Python 学习之旅就到这里啦!记得动手敲代码,实践是最好的学习方式。祝大家学习愉快,Python 学习节节高!

文章转自微信公众号@打个新

#你可能也喜欢这些API文章!