嘿,伙计们!今天咱们来聊一个能让你Django API性能和人品都瞬间飙升的话题——分页。
想象一下这个场景:你心血来潮,用Django REST Framework (后面咱就亲切地叫它DRF) 撸了一个博客文章的API。一开始只有十来篇文章,前端小哥调用得美滋滋。但随着你的勤奋耕耘,文章数量突破了1000篇大关…… 这时,前端小哥的脸绿了,浏览器卡死了,用户跑光了。
为什么?因为你一次性把1000篇文章,连带它们的评论、作者信息,像倒垃圾一样“哗啦”全扔给了前端。这哪是API啊,这简直是数据界的“瀑布流”灾难现场!
所以,分页,它不是一种选择,而是一种美德。就像你去自助餐,肯定不会把整个餐台搬回座位,而是一盘一盘地取用。分页,就是让你的API学会“吃自助餐”的优雅礼仪。
一、温故知新:关系和超链接API是啥?
在给我们的API“增肌”(加分页)之前,得先确保它的“骨架”(基础结构)是好的。我们之前学过,DRF有两种让API关系更清晰的方式:
- 关系(Relations): 比如用
PrimaryKeyRelatedField,StringRelatedField,或者我们今天的主角——HyperlinkedRelatedField。它主要用于反向关系,比如通过一个作者,找到他写的所有文章。 - 超链接API(Hyperlinked APIs): 这是更RESTful的做法。它不在响应体里直接嵌入关联对象的数据或ID,而是给你一个URL链接。就像给你一个地图坐标,而不是把整个房子背在身上。这让API更加自描述,客户端只需要跟着链接走就行了。
我们来快速搭建一个今天要用的示例模型:
# models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
email = models.CharField(max_length=100)
bio = models.TextField()
def __str__(self):
return self.name
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)
author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='articles')
def __str__(self):
return self.title
然后,是我们的关系和超链接API的序列化器与视图:
# serializers.py
from rest_framework import serializers
from .models import Article, Author
class AuthorSerializer(serializers.HyperlinkedModelSerializer):
# 看这里!这是“关系”的体现。它链接到

最低0.47元/天 解锁文章
698

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



