百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

使用 Django Rest Framework 在 10 分钟内开发 API

itomcoil 2025-03-01 14:18 9 浏览

#记录我的9月生活#

在当今快速发展的开发世界中,能够快速构建可靠、可扩展且易维护的 API 是一项必备技能。Django Rest Framework(DRF)提供了一个强大而灵活的工具包,可以快速构建 Web API。本指南将带您从头开始,在不到 10 分钟内使用 DRF 创建一个 API。无论您是经验丰富的开发人员还是 Django 新手,本教程将帮助您快速掌握最佳实践。

1. Django Rest Framework 简介

Django Rest Framework(DRF)是一个构建在 Django 之上的开源框架,能够轻松创建 RESTful API。它简化了处理 HTTP 请求、数据库交互以及返回 JSON 等格式数据的复杂性。借助 DRF 的灵活模块化设计,您可以根据需要扩展和自定义框架,而无需重写现有功能。

2. 设置开发环境

在开始编写代码之前,我们需要准备好开发环境。确保系统已准备好运行 Django 项目。

2.1 安装 Python

如果尚未安装 Python,请访问 python.org 并下载最新的稳定版本(Python 3.10 或更高版本)。在安装过程中,确保将 Python 添加到系统的 PATH 中。

通过以下命令验证安装是否成功:

python --version

2.2 创建虚拟环境

使用虚拟环境可以将项目依赖与系统隔离开来,保持项目的独立性。通过以下命令创建虚拟环境:

python -m venv drf_env

激活虚拟环境:

  • macOS/Linux 用户:
source drf_env/bin/activate
  • Windows 用户:
drf_env\Scripts\activate

此时,终端提示符应显示虚拟环境的名称,表明已成功激活。

2.3 安装 Django 和 Django Rest Framework

激活虚拟环境后,运行以下命令安装 Django 和 DRF:

pip install django djangorestframework

这将安装 Django 和 DRF,提供构建 API 所需的库。

3. 创建 Django 项目

现在,开发环境已经准备好,我们可以创建一个 Django 项目来容纳我们的 API。

3.1 启动新项目

运行以下命令启动一个新项目:

django-admin startproject quickapi
cd quickapi

此命令将为您的 Django 项目创建基本结构,包括 settings.pyurls.py 等重要文件。

3.2 创建 Django 应用

Django 项目通常由应用程序(app)组成,应用是功能的模块化单元。在本例中,我们将创建一个名为 books 的应用:

python manage.py startapp books

随后,别忘了在 settings.py 中将该应用注册到 INSTALLED_APPS 中:

# 在 quickapi/settings.py 中
INSTALLED_APPS = [
    # 默认的 Django 应用...
    'rest_framework',  # 添加 DRF 到已安装的应用
    'books',           # 添加 books 应用
]

4. 定义 API 模型

我们的 API 需要处理数据,在 Django 中,数据由模型表示。模型是直接映射到数据库表的 Python 类。

4.1 创建一个简单的模型

books/models.py 中定义一个简单的书籍模型:

from django.db import models

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

    def __str__(self):
        return self.title

这里我们创建了一个 Book 模型,包含三个字段:titleauthorpublication_date,这些字段将在数据库中存储。

4.2 应用迁移

要将模型保存到数据库中,我们需要创建并应用迁移。迁移是 Django 跟踪模型更改并将其反映到数据库架构中的方式。运行以下命令:

python manage.py makemigrations
python manage.py migrate

这将为 Book 模型创建数据库架构。

5. 序列化模型

要通过 API 公开数据,我们需要将其转换(即 序列化)为 JSON 等格式。DRF 提供了一个强大的序列化框架来处理这项工作。

5.1 创建序列化类

books/serializers.py 中创建一个 BookSerializer 类,将 Book 模型转换为 JSON:

from rest_framework import serializers
from .models import Book

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

此序列化器将处理将 Book 模型实例转换为 JSON 格式,并验证传入的数据。

5.2 理解序列化字段

默认情况下,ModelSerializer 会自动包含模型中的所有字段,除非另行指定。在此例中,我们明确定义了 idtitleauthorpublication_date。序列化字段可确保数据在通过 API 公开时得到验证。

6. 构建 API 视图

在 Django 中,视图负责处理传入的请求、与数据库交互并返回响应。DRF 提供了多种工具来简化这一过程。

6.1 使用通用视图

books/views.py 中创建一个简单的视图,允许列出所有书籍或创建新书籍:

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

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

ListCreateAPIView 是一个通用视图,处理列出和创建对象的操作。通过指定 querysetserializer_class,DRF 自动处理大部分样板代码。

7. 配置 URL 路由

现在我们已经构建了视图,接下来需要将它与 URL 绑定,使外界可以访问到它。

7.1. 设置 URL 路由

创建一个 books/urls.py 文件,并添加以下代码:

from django.urls import path
from .views import BookList

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

这将为我们的图书 API 端点创建一个路由。

7.2. 使用 DefaultRouter(适用于 ViewSets)

如果你使用的是 ViewSets,Django 的 DefaultRouter 会自动为所有可用操作(列出、检索、创建等)生成路由。

quickapi/urls.py 中,包含该应用的 URL:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('books.urls')),
]

8. 测试 API

在部署之前,确保 API 按预期工作至关重要。DRF 无缝集成了 Django 的测试工具,让我们可以直接测试 API 端点。

8.1. 使用 Django 内置测试客户端

books/tests.py 中为 BookList 视图创建一个测试用例:

from django.test import TestCase
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APIClient
from .models import Book

class BookAPITest(TestCase):
    def setUp(self):
        self.client = APIClient()
        self.book_data = {'title': 'Django for Beginners', 'author': 'William S. Vincent', 'publication_date': '2020-01-01'}
        self.response = self.client.post(
            reverse('book-list'),
            self.book_data,
            format="json")
    
    def test_api_can_create_a_book(self):
        self.assertEqual(self.response.status_code, status.HTTP_201_CREATED)

8.2. 进行 API 请求

手动测试 API 时,运行 Django 开发服务器:

python manage.py runserver

你现在可以通过 http://localhost:8000/api/books/ 访问你的 API。

9. 增强 API 功能

在基本 API 工作正常后,你可能想要添加一些高级功能,如过滤、搜索和分页,以提升用户体验。

9.1. 添加过滤和搜索

DRF 让在 API 中添加搜索功能变得很简单。在 books/views.py 中修改视图:

from rest_framework import filters

class BookList(generics.ListCreateAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    filter_backends = [filters.SearchFilter]
    search_fields = ['author', 'title']

这允许用户通过查询参数(如 ?search=title)来按作者或标题搜索图书。

9.2. 实现分页

为防止客户端接收到过多数据,可以对 API 结果进行分页。在 quickapi/settings.py 中添加:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

这样每页的响应数据将限制为 10 本书。

10. 保护 API

安全性是任何 API 的关键。DRF 提供了内置的身份验证和权限工具。

10.1. 添加身份验证

为了限制访问权限,可以在视图中添加身份验证类:

from rest_framework.authentication import SessionAuthentication, BasicAuthentication

class BookList(generics.ListCreateAPIView):
    authentication_classes = [SessionAuthentication, BasicAuthentication]

这为 API 添加了基本的会话和用户名/密码身份验证。

10.2. 实施权限控制

要进一步控制访问,可以使用权限类。例如,限制只有已验证的用户才能访问 API:

from rest_framework.permissions import IsAuthenticated

class BookList(generics.ListCreateAPIView):
    permission_classes = [IsAuthenticated]

11. 结论

恭喜!在不到 10 分钟内,你已经使用 Django Rest Framework 构建了一个功能齐全的 API。我们从环境设置开始,一直到实现过滤和身份验证等高级功能。DRF 的灵活性和易用性使其成为快速构建健壮 API 的绝佳选择。继续尝试,很快你就能构建具有更复杂功能的 API!

相关推荐

Python Qt GUI设计:将UI文件转换Python文件三种妙招(基础篇—2)

在开始本文之前提醒各位朋友,Python记得安装PyQt5库文件,Python语言功能很强,但是Python自带的GUI开发库Tkinter功能很弱,难以开发出专业的GUI。好在Python语言的开放...

Connect 2.0来了,还有Nuke和Maya新集成

ftrackConnect2.0现在可以下载了--重新设计的桌面应用程序,使用户能够将ftrackStudio与创意应用程序集成,发布资产等。这个新版本的发布中还有两个Nuke和Maya新集成,...

Magicgui:不会GUI编程也能轻松构建Python GUI应用

什么是MagicguiMagicgui是一个Python库,它允许开发者仅凭简单的类型注解就能快速构建图形用户界面(GUI)应用程序。这个库基于Napari项目,利用了Python的强大类型系统,使得...

Python入坑系列:桌面GUI开发之Pyside6

阅读本章之后,你可以掌握这些内容:Pyside6的SignalsandSlots、Envents的作用,如何使用?PySide6的Window、DialogsandAlerts、Widgets...

Python入坑系列-一起认识Pyside6 designer可拖拽桌面GUI

通过本文章,你可以了解一下内容:如何安装和使用Pyside6designerdesigner有哪些的特性通过designer如何转成python代码以前以为Pyside6designer需要在下载...

pyside2的基础界面(pyside2显示图片)

今天我们来学习pyside2的基础界面没有安装过pyside2的小伙伴可以看主页代码效果...

Python GUI开发:打包PySide2应用(python 打包pyc)

之前的文章我们介绍了怎么使用PySide2来开发一个简单PythonGUI应用。这次我们来将上次完成的代码打包。我们使用pyinstaller。注意,pyinstaller默认会将所有安装的pack...

使用PySide2做窗体,到底是怎么个事?看这个能不能搞懂

PySide2是Qt框架的Python绑定,允许你使用Python创建功能强大的跨平台GUI应用程序。PySide2的基本使用方法:安装PySide2pipinstallPy...

pycharm中conda解释器无法配置(pycharm安装的解释器不能用)

之前用的好好的pycharm正常配置解释器突然不能用了?可以显示有这个环境然后确认后可以conda正在配置解释器,但是进度条结束后还是不成功!!试过了pycharm重启,pycharm重装,anaco...

Conda使用指南:从基础操作到Llama-Factory大模型微调环境搭建

Conda虚拟环境在Linux下的全面使用指南:从基础操作到Llama-Factory大模型微调环境搭建在当今的AI开发与数据分析领域,conda虚拟环境已成为Linux系统下管理项目依赖的标配工具。...

Python操作系统资源管理与监控(python调用资源管理器)

在现代计算环境中,对操作系统资源的有效管理和监控是确保应用程序性能和系统稳定性的关键。Python凭借其丰富的标准库和第三方扩展,提供了强大的工具来实现这一目标。本文将探讨Python在操作系统资源管...

本地部署开源版Manus+DeepSeek创建自己的AI智能体

1、下载安装Anaconda,设置conda环境变量,并使用conda创建python3.12虚拟环境。2、从OpenManus仓库下载代码,并安装需要的依赖。3、使用Ollama加载本地DeepSe...

一文教会你,搭建AI模型训练与微调环境,包学会的!

一、硬件要求显卡配置:需要Nvidia显卡,至少配备8G显存,且专用显存与共享显存之和需大于20G。二、环境搭建步骤1.设置文件存储路径非系统盘存储:建议将非安装版的环境文件均存放在非系统盘(如E盘...

使用scikit-learn为PyTorch 模型进行超参数网格搜索

scikit-learn是Python中最好的机器学习库,而PyTorch又为我们构建模型提供了方便的操作,能否将它们的优点整合起来呢?在本文中,我们将介绍如何使用scikit-learn中的网格搜...

如何Keras自动编码器给极端罕见事件分类

全文共7940字,预计学习时长30分钟或更长本文将以一家造纸厂的生产为例,介绍如何使用自动编码器构建罕见事件分类器。现实生活中罕见事件的数据集:背景1.什么是极端罕见事件?在罕见事件问题中,数据集是...