所有文章 > API开发 > Django REST Framework,一个构建 API 的完美库!
Django REST Framework,一个构建 API 的完美库!

Django REST Framework,一个构建 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文章!