Django基础教程(133)Django ViewSets和Routers之Django系统运维:别让你的Django代码在搬砖!ViewSets & Routers让运维效率翻倍的魔法手册

Django ViewSets与Routers高效实践

一、 从前我们写视图像在搬砖

记得我刚接触Django时,写视图函数写到怀疑人生。每个功能都要写对应的视图,增删改查四个操作就得写四个视图,配置URL时还要绞尽脑汁想命名,代码重复得让人想哭。

特别是做运维监控系统的时候,各种资源需要API:服务器列表、监控指标、告警记录……每个模型都得来一套CRUD。那段时间,我感觉自己就是个代码搬运工,整天在复制粘贴。

直到我遇到了ViewSets和Routers,才发现原来Django可以这么优雅!ViewSets就像是把相关的视图打包成一个“全家桶”,而Router则是个聪明的快递员,自动帮你把请求送到对应的处理函数。

举个栗子,传统方式写个服务器列表的API,你得这样:

# 以前的笨办法
from django.http import JsonResponse
from .models import Server

def server_list(request):
    servers = Server.objects.all()
    data = [{'name': s.name, 'ip': s.ip} for s in servers]
    return JsonResponse(data, safe=False)

def server_detail(request, pk):
    server = Server.objects.get(pk=pk)
    data = {'name': server.name, 'ip': server.ip}
    return JsonResponse(data)

然后还要在urls.py里配置两个URL路径……就为了一个简单的列表和详情查询!

二、 ViewSets:把视图打包成“全家桶”

2.1 什么是ViewSets?

简单说,ViewSets就是把多个视图的逻辑集合到一个类里面。想象一下,你去快餐店点套餐,不用单独点汉堡、薯条、可乐,直接说“要个一号套餐”就行了。ViewSets就是Django里的“套餐”。

2.2 两种ViewSets,总有一款适合你

ModelViewSet - 懒人终极武器

如果你要做完整的CRUD(增删改查),用这个就对了:

from rest_framework import viewsets
from .models import Server
from .serializers import ServerSerializer

class ServerViewSet(viewsets.ModelViewSet):
    queryset = Server.objects.all()
    serializer_class = ServerSerializer

就这?对,就这4行代码!它自动给你提供了list(列表)、create(创建)、retrieve(详情)、update(更新)、partial_update(部分更新)、destroy(删除)六个操作。

ReadOnlyModelViewSet - 只读的乖宝宝

运维场景下,很多数据我们只需要读,不需要修改:

class MonitorDataViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = MonitorData.objects.all()
    serializer_class = MonitorDataSerializer

这个只提供list和retrieve操作,适合展示监控数据、日志记录等只读场景。

三、 Routers:自动导航的智能快递员

3.1 为什么需要Router?

有了ViewSets这个“全家桶”,还得有个聪明的“服务员”把客户的请求准确送到对应操作。Router就是这个服务员。

传统配置URL的方式:

# 以前的繁琐方式
urlpatterns = [
    path('servers/', server_list, name='server-list'),
    path
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值