ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

使用 Django REST Framework 构建 REST API:从零搭建 Event Finder 后端全指南

使用 Django REST Framework 构建 REST API:从零搭建 Event Finder 后端全指南 使用 Django REST Framework 构建 REST API从零搭建 Event Finder 后端全指南【免费下载链接】refineA React Framework for building internal tools, admin panels, dashboards B2B apps with unmatched flexibility.项目地址: https://gitcode.com/GitHub_Trending/re/refineDjango REST FrameworkDRF是目前 Python 生态中最常用的 REST API 开发框架之一。本指南以构建一个 Event Finder活动发现 应用为实战主线完整走通 REST 概念理解、Django 环境搭建、DRF 安装配置以及 Model、Serializer、ViewSet、URL 路由的 API 全流程实现并在最后结合 refine 的 Simple REST 数据提供器packages/simple-rest演示前端如何消费这套接口让读者能够独立交付一套可运行的 CRUD 后端服务。REST API 概览与重要性REST 是Representational State Transfer表征状态转移的缩写。基于 REST 风格的 API 允许不同应用之间通过 HTTP 协议互相通信应用 A 向 API 发送请求API 处理请求后返回响应从而实现数据交换与功能共享。一个典型场景是外卖应用用户点击立即下单时移动端向后端 API 发送请求后端处理订单后返回确认信息移动端再将结果呈现给用户。REST API 开发中最为常用的 HTTP 方法有以下四个HTTP 方法语义典型用途GET读取获取资源列表或单个资源POST新增创建新的资源PUT更新整体更新已有资源DELETE删除删除指定资源什么是 DjangoDjango 是一个使用 Python 编写的开源 Web 框架。它在开发社区中广受欢迎主要得益于以下几点简单与灵活脚手架式的项目结构让开发者快速上手自带 Web 服务器开发阶段无需单独配置 Nginx 等服务器runserver即可本地调试务实的设计内置大量常用组件ORM、Admin、表单、认证等避免重复造轮子加速开发安全中间件自动防护 SQL 注入、XSS、CSRF 等最常见的 Web 安全攻击。为什么选择 Django REST FrameworkDRF 提供了大量开箱即用的特性让请求处理、认证、序列化等常见任务变得非常简单。它与其他框架相比有几个显著差异URL 结构完全可控开发者可以自定义 URL 路由结构而不是依赖框架自动生成、灵活性不足的路由序列化能力强大序列化Serialization是 DRF 的核心组成同时支持 ORM 与非 ORM 数据源高适应性与模块化可以针对复杂项目按需定制遵循 DRY 原则通过 ViewSet、ModelSerializer 等抽象大幅减少重复代码降低冗余。Django REST Framework 的安装与配置下面以 VS Code 作为 IDE、在终端command prompt中执行命令为例分三步完成环境准备。Step 1创建并激活虚拟环境在开始使用 DRF 之前先创建并激活虚拟环境确保所有依赖被隔离安装在该环境中。项目文件夹创建好后运行python -m venv efvenv执行上述命令后会在当前目录生成名为efvenv的虚拟环境。接着激活它.\efvenv\Scripts\activate激活成功后命令行每一行的开头都会出现(efvenv)前缀提示。注意不同操作系统与 Shell 的激活命令不同。Linux 或 macOS 下使用source efvenv/bin/activate。Step 2安装前置依赖并创建项目激活虚拟环境后用 Python 包管理器安装 Djangopip install django安装完成后可用以下命令验证版本python -m django --version本教程将创建一个Event Finder活动发现应用因此先创建项目顶层结构负责控制整个 Web 应用django-admin startproject event_finder我们的 API 逻辑需要放在项目内的 app 中创建名为events的 appdjango-admin startapp events创建完成后eventsapp 内部会默认生成models.py、views.py等文件后续的 API 实现将基于这些文件展开。Step 3安装并配置 DRF使用 pip 安装 Django REST Frameworkpip install djangorestframework进入项目目录下的settings.py本例位于event_finder/settings.py找到INSTALLED_APPS列表将rest_framework、events以及常用的扩展django_filters过滤支持和drf_yasgSwagger 文档生成加入INSTALLED_APPS [ django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.messages, django.contrib.staticfiles, rest_framework, events, django_filters, drf_yasg, ]配置完成后DRF 即可作为 Django 项目的一部分被正常加载。如何使用 DRF 创建 API理解 RESTful 结构RESTful 结构围绕资源展开通过不同的 HTTP 方法操作资源。在 Event Finder 应用中事件Event即资源。我们为事件设计如下端点端点方法用途api/eventsGET获取所有事件列表api/events/idGET获取单个事件api/events/idPOST创建事件api/events/idPUT更新事件api/events/idDELETE删除事件接下来按 Model → Serializer → Views → URL 的顺序实现这套结构。创建 Model首先在models.py中定义数据模型。该文件在创建 app 时由 Django 自动生成。我们定义一个Event模型from django.db import models class Event(models.Model): CATEGORY_CHOICES [ (CON, Concert), (SPR, Sports), (TEC, Technology), (ART, Art), ] title models.CharField(max_length200) description models.TextField() date models.DateField() location models.CharField(max_length100) category models.CharField(max_length3, choicesCATEGORY_CHOICES, defaultCON) participant_count models.IntegerField(default0) is_active models.BooleanField(defaultTrue) def __str__(self): return self.title字段说明CATEGORY_CHOICES定义category字段的取值枚举存储 3 位短码defaultCON默认音乐会title标题最长 200 字符description长文本描述date日期字段适合存放活动日期location地点最长 100 字符participant_count参与人数默认 0is_active是否有效默认True。创建或修改模型后必须生成并应用数据库迁移migration才能创建对应的数据库表结构python manage.py makemigrations python manage.py migratemakemigrations会根据模型变更生成迁移文件migrate则将这些变更应用到数据库形成最终 schema。创建 SerializerDRF 的序列化器Serializer能将 QuerySet、Django 模型等复杂数据类型转换为 Python 原生数据类型进而渲染为JSON、XML、Yaml等多种格式反之也能将请求数据反序列化为模型实例。在eventsapp 内新建serializers.py为上面定义的模型创建EventSerializerfrom rest_framework import serializers from .models import Event class EventSerializer(serializers.ModelSerializer): class Meta: model Event fields __all__fields __all__表示序列化模型的所有字段如果只想暴露部分字段可改为字段名列表例如fields [title, date, location]这在需要隐藏内部字段如is_active时非常实用。创建 ViewsDRF 提供ViewSet概念它是一组类的集合封装了常见的GET、POST、PUT、DELETE方法。如果只需标准 CRUD 操作并希望尽量减少代码量ViewSet 是最合适的选择如果需要高度定制化的视图逻辑则建议使用 DRF 的APIView。在views.py中利用Event模型和EventSerializer创建EventViewSetfrom rest_framework import viewsets from .models import Event from .serializers import EventSerializer class EventViewSet(viewsets.ModelViewSet): queryset Event.objects.all() serializer_class EventSerializerModelViewSet继承了ListModelMixin、CreateModelMixin、RetrieveModelMixin、UpdateModelMixin、DestroyModelMixin的全部行为仅通过queryset与serializer_class两个类属性即可获得完整的 CRUD 能力这正是 DRF 遵循 DRY 原则的体现。添加 URL 模式配置好 views、models、serializers 之后还需要配置 URL 路由让每个端点映射到正确的视图。DRF 提供了非常简洁的路由处理方式。首先在 app 目录下创建urls.py导入必要函数并使用DefaultRouter注册路由from django.urls import path, include from rest_framework.routers import DefaultRouter from .views import EventViewSet router DefaultRouter() router.register(revents, EventViewSet) urlpatterns [ path(, include(router.urls)), ]DefaultRouter会自动为EventViewSet生成 RESTful 风格的 URL 集合包括列表端点events/与详情端点events/{id}/省去手写每一条路由的繁琐。接着在项目主urls.py中把 app 的URLConf挂载进来。使用api/前缀可以让 URL 结构更清晰规范改造后的event_finder项目路由如下from django.contrib import admin from django.urls import path, include urlpatterns [ path(admin/, admin.site.urls), path(api/, include(events.urls)), ]运行并测试 API一切就绪后启动开发服务器python manage.py runserver命令会返回一个 localhost 地址在浏览器中打开时追加api/与 app 名称。本示例的访问地址为http://127.0.0.1:8000/api/events/DRF 自带可交互的 Web 浏览界面Browsable API在该页面上可以直接查看响应数据、切换请求方法并执行增删改查操作无需额外安装 Postman 即可完成接口调试。前后端衔接用 refine 消费 DRF APIDRF 构建的 REST API 可以非常自然地与前端框架对接。refine 作为一个用于构建内部工具、管理面板与 B2B 应用的 React 框架其官方提供了面向 REST API 的数据提供器Simple REST实现位于 packages/simple-rest。安装并接入方式如下npm install refinedev/simple-restimport dataProvider from refinedev/simple-rest; const App () { return ( Refine dataProvider{dataProvider(http://127.0.0.1:8000/api)} /* ... */ {/* ... */} /Refine ); };将dataProvider指向 Django 服务的api根地址后refine 内部就会按/{resource}、/{resource}/{id}的约定向 DRF 端点发起请求。查看 provider.ts 可以看到数据提供器的核心方法会直接把resource拼接到apiUrl之后例如getList请求GET /api/eventsgetOne、update、deleteOne请求GET/PUT/DELETE /api/events/{id}——这与本文设计的 RESTful 端点表一一对应。同时getList在服务端分页模式下会附加_start、_end参数排序与过滤则分别通过_sort/_order见 generateSort.ts和_like等查询参数见 mapOperator.ts传递。从源码结构看见 packages/simple-rest/test/getList/index.spec.ts 中的测试用例前端约定使用x-total-count响应头读取数据总数用于分页。若后端希望与此类约定完全对齐可以在 DRF 的settings.py中开启分页并暴露对应的计数响应头或通过django-filter支持_like等过滤查询参数使前后端契约一致。结论无论是小型项目还是需要承载大量复杂功能的大型系统Django 配合 Django REST Framework 都能凭借其丰富的特性让 REST API 的创建、测试与管理变得更加容易。本文通过 Event Finder 示例走通了从虚拟环境搭建、DRF 安装配置到 Model、Serializer、ViewSet、URL 路由的完整 CRUD 后端实现并展示了 refine 的 Simple REST 数据提供器如何与之对接。DRF 的能力远不止于此——认证、权限、限流、过滤、版本控制、测试与文档生成等高级特性都值得进一步深入探索。【免费下载链接】refineA React Framework for building internal tools, admin panels, dashboards B2B apps with unmatched flexibility.项目地址: https://gitcode.com/GitHub_Trending/re/refine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进