如何利用 Django 进行 API 开发(下)

简介: Django REST Framework 与 Django Web 框架协同工作以创建 Web API。 我们不能仅使用 Django Rest Framework 来构建 Web API 。 在安装和配置 Django 本身之后,必须始终将其添加到项目中。

Django REST 框架

就像其他任何第三方应用程序一样,添加了 Django REST Framework。 如果本地服务器 Control + c 仍在运行,请确保退出它。 然后在命令行上键入以下内容。

(library) $ pipenv install djangorestframework==3.10.3


在我们的 settings.py 文件中,将 rest_framework 添加到 INSTALLED_APPS 配置中。 我喜欢在第三方应用程序和本地应用程序之间做出如下区分,因为在大多数项目中,应用程序的数量迅速增长。


最终,我们的 API 将公开一个端点,该端点列出 JSON 中的所有书籍。 因此,我们将需要一个新的 URL 路由,一个新的视图以及一个新的序列化器文件(稍后将对此进行更多介绍)。


我们可以用多种方法来组织这些文件,但是我的首选方法是创建一个专用的 api 应用程序。 这样,即使将来我们增加更多应用程序,每个应用程序都可以包含专用网页所需的模型,视图,模板和 url,但是整个项目的所有 API 专用文件都将驻留在专用 api 应用程序中。


让我们新建一个 api 应用程序。

(library) $ python manage.py startapp api


然后增加到 INSTALLED_APPS

# library_project/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 3rd party
    'rest_framework',
    # Local Apps
    'books.apps.BooksConfig',
    'api.apps.ApiConfig', # new
]


api 应用程序将没有自己的数据库模型,因此无需像通常那样创建迁移文件和更新数据库。

URLs

从 URL 配置开始。 添加 API 端点就像配置传统 Django 应用的路由一样。 首先,在项目级别,我们需要包括 api 应用程序并配置其 URL 路由,即 api/

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('books.urls')),
    path('api/', include('api.urls')), # new
]


然后在 api 应用程序中创建 urls.py 文件。

(library) $ touch api/urls.py


然后更新这个文件,如下:

# api/urls.py
from django.urls import path
from .views import BookAPIView
urlpatterns = [
    path('', BookAPIView.as_view()),
]

一切准备就绪。

Views

接下来是我们的 views.py 文件,该文件依赖 Django REST Framework 的内置通用类视图。 这些是故意模仿传统 Django 基于类的通用视图的格式,但它们不是一回事。


为避免混淆,某些开发人员将调用 API 视图文件 apiviews.pyapi.py。 就个人而言,在专用的 api 应用程序中工作时,我发现仅调用 Django REST 框架视图文件 views.py 并不会造成混淆,但是在这一点上意见不一。


在我们的 views.py 文件中,将其更新为如下所示:

# api/views.py
from rest_framework import generics
from books.models import Book
from .serializers import BookSerializer
class BookAPIView(generics.ListAPIView):
    queryset = Book.objects.all()
    serializer_class = BookSerializer


在最上面的几行中,我们导入 Django REST Framework 的通用类视图,我们的 Books 应用中的模型以及 api 应用中的序列化器(我们将在下一个序列化器中导入)。


然后,我们创建一个 BookAPIView ,它使用 ListAPIView 为所有书籍实例创建一个只读端点。 有许多通用的视图,我们将在后面的章节中进一步探讨它们。


在我们的视图中,仅需执行两个步骤,即指定所有可用书籍的 queryset ,然后指定将成为 BookSerializer 的 serializer_class

Serializers

序列化器将数据转换为易于在 Internet 上使用的格式(通常为 JSON ),并显示在 API 端点上。 在接下来的章节中,我们还将更深入地介绍序列化器和 JSON 。 现在,我想演示使用 Django REST Framework创建序列化器以将 Django 模型转换为 JSON 是多么容易。


在 api 应用中创建一个 serializers.py 文件:

(library) $ touch api/serializers.py


然后在文本编辑器中更新为如下所示:

# api/serializers.py
from rest_framework import serializers
from books.models import Book
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ('title', 'subtitle', 'author', 'isbn')

首先,我们从 Books 应用程序中导入 Django REST Framework 的序列化器类和 Book 模型。 我们将 Django REST Framework 的 ModelSerializer 扩展到 BookSerializer 类中,该类指定我们的数据库模型 Book 和我们希望公开的数据库字段:标题,副标题,作者和 isbn 。


大概就是这样! 完成了

cURL

我们想看看我们的 API 端点是什么样子。 我们知道它应该在 URL http://127.0.0.1:8000/api/ 返回 JSON 。 确保我们的本地 Django 服务器正在运行:

(library) $ python manage.py runserver

现在打开一个新的第二个命令行控制台。 我们将使用它来访问在现有命令行控制台中运行的 API。


我们可以使用流行的 cURL 程序通过命令行执行 HTTP 请求。 我们需要一个基本的 GET 请求,以指定curl和我们要调用的 URL。

$ curl http://127.0.0.1:8000/api/ 
[
  {
    "title":"Django for Beginners",
    "subtitle":"Build websites with Python and Django",       
    "author":"William S. Vincent", 
    "isbn":"978-198317266"
  } 
]


数据全部以 JSON 格式存在,但格式不正确且难以理解。 幸运的是,Django REST Framework 给我们带来了另一个惊喜:API 端点的强大可视模式。

Browsable API

在本地服务器仍在第一个命令行控制台中运行的情况下,在 Web 浏览器中的 http://127.0.0.1:8000/api/上导航到我们的 API 端点。


网络异常,图片无法展示
|


哇,看看! Django REST Framework 默认情况下提供此可视化。 此页面中内置了许多功能,我们将在整本书中进行探讨。 现在,我希望您将此页面与原始 JSON 端点进行比较。 单击“获取”按钮,然后从下拉菜单中选择“ json”。


网络异常,图片无法展示
|


这就是来自 API 端点的原始 JSON 的样子。 我认为我们可以同意 Django REST Framework 版本更具吸引力。

总结

在本章中,我们讨论了很多内容,因此请不要担心现在是否会感到困惑。 首先,我们创建了一个传统的 Django 图书馆网站。 然后,我们添加了 Django REST Framework ,并能够以最少的代码添加 API 端点。

相关文章
|
2月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
3月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
3月前
|
人工智能 自然语言处理 机器人
使用 API 编程开发扣子应用
扣子(Coze)应用支持通过 API 编程,将 AI 聊天、内容生成、工作流自动化等功能集成至自有系统。主要 API 包括 Bot API(用于消息交互与会话管理)及插件与知识库 API(扩展功能与数据管理)。开发流程包括创建应用、获取密钥、调用 API 并处理响应,支持 Python 等语言。建议加强错误处理、密钥安全与会话管理,提升集成灵活性与应用扩展性。
1039 0
|
5月前
|
数据采集 测试技术 API
小白必看!电商 API 开发避坑指南:签名错误、权限申请全解决
本文总结电商API开发常见问题与解决方案,涵盖京东、淘宝、拼多多的签名规则、权限申请、频率限制等核心踩坑点,结合实战案例,助你高效避坑,提升开发效率90%。
|
5月前
|
存储 监控 API
零基础 3 天搞定京东 / 淘宝 API 开发,从注册到调通接口全流程拆解
本文详解京东/淘宝API开发入门,涵盖账号注册、应用创建、签名生成及实战项目,助零基础开发者3天掌握电商API调用,实现商品数据获取与价格监控。
|
5月前
|
人工智能 自然语言处理 测试技术
Apipost 与 Apifox 深度对比:谁是 API 开发的最佳拍档?
在 API 开发中,Apipost 与 Apifox 是两款流行的国产工具。本文通过实际项目的对比发现,Apipost 在 AI 功能方面表现突出,如 AI 自动生成文档、测试用例、脚本等,显著提升开发效率。基础功能上,Apipost 也更全面,支持离线使用、OpenAPI 格式导出、多种协议及数据库字典导入,界面简洁易用,综合性能优于 Apifox。
260 5
|
4月前
|
前端开发 Java API
利用 Spring WebFlux 技术打造高效非阻塞 API 的完整开发方案与实践技巧
本文介绍了如何使用Spring WebFlux构建高效、可扩展的非阻塞API,涵盖响应式编程核心概念、技术方案设计及具体实现示例,适用于高并发场景下的API开发。
375 0
|
4月前
|
存储 监控 算法
淘宝买家秀 API开发实录Python(2025)
本文讲述了作者在电商开发领域,尤其是对接淘宝买家秀 API 接口过程中所经历的挑战与收获。从申请接入、签名验证、频率限制到数据处理和实时监控,作者分享了多个实战经验与代码示例,帮助开发者更高效地获取和处理买家秀数据,提升开发效率。
|
2月前
|
API 开发者 数据采集
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
2025反向海淘新机遇:依托代购系统,聚焦小众垂直品类,结合Pandabay数据选品,降本增效。系统实现智能翻译、支付风控、物流优化,助力中式养生茶等品类利润翻倍,新手也能快速入局全球市场。
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
|
5月前
|
数据采集 缓存 监控
唯品会 API 开发痛点解析:从权限申请到数据清洗的实战经验
本文深入解析唯品会开放平台(VOP)API开发全流程,涵盖权限申请、签名机制、数据清洗、性能优化等核心挑战与实战解决方案,助力开发者高效构建稳定可靠的电商数据整合系统。