记得我刚接触Django的时候,最头疼的就是那没完没了的URL配置。每个视图都要手动写一条URL模式,项目一大,urls.py文件就膨胀得像只吃饱的河豚,既难看又难维护。
直到我发现了Django REST Framework(DRF)中的ViewSets和Routers,简直像打开了新世界的大门!原来URL配置可以这么优雅、这么自动化!今天,就让我带你深入探索这个让无数Django开发者爱不释手的神器。
一、为什么我们需要Routers?
想象一下这个场景:你要开发一个博客系统的API,有文章、分类、标签、用户、评论……每个模型都需要标准的CRUD(增删改查)操作。如果手动编写URL配置,你得为每个视图写至少5条URL模式:
# 传统的URL配置方式
from django.urls import path
from . import views
urlpatterns = [
path('articles/', views.article_list, name='article-list'),
path('articles/<int:pk>/', views.article_detail, name='article-detail'),
path('categories/', views.category_list, name='category-list'),
path('categories/<int:pk>/', views.category_detail, name='category-detail'),
# ... 更多URL配置,想想就头大
]
这还只是冰山一角!随着功能增加,URL配置会越来越复杂。而且每次添加新功能,都要同时修改视图和URL配置,容易出错,维护成本高。
这时候,Routers闪亮登场了!它就像个智能管家,自动帮你把ViewSets映射到合适的URL上,你只需要告诉它:“这些资源交给你管理了”,剩下的它全搞定。
二、ViewSets:Router的完美搭档
在深入了解Router之前,咱们得先聊聊它的好搭档——ViewSets。
ViewSets可以理解为“视图集合”,它把相关的视图逻辑组织在一起。与普通的APIView不同,ViewSet一个类就包含了多个动作(list、create、retrieve、update、partial_update、destroy)。
来看个简单的ViewSet例子:
# models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
# serializers.py
from rest_framework import serializers
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = '__all__'
# views.py
from rest_framework import viewsets
from rest_framework.response import Response
from .models import Article
from .serializers import ArticleSerializer
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
# 还可以添加自定义动作
from rest_framework.decorators import action
from rest_framework.response import Response
@action(detail=False, meth

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



