Django API 开发:视图设置和路由(上)

简介: 在本章中,我们将向现有项目中添加两个新的 API 端点,并了解如何从视图和 URL 切换到视图集和路由器可以用更少的代码实现相同的功能。

前言

视图集路由器是 Django REST Framework 中的工具,可以加速 API 开发。 它们是视图和 URL 之上的附加抽象层。 主要好处是单个视图集可以替换多个相关视图。 路由器可以自动为开发人员生成 URL。 在具有许多端点的大型项目中,这意味着开发人员必须编写更少的代码。 可以说,与一长串的单个视图和 URL 相比,对于经验丰富的开发人员而言,与少量视图集和路由器组合相比,它更易于理解和推理。


在本章中,我们将向现有项目中添加两个新的 API 端点,并了解如何从视图和 URL 切换到视图集和路由器可以用更少的代码实现相同的功能。

用户终端

当前,我们的项目中具有以下 API 端点。 它们都以 api/v1/ 开头,为简洁起见,未显示它们:


image.png


前两个端点是我们创建的,而 django-rest-auth 提供了另外五个端点。 现在让我们添加两个其他端点,以列出所有用户和单个用户。 这是许多 API 中的常见功能,它将使我们更清楚地理解为什么将我们的视图和 URL 重构为视图集和路由器是有意义的。


传统 Django 具有内置的 User 模型类,我们已经在上一篇文章中使用了该类进行身份验证。 因此,我们不需要创建新的数据库模型。 相反,我们只需要连接新的端点即可。 此过程始终涉及以下三个步骤:


  • 新增模型序列化器
  • 新增每个端点视图
  • 新增每个端点的 URL 路由


从我们的序列化器开始。 我们需要导入 User 模型,然后创建一个使用它的 UserSerializer 类。 然后将其添加到我们现有的 posts/serializers.py文件中。

# posts/serializers.py
from django.contrib.auth import get_user_model # new 
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
    class Meta: 
        model = Post
        fields = ('id', 'author', 'title', 'body', 'created_at',)
class UserSerializer(serializers.ModelSerializer): # new
    class Meta:
        model = get_user_model() 
        fields = ('id', 'username',)


值得注意的是,虽然我们在这里使用 get_user_model 来引用 User 模型,但实际上在 Django 中有3种不同的方式来引用 User 模型。


通过使用 get_user_model ,我们确保我们引用的是正确的用户模型,无论是默认用户模型还是新 Django 项目中经常定义的自定义用户模型


接下来,我们需要为每个端点定义视图。 首先将 UserSerializer 添加到导入列表中。 然后创建列出所有用户的 UserList 类和提供单个用户详细视图的 UserDetail 类。 就像我们的帖子视图一样,我们可以在此处使用 ListCreateAPIView 和 RetrieveUpdateDestroyAPIView。


对于每个端点,我们只需要只读或 GET 功能。 这意味着我们可以使用 ListAPIView 和 RetrieveUpdateDestroyAPIView 。 我们还需要通过 get_user_model 引用用户模型,以便将其导入第一行。

# posts/views.py
from django.contrib.auth import get_user_model # new 
from rest_framework import generics
from .models import Post
from .permissions import IsAuthorOrReadOnly
from .serializers import PostSerializer, UserSerializer # new
class PostList(generics.ListCreateAPIView): 
0    queryset = Post.objects.all() 
    serializer_class = PostSerializer
class PostDetail(generics.RetrieveUpdateDestroyAPIView): 
    permission_classes = (IsAuthorOrReadOnly,)
    queryset = Post.objects.all()
    serializer_class = PostSerializer
class UserList(generics.ListCreateAPIView): # new 
    queryset = get_user_model().objects.all() 
    serializer_class = UserSerializer
class UserDetail(generics.RetrieveUpdateDestroyAPIView): # new 
    queryset = get_user_model().objects.all() 
    serializer_class = UserSerializer


如果您注意到,这里有很多重复。 Post 视图和 User 视图都具有完全相同的 queryset 和 serializer_class。

最后,我们有了 URL 路由。 确保导入新的 UserList 和 UserDetail 视图。 然后,我们可以为每个用户使用前缀 users/

# posts/urls.py
from django.urls import path
from .views import UserList, UserDetail, PostList, PostDetail # new
urlpatterns = [
    path('users/', UserList.as_view()), # new 
    path('users/<int:pk>/', UserDetail.as_view()), # new 
    path('', PostList.as_view()),
    path('<int:pk>/', PostDetail.as_view()),
]


我们完成了。 确保本地服务器仍在运行,并跳至可浏览的 API 以确认一切正常。


我们的用户列表端点位于 http://127.0.0.1:8000/api/v1/users/


image.png


状态代码为 200 OK ,表示一切正常。 我们可以看到三个现有用户。


每个用户的主键上都有一个用户详细信息终结点。 因此,我们的超级用户帐户位于:http://127.0.0.1:8000/api/v1/users/1/


image.png

相关文章
|
22小时前
|
API 数据安全/隐私保护 UED
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
在掌握了鸿蒙系统的开发基础后,我挑战了蓝牙功能的开发。通过Bluetooth A2DP和Access API,实现了蓝牙音频流传输、设备连接和权限管理。具体步骤包括:理解API作用、配置环境与权限、扫描并连接设备、实现音频流控制及动态切换设备。最终,我构建了一个简单的蓝牙音频播放器,具备设备扫描、连接、音频播放与停止、切换输出设备等功能。这次开发让我对蓝牙技术有了更深的理解,也为未来的复杂项目打下了坚实的基础。
77 58
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
|
7天前
|
监控 供应链 搜索推荐
阿里妈妈商品详情API接口:开发、应用与收益的深度剖析
阿里妈妈是阿里巴巴旗下的数字营销平台,其商品详情API接口为开发者提供了获取淘宝、天猫等电商平台商品详细信息的工具。本文介绍了该接口的开发流程、应用场景及带来的收益,揭示了其在电商生态中的重要地位。
54 6
|
7天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
43 6
|
9天前
|
监控 搜索推荐 API
京东商品详情API接口的开发、应用与收益探索
在数字化和互联网高速发展的时代,京东通过开放商品详情API接口,为开发者、企业和商家提供了丰富的数据源和创新空间。本文将探讨该API接口的开发背景、流程、应用场景及带来的多重收益,包括促进生态系统建设、提升数据利用效率和推动数字化转型等。
32 3
|
14天前
|
供应链 搜索推荐 API
探索1688榜单商品详细信息API接口:开发、应用与收益
本文深入探讨了1688榜单商品详细信息API接口的开发与应用,涵盖接口概述、开发条件、调用方法及数据处理等内容。该API帮助企业高效获取1688平台商品信息,应用于商品信息采集、校验、同步与数据分析等领域,有效提升了企业的运营效率、库存管理、销售转化率及市场策略制定能力,降低了采购成本,提升了客户满意度。
37 9
|
17天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
52 10
|
17天前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
68 5
|
16天前
|
数据可视化 搜索推荐 API
速卖通获得aliexpress商品详情API接口的开发、应用与收益。
速卖通(AliExpress)作为阿里巴巴旗下的跨境电商平台,为全球消费者提供丰富商品。其开放平台提供的API接口支持开发者获取商品详情等信息,本文探讨了速卖通商品详情API的开发流程、应用场景及潜在收益,包括提高运营效率、降低成本、增加收入和提升竞争力等方面。
35 1
|
3天前
|
存储 搜索推荐 API
小红书笔记详情API接口的开发、应用与收益
小红书笔记详情API接口为开发者、企业和内容创作者提供了获取平台丰富资源的通道。通过该接口,用户可以提取笔记的详细信息(如标题、正文、标签等),并应用于市场调研、竞品分析、内容创作、电商推荐等多个领域。这不仅有助于提升品牌影响力和优化用户体验,还能挖掘商业机会,促进内容创新,增强用户互动与社群凝聚力。总之,小红书笔记详情API接口为企业和个人在社交媒体领域探索新增长点提供了重要工具。
21 0
|
1月前
|
JSON API 数据格式
探索后端开发:从零构建简易RESTful API
在数字时代的浪潮中,后端开发如同搭建一座桥梁,连接着用户界面与数据世界。本文将引导读者步入后端开发的殿堂,通过构建一个简易的RESTful API,揭示其背后的逻辑与魅力。我们将从基础概念出发,逐步深入到实际操作,不仅分享代码示例,更探讨如何思考和解决问题,让每一位读者都能在后端开发的道路上迈出坚实的一步。