Django基础教程(131)Django ViewSets和Routers之使用 Routers 自动化URL配置:别再用土法子配URL了!Django Router让你效率翻倍,准时下班不是梦

记得我刚接触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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

值引力

持续创作,多谢支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值