当前位置: 首页 > news >正文

DRF:Django REST Framework框架介绍

“在前后端彻底分离的时代,不掌握DRF,就等于错过了Django的下半场。
——这句话,适合贴在每个Python开发者的显示器边框。


一、为什么要学DRF?——API经济的入场券

维度传统DjangoDRF
协议HTMLJSON/XML/YAML
客户端浏览器任意(Web、iOS、Android、IoT)
并发模型同步渲染异步解耦
团队协同前后端串行并行开发,效率×3

一句话总结:
DRF把“Django”变成了“Django as a Service”。


二、5张图,吃透DRF核心组件

1. 一张“地铁图”看透请求生命周期

站点对应DRF组件开发提示
入口安检APIView/@api_view权限、限流、版本号统一入口
序列化闸机Serializer/ModelSerializer数据清洗、字段校验、反序列化一键完成
数据库月台GenericViewSet + queryset一行代码搞定CRUD
出站检票Response + RendererJSON、CSV、YAML可插拔切换

2. 序列化:比ORM更强大的“翻译官”

# models.py
class Employee(models.Model):name = models.CharField(max_length=50)join_date = models.DateField()salary = models.DecimalField(max_digits=12, decimal_places=2)# serializers.py
class EmployeeSerializer(serializers.ModelSerializer):# 只读字段:工龄years_of_service = serializers.SerializerMethodField()# 写字段:一次性调薪百分比raise_percent = serializers.FloatField(write_only=True, default=0)class Meta:model = Employeefields = ["id", "name", "join_date", "salary", "years_of_service", "raise_percent"]def get_years_of_service(self, obj):return (date.today() - obj.join_date).days // 365def update(self, instance, validated_data):percent = validated_data.pop("raise_percent", 0)instance.salary *= (1 + percent / 100)return super().update(instance, validated_data)

把“数据库行”翻译成“前端JSON”,还能顺手做业务计算,这就是序列化的威力。


3. 视图“三阶进化”:从10行到1行代码

阶段写法代码量适用场景
① 原生APIView手写get/post/delete30+高度定制逻辑
② GenericAPIView+mixinsListModelMixin, CreateModelMixin…10标准CRUD
③ ViewSet + Router自动生成路由180%业务场景
# urls.py
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r"employees", EmployeeViewSet)urlpatterns = [path("api/", include(router.urls)),  # 一次性注册CRUD+分页+过滤
]

ViewSet= 让代码瘦成一道闪电⚡️


4. 权限与限流:给企业API上“双重锁”

# permissions.py
class IsOwnerOrReadOnly(permissions.BasePermission):def has_object_permission(self, request, view, obj):if request.method in permissions.SAFE_METHODS:return Truereturn obj.owner == request.user# settings.py
REST_FRAMEWORK = {"DEFAULT_THROTTLE_CLASSES": ["rest_framework.throttling.AnonRateThrottle","rest_framework.throttling.UserRateThrottle",],"DEFAULT_THROTTLE_RATES": {"anon": "100/day","user": "1000/day",},
}

权限颗粒度到“数据行”,限流动态可配,DRF让ToB交付更安心。


5. 文档即代码:Swagger-UI零成本生成

安装:

pip install drf-spectacular

一行配置:

REST_FRAMEWORK = {"DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema",
}

访问 http://localhost:8000/api/schema/swagger/

从此写代码=写文档,产品经理再也不会说“接口文档又双叒叕滞后了”。


三、实战:用DRF 15分钟上线一个“可搜索+分页+权限”的员工API

步骤命令/代码耗时
1. 创建项目 & 安装依赖django-admin startproject hr_system && pip install djangorestframework django-filter2’
2. 建模 & 初始化数据python manage.py loaddata mock_emps.json3’
3. 序列化 & 视图 & 路由见上文代码块5’
4. 配置过滤&搜索&分页见下方代码3’
5. 运行 & Swagger验证python manage.py runserver2’
# views.py
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filtersclass EmployeeViewSet(viewsets.ModelViewSet):queryset = Employee.objects.all()serializer_class = EmployeeSerializerpermission_classes = [IsAuthenticated, IsOwnerOrReadOnly]filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]filterset_fields = ["department", "level"]search_fields = ["name", "email"]ordering_fields = ["salary", "join_date"]pagination_class = PageNumberPagination  # 默认20条/页

15分钟,你得到的是一个生产级、带文档、可搜索、可分页、带权限的REST API
如果手写Flask或Spring,同等功能至少需要2小时起步。


四、避坑指南:DRF新手最常踩的5个坑

  1. 把序列化当ORM用
    Serializer.save()里写复杂业务 → 应放到ModelViewSet.perform_create()或service层。

  2. 滥用APIView
    能用ModelViewSet就别手写get/post,否则一夜回到“自由泳”。

  3. 忽略select_related/prefetch_related
    循环嵌套序列化外键,N+1查询直接拖垮数据库。

  4. 把权限写在每个视图
    全局DEFAULT_PERMISSION_CLASSES+局部覆盖,才是DRF推荐姿势。

  5. 部署不关Debug
    生产环境忘记设置DEBUG=False,Swagger泄露全部字段结构,安全漏洞原地爆炸


五、写在最后

“框架每年一换,但对API设计思想的理解会让你在未来10年持续受益。”
掌握DRF,不只是多学了一个库,而是真正迈入前后端分离、微服务、API经济的大门

http://www.dtcms.com/a/500026.html

相关文章:

  • 不备案 网站 盈利合肥做个网站多少钱
  • 做网站只用php不用html扬中网站建设哪家好
  • Linux内核idr数据结构使用
  • 3.3栈与队列的应用
  • 黑龙江网站开发公司宁波网站建设制作的公司
  • 《CopyOnWriteArrayList / CopyOnWriteArraySet 源码与“大对象复制”事故实录》
  • 做网站的品牌公司有哪些安康市110报警平台
  • 三水住房和城乡建设局的网站一键生成logo免费图
  • 自用EUBIU
  • 省住房城乡建设厅网站保险查询平台
  • 智能PDU在数据中心场景中的应用与解决方案
  • 网站登录界面图片用什么软件做深圳关键词优化报价
  • 中信建设证券官方网站佛山网页设计怎么做
  • Tomcat 类加载器隔离机制的实际应用
  • 咨询网站 模板国泰君安官方网站建设集团
  • Go基础知识(一)
  • 网站开发c外贸企业邮箱哪个好用
  • 鸿蒙Next振动开发指南:打造沉浸式触觉反馈体验
  • 网站美工外包公司改号宝网站搭建
  • h5游戏免费下载:滑雪大挑战
  • 高端制作网站哪家专业湖北建设工程注册中心网站
  • 包管理 pip ,conda;pycharm中使用conda 创建的虚拟环境
  • wordpress 域名使用网站内容优化细节
  • K8s Ingress 详解与部署实战
  • 一般网站开发的硬件要求使用flash做网站
  • 制作网站开发wordpress彻底禁用google
  • tauri + rust的环境搭建---初始化以及构建
  • 哪个网站可以做制图兼职嘉兴企业网站制作
  • 3.2队列
  • Particles Color and Depth Textures