Django API 开发:一个 Todo 应用的后端(中)

简介: 在接下来的两章中,我们将构建一个 Todo API 后端,然后将其与 React 前端连接。 我们已经制作了第一个 API,并回顾了 HTTP 和 REST 的抽象工作原理,但是您仍然可能还没有“完全”了解它们如何结合在一起。 在这两章的最后,您将学到。

Dajngo REST 框架

停止本地服务器 Control + c,然后通过 pipenv 安装 Django REST Framework。

(backend) $ pipenv install djangorestframework==3.10.3

然后像其他任何第三方应用程序一样,将 rest_framework 添加到我们的 INSTALLED_APPS 设置中。 我们还希望开始配置所有 REST_FRAMEWORK 下存在的 Django REST Framework 特定设置。 首先,我们将权限明确设置为 AllowAny。 此行位于文件的底部。

# todo_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',  # new
    # Local
    'todos.apps.TodosConfig', 
]
# new
REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny', 
    ]
}


Django REST Framework 包含冗长的隐式设置默认设置列表。 您可以在此处查看完整列表。 AllowAny 是其中之一,这意味着当我们像上面所做的那样显式设置它时,其效果与没有设置 DEFAULT_PERMISSION_CLASSES 的配置完全相同。


学习默认设置需要花费一些时间。 在本书学习过程中,我们将对其中的一些熟悉。 要记住的主要内容是,隐式默认设置的设计旨在使开发人员可以进入并开始在本地开发环境中快速工作。 但是,默认设置不适用于生产。 因此,通常我们会在项目过程中对它们进行一些更改。


好的,这样就安装了 Django REST Framework。 接下来是什么?与上一章中我们同时构建网页和 API 的 Library 项目不同,在这里我们仅构建 API。 因此,我们不需要创建任何模板文件或传统的 Django 视图。


相反,我们将更新三个特定于 Django REST 框架的文件,以将数据库模型转换为 Web API:urls.py,views.py 和 serializers.py。

URLs

我喜欢先从 URL 开始,因为它们是我们 API 端点的入口点。 就像在传统的 Django 项目中一样,urls.py 文件使我们可以配置路由。


从 Django 项目级文件 todo_project / urls.py 开始。 我们在第二行导入 include,并在 api /为我们的 todos 应用添加一条路线。

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


接下来,创建我们的应用程序级别的 todos / urls.py 文件。

(backend) $ touch todos/urls.py


并使用以下代码对其进行更新。

# todos/urls.py
from django.urls import path
from .views import ListTodo, DetailTodo
urlpatterns = [
    path('<int:pk>/', DetailTodo.as_view()), 
    path('', ListTodo.as_view()),
]


请注意,我们引用的还有两个尚未创建的视图:ListTodo 和 DetailTodo。 但是,路由现已完成。 api/有所有待办事项的列表位于空字符串 '',即。 每个待办事项都将在其主键上可用,这是 Django 在每个数据库表中自动设置的值。 第一个条目是 1,第二个条目是 2,依此类推。 因此,我们的第一个待办事项最终将位于 API 端点api/1/

Serializers

让我们回顾一下到目前为止。 我们从一个传统的 Django 项目和应用程序开始,我们创建了数据库模型并添加了数据。 然后,我们安装了 Django REST Framework 并配置了 URL。 现在,我们需要将模型中的数据转换为将在 URL 输出的 JSON。 因此,我们需要一个序列化器。


Django REST Framework 附带了一个强大的内置序列化程序类,我们可以使用少量代码快速扩展它们。 这就是我们在这里要做的。


首先在 todos 应用中创建一个新的 serializers.py 文件。

(backend) $ touch todos/serializers.py

然后更新代码,如下所示:

# todos/serializers.py
from rest_framework import serializers 
from .models import Todo
class TodoSerializer(serializers.ModelSerializer): 
    class Meta:
        model = Todo
        fields = ('id', 'title', 'body',)


在顶部,我们从 Django REST Framework 以及我们的 models.py 文件导入了序列化器。 接下来,我们创建一个类 TodoSerializer。 这里的格式与我们在 Django 本身中创建模型类或表单的方式非常相似。 我们正在指定要使用的模型以及我们要公开的特定字段。 请记住,id 是 Django 自动创建的,因此我们不必在 Todo 模型中定义它,但是我们将在细节视图中使用它。


就是这样。 Django REST Framework 现在将神奇地将我们的数据转换为 JSON,从而公开来自 Todo 模型的 id,title 和 body 字段。


我们需要做的最后一件事是配置我们的 views.py 文件。

Views

在传统的 Django 中,视图用于自定义要发送到模板的数据。 在 Django REST Framework 中,视图执行相同的操作,但对序列化的数据而言。


Django REST Framework 视图的语法故意与常规 Django 视图非常相似,就像常规 Django 一样,Django REST Framework 随附了通用视图以用于常见用例。 这就是我们在这里使用的。


更新 todos / views.py 文件,如下所示:

# todos/views.py
from rest_framework import generics
from .models import Todo
from .serializers import TodoSerializer
class ListTodo(generics.ListAPIView): 
    queryset = Todo.objects.all() 
    serializer_class = TodoSerializer
class DetailTodo(generics.RetrieveAPIView): 
    queryset = Todo.objects.all() 
    serializer_class = TodoSerializer


在顶部,我们导入 Django REST Framework 的泛型视图以及我们的 models.py 和 serializers.py 文件。


从我们的 todos / urls.py 文件中调用,我们有两条路线,因此有两个不同的视图。 我们将使用 ListAPIView 显示所有待办事项,并使用 RetrieveAPIView 显示单个模型实例。


精明的读者会注意到这里的代码有些冗余。 即使扩展的通用视图有所不同,我们实质上还是为每个视图重复使用 queryset 和 serializer_class。 在本书的后面,我们将学习有关解决此问题的视图集和路由器,并允许我们使用更少的代码来创建相同的 API 视图和 URL。


但是现在我们完成了! 我们的 API 已准备就绪,可以使用。 如您所见,Django REST Framework 和 Django 之间的唯一真正区别是,使用 Django REST Framework,我们需要添加 serializers.py 文件,而无需模板文件。 否则,urls.py 和 views.py 文件的行为类似。

相关文章
|
1天前
|
设计模式 Kubernetes 数据库
构建高效可靠的微服务架构:后端开发的新范式
【5月更文挑战第7天】在现代软件开发的浪潮中,微服务架构已经成为一种流行的设计模式。它通过将应用程序分解为一组小的、独立的服务来提高系统的可维护性和扩展性。本文深入探讨了微服务架构的核心概念、优势以及如何利用最新的后端技术构建一个高效且可靠的微服务体系。我们将讨论关键的设计原则,包括服务的独立性、通信机制、数据一致性和容错性,并展示如何在云环境中部署和管理这些服务。
15 3
|
2天前
|
机器学习/深度学习 存储 人工智能
未来趋势:后端开发的新纪元
随着科技的不断进步,后端开发领域也在不断演进。本文将探讨未来后端开发的新趋势,包括分布式系统、云原生技术、微服务架构以及人工智能在后端开发中的应用。通过深入分析这些趋势,我们可以更好地了解未来后端开发的发展方向,为技术人员提供指导和启示。
14 2
|
2天前
|
缓存 监控 数据库
构建高性能微服务架构:后端开发的终极指南
【5月更文挑战第6天】 在现代软件开发的浪潮中,微服务架构以其灵活性、可扩展性和容错性引领着技术潮流。本文深入探索了构建高性能微服务架构的关键要素,从服务划分原则到通信机制,再到持续集成和部署策略。我们将透过实战案例,揭示如何优化数据库设计、缓存策略及服务监控,以确保系统的稳定性和高效运行。文中不仅分享了最佳实践,还讨论了常见的陷阱与解决之道,为后端开发者提供了一条清晰、可行的技术路径。
|
3天前
|
监控 负载均衡 持续交付
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第5天】在数字化转型的浪潮中,微服务架构以其灵活性、可扩展性和容错性成为企业追求的技术典范。本文深入探讨了微服务的核心组件、设计原则和实施策略,旨在为后端开发者提供构建和维护高效微服务系统的实用指南。通过分析微服务的最佳实践和常见陷阱,我们揭示了如何优化系统性能、保证服务的高可用性以及如何处理分布式系统中的复杂性。
|
3天前
|
负载均衡 Java 数据库
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第5天】在现代软件开发中,微服务架构已经成为一种流行的设计模式。它通过将大型应用程序分解为一组小型、松散耦合的服务来提高可维护性、可扩展性和敏捷性。本文将探讨如何构建高效的微服务架构,包括选择合适的技术栈、设计良好的服务接口、确保数据一致性以及实现高可用性和负载均衡。
|
5天前
|
JavaScript Java 持续交付
构建高效微服务架构:后端开发的新范式
【5月更文挑战第3天】 在现代软件开发的浪潮中,微服务架构以其灵活性、可扩展性和技术多样性而受到重视。本文深入探讨了如何构建一个高效的微服务系统,包括关键的设计原则、技术选型、以及实现细节。我们将通过分析微服务的核心概念,提供一套实用的步骤和最佳实践,以指导开发者构建出既健壮又易于维护的分布式系统。文章将重点讨论如何在保证系统性能和稳定性的前提下,实现服务的解耦与独立部署,从而推动后端开发工作流的优化和创新。
|
6天前
|
Kubernetes API 开发者
构建高效微服务架构:后端开发的新范式
【5月更文挑战第2天】 随着现代软件开发的演进,传统的单体应用已难以满足快速变化的业务需求和敏捷开发的挑战。本文探讨了如何通过构建高效的微服务架构来提升后端开发的灵活性、可维护性和扩展性。我们将深入分析微服务的核心组件,包括服务拆分、容器化、API网关和持续集成/持续部署(CI/CD)等关键技术,并讨论它们如何共同作用以支持复杂的业务场景和云原生应用的需求。
18 1
|
8天前
|
监控 安全 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第30天】随着现代软件开发的复杂性日益增加,传统的单体应用架构已难以满足快速迭代与灵活部署的需求。微服务架构作为一种新兴的设计理念,它通过将一个大型应用程序拆分成一系列小而专注的服务来提供解决方案。本文旨在探讨如何构建一个高效且可靠的微服务架构系统,涵盖从设计原则、技术选型到部署实践的全方位知识,为后端开发者提供一种全新的开发思路和实践指导。
|
8天前
|
Java 调度 开发者
构建高效微服务架构:后端开发的新趋势深入理解操作系统之进程调度策略
【4月更文挑战第30天】 随着企业数字化转型的不断深入,传统的单体应用逐渐不能满足快速迭代和灵活部署的需求。微服务架构以其高度模块化、独立部署和易于扩展的特性,成为现代后端开发的重要趋势。本文将探讨如何构建一个高效的微服务架构,包括关键的设计原则、技术选型以及可能面临的挑战。
|
8天前
|
Cloud Native Devops 持续交付
构建未来:云原生架构在企业数字化转型中的关键作用构建高效微服务架构:后端开发的新范式
【4月更文挑战第30天】 随着企业加速其数字化进程,云原生架构已成为支撑复杂、可伸缩和灵活应用的骨干。本文探讨了云原生技术的崛起,重点分析了其在促进业务敏捷性、提高运营效率及推动创新方面的核心价值。通过深入剖析云原生生态系统的关键技术组件,如容器化、微服务、持续集成/持续部署(CI/CD)和DevOps实践,揭示了企业如何利用这些技术来构建和维护高度可用且动态的IT环境。文章还提出了一个多维度的采纳框架,帮助企业评估和实施云原生解决方案,以实现真正的业务价值。 【4月更文挑战第30天】在现代软件开发的快速演变中,微服务架构已经成为一种领先的设计模式,用于构建可扩展、灵活且容错的应用程序。与传