你是否有过这样的经历:吭哧吭哧写了一大堆视图,感觉代码又臭又长,仿佛一个“API码农”?别急,ViewSets和Routers就是来拯救你的“代码瘦身专家”!但它们真的是万能灵药吗?今天,咱就化身“Django老中医”,给你来个深度号脉,看看这剂“猛药”到底该怎么吃。
第一章:原始时代——没有ViewSets的日子,我们都是“手工耿”
在ViewSets这个“智能家电”出现之前,我们过的是啥日子?那得从最基本的视图讲起。
1.1 函数视图(FBV):最原始的“手工作坊”
想象一下,你要给一个Article模型写一套CRUD API,最开始你可能这么写:
# 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)
# views.py (FBV风格)
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from .models import Article
from .serializers import ArticleSerializer
@api_view(['GET', 'POST'])
def article_list(request):
"""处理文章列表的获取和创建"""
if request.method == 'GET':
articles = Article.objects.all()
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = ArticleSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@api_view(['GET', 'PUT', 'DELETE'])
def article_detail(request, pk):
"""处理单篇文章的获取、更新和删除"""
try:
article = Article.objects.get(pk=pk)
except Article.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
serializer = ArticleSerializer(article)
return Response(serializer.data)
elif request.method == 'PUT':
serializer = ArticleSerializer(article, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif request.method == 'DELETE':
article.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
然后在url

最低0.47元/天 解锁文章
1173

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



