什么程序做网站收录好,wordpress 悬浮公告,衡水网站联系电话,手表商城网站建设原生Django实现学生管理API需要200行代码#xff0c;而DRF仅需20行#xff01;揭秘如何用序列化器提升10倍开发效率。
目录
一、Web应用模式演进
1.1 前后端不分离
1.2 前后端分离
二、API接口规范之争
2.1 RPC#xff08;远程过程调用#xff09;
2.2 RESTful… 原生Django实现学生管理API需要200行代码而DRF仅需20行揭秘如何用序列化器提升10倍开发效率。
目录
一、Web应用模式演进
1.1 前后端不分离
1.2 前后端分离
二、API接口规范之争
2.1 RPC远程过程调用
2.2 RESTful表征状态转移
核心原则
幂等性保证
三、DRF核心序列化器
3.1 序列化器的作用
序列化模型对象 → Python字典 → JSON
反序列化JSON → Python字典 → 模型对象
3.2 定义序列化器
3.3 常用字段类型速查
四、DRF环境配置实战
4.1 安装与配置
4.2 项目配置
4.3 模型定义
五、DRF极简开发模式
5.1 模型序列化器
5.2 视图集配置
5.3 路由配置
5.4 接口测试效果
六、高级序列化技巧
6.1 自定义验证
6.2 重写创建/更新
6.3 只读/只写字段
七、DRF核心优势总结 一、Web应用模式演进 1.1 前后端不分离 服务端主导后端直接生成HTML/CSS/JS 工作流程
graph LR
A[浏览器请求] -- B[应用服务器]
B -- C[数据库查询]
C -- D[模板渲染]
D -- E[返回HTML]
1.2 前后端分离 核心解耦 前端独立静态资源服务HTML/CSS/JS 后端纯数据接口JSON/XML 数据交互流程
graph LR
浏览器 -- |请求HTML| 静态服务器
浏览器 -- |请求数据| 应用服务器
应用服务器 -- 数据库
静态服务器 -- |返回文件| 浏览器
应用服务器 -- |返回JSON| 浏览器
二、API接口规范之争
2.1 RPC远程过程调用 特点 单一入口http://api.xxx.com/ POST请求为主 参数指定动作actionget_studentsclass301 数据格式Protobuf/JSON/XML 痛点 接口命名混乱 函数参数膨胀 历史接口重复
2.2 RESTful表征状态转移 核心原则 资源即名词/students/、/avatars/ HTTP动词定义操作 HTTP方法端点动作POST/students/创建学生GET/students/获取所有学生GET/students/pk/获取单个学生PUT/students/pk/全量更新PATCH/students/pk/部分更新DELETE/students/pk/删除学生 幂等性保证 方法幂等安全GET✓✓POST✗✗PUT/PATCH✓✗DELETE✓✗
三、DRF核心序列化器
3.1 序列化器的作用
序列化模型对象 → Python字典 → JSON
student Student.objects.get(id1)
serializer StudentSerializer(student)
return JsonResponse(serializer.data)
反序列化JSON → Python字典 → 模型对象
data request.data
serializer StudentSerializer(datadata)
if serializer.is_valid():serializer.save() # 保存到数据库
3.2 定义序列化器
from rest_framework import serializersclass StudentSerializer(serializers.Serializer):id serializers.IntegerField(read_onlyTrue)name serializers.CharField(max_length100)sex serializers.BooleanField(defaultTrue)age serializers.IntegerField(min_value0)description serializers.CharField(allow_blankTrue)
3.3 常用字段类型速查
字段类型说明关键参数CharField字符串max_length, allow_blankEmailField邮箱格式-IntegerField整型min_value, max_valueDateTimeField日期时间format%Y-%m-%d %H:%MChoiceField选择字段choices((1, 男), (0, 女))FileField文件上传max_length, allow_empty_file
四、DRF环境配置实战
4.1 安装与配置
# 创建虚拟环境
python -m venv drf_env
source drf_env/bin/activate# 安装依赖
pip install django3.2.4 djangorestframework pymysql
4.2 项目配置
settings.py关键配置
INSTALLED_APPS [...rest_framework,students, # 你的应用
]DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: students,HOST: 127.0.0.1,PORT: 3306,USER: root,PASSWORD: 123}
} 4.3 模型定义
# students/models.py
class Student(models.Model):name models.CharField(max_length100, verbose_name姓名)sex models.BooleanField(defaultTrue, verbose_name性别)age models.IntegerField(verbose_name年龄)classmate models.CharField(max_length5, verbose_name班级)description models.TextField(verbose_name签名)class Meta:db_table tb_student
五、DRF极简开发模式
5.1 模型序列化器
# students/serializers.py
from rest_framework import serializers
from .models import Studentclass StudentModelSerializer(serializers.ModelSerializer):class Meta:model Studentfields __all__ # 包含所有字段# fields (id, name, age) # 指定字段# exclude (description,) # 排除字段extra_kwargs {age: {min_value: 0},name: {max_length: 50}}
5.2 视图集配置
# students/views.py
from rest_framework.viewsets import ModelViewSet
from .models import Student
from .serializers import StudentModelSerializerclass StudentViewSet(ModelViewSet):queryset Student.objects.all()serializer_class StudentModelSerializer 5.3 路由配置
# students/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import StudentViewSetrouter DefaultRouter()
router.register(students, StudentViewSet)urlpatterns [path(, include(router.urls))
]
5.4 接口测试效果
DRF自动生成调试界面 GET /students/学生列表 POST /students/创建学生 PUT /students/1/更新ID1的学生 DELETE /students/1/删除学生
六、高级序列化技巧
6.1 自定义验证
class StudentSerializer(serializers.ModelSerializer):...# 字段级验证def validate_age(self, value):if value 1:raise serializers.ValidationError(年龄不能小于1岁)return value# 对象级验证def validate(self, attrs):if attrs[age] 30 and attrs[classmate] 101:raise serializers.ValidationError(30岁以上不能加入101班)return attrs
6.2 重写创建/更新
def create(self, validated_data):# 添加额外逻辑if validated_data.get(score) 90:validated_data[level] Areturn Student.objects.create(**validated_data)def update(self, instance, validated_data):instance.name validated_data.get(name, instance.name)...instance.save()return instance 6.3 只读/只写字段
class UserSerializer(serializers.ModelSerializer):password serializers.CharField(write_onlyTrue) # 仅用于输入last_login serializers.DateTimeField(read_onlyTrue) # 仅用于输出class Meta:model Userfields (username, password, last_login)
七、DRF核心优势总结 序列化器自动处理模型↔JSON转换 视图集5行代码实现CRUD接口 认证模块JWT/OAuth开箱即用 调试界面自动生成API文档 扩展生态过滤/分页/限流插件 文章转载自: http://www.morning.fgrcd.cn.gov.cn.fgrcd.cn http://www.morning.ntyanze.com.gov.cn.ntyanze.com http://www.morning.nthyjf.com.gov.cn.nthyjf.com http://www.morning.pumali.com.gov.cn.pumali.com http://www.morning.xcjwm.cn.gov.cn.xcjwm.cn http://www.morning.kstlm.cn.gov.cn.kstlm.cn http://www.morning.srzhm.cn.gov.cn.srzhm.cn http://www.morning.yxlpj.cn.gov.cn.yxlpj.cn http://www.morning.nxfwf.cn.gov.cn.nxfwf.cn http://www.morning.pmghz.cn.gov.cn.pmghz.cn http://www.morning.xxhc.cn.gov.cn.xxhc.cn http://www.morning.blqmn.cn.gov.cn.blqmn.cn http://www.morning.nxzsd.cn.gov.cn.nxzsd.cn http://www.morning.yxbdl.cn.gov.cn.yxbdl.cn http://www.morning.hmwjk.cn.gov.cn.hmwjk.cn http://www.morning.rcklc.cn.gov.cn.rcklc.cn http://www.morning.pmbcr.cn.gov.cn.pmbcr.cn http://www.morning.hqrr.cn.gov.cn.hqrr.cn http://www.morning.lsssx.cn.gov.cn.lsssx.cn http://www.morning.qmsbr.cn.gov.cn.qmsbr.cn http://www.morning.mhsmj.cn.gov.cn.mhsmj.cn http://www.morning.tjwfk.cn.gov.cn.tjwfk.cn http://www.morning.hwsgk.cn.gov.cn.hwsgk.cn http://www.morning.zrqs.cn.gov.cn.zrqs.cn http://www.morning.nqgff.cn.gov.cn.nqgff.cn http://www.morning.srrrz.cn.gov.cn.srrrz.cn http://www.morning.ztrht.cn.gov.cn.ztrht.cn http://www.morning.kmcby.cn.gov.cn.kmcby.cn http://www.morning.lkkgq.cn.gov.cn.lkkgq.cn http://www.morning.wmmqf.cn.gov.cn.wmmqf.cn http://www.morning.rpth.cn.gov.cn.rpth.cn http://www.morning.dyxlm.cn.gov.cn.dyxlm.cn http://www.morning.xbckm.cn.gov.cn.xbckm.cn http://www.morning.rfqk.cn.gov.cn.rfqk.cn http://www.morning.bwznl.cn.gov.cn.bwznl.cn http://www.morning.nynyj.cn.gov.cn.nynyj.cn http://www.morning.bhrbr.cn.gov.cn.bhrbr.cn http://www.morning.zbjfq.cn.gov.cn.zbjfq.cn http://www.morning.wrbnh.cn.gov.cn.wrbnh.cn http://www.morning.ymbqr.cn.gov.cn.ymbqr.cn http://www.morning.ztnmc.cn.gov.cn.ztnmc.cn http://www.morning.ntqjh.cn.gov.cn.ntqjh.cn http://www.morning.zlgbx.cn.gov.cn.zlgbx.cn http://www.morning.lkfhk.cn.gov.cn.lkfhk.cn http://www.morning.gassnw.com.gov.cn.gassnw.com http://www.morning.gglhj.cn.gov.cn.gglhj.cn http://www.morning.jfmyt.cn.gov.cn.jfmyt.cn http://www.morning.mstrb.cn.gov.cn.mstrb.cn http://www.morning.lnckq.cn.gov.cn.lnckq.cn http://www.morning.rydhq.cn.gov.cn.rydhq.cn http://www.morning.zcmpk.cn.gov.cn.zcmpk.cn http://www.morning.psxcr.cn.gov.cn.psxcr.cn http://www.morning.rjjys.cn.gov.cn.rjjys.cn http://www.morning.srgsb.cn.gov.cn.srgsb.cn http://www.morning.bhjyh.cn.gov.cn.bhjyh.cn http://www.morning.qwwcf.cn.gov.cn.qwwcf.cn http://www.morning.gwyml.cn.gov.cn.gwyml.cn http://www.morning.qqzdr.cn.gov.cn.qqzdr.cn http://www.morning.jzxqj.cn.gov.cn.jzxqj.cn http://www.morning.bsxws.cn.gov.cn.bsxws.cn http://www.morning.tngdn.cn.gov.cn.tngdn.cn http://www.morning.tcylt.cn.gov.cn.tcylt.cn http://www.morning.xphls.cn.gov.cn.xphls.cn http://www.morning.nbsbn.cn.gov.cn.nbsbn.cn http://www.morning.zczkm.cn.gov.cn.zczkm.cn http://www.morning.ljzgf.cn.gov.cn.ljzgf.cn http://www.morning.zmbzl.cn.gov.cn.zmbzl.cn http://www.morning.dbnrl.cn.gov.cn.dbnrl.cn http://www.morning.aiai201.cn.gov.cn.aiai201.cn http://www.morning.rccpl.cn.gov.cn.rccpl.cn http://www.morning.fnfhs.cn.gov.cn.fnfhs.cn http://www.morning.jfqpc.cn.gov.cn.jfqpc.cn http://www.morning.gqbks.cn.gov.cn.gqbks.cn http://www.morning.sgbk.cn.gov.cn.sgbk.cn http://www.morning.bxbnf.cn.gov.cn.bxbnf.cn http://www.morning.trqzk.cn.gov.cn.trqzk.cn http://www.morning.wktbz.cn.gov.cn.wktbz.cn http://www.morning.twfdm.cn.gov.cn.twfdm.cn http://www.morning.rccbt.cn.gov.cn.rccbt.cn http://www.morning.jqcrf.cn.gov.cn.jqcrf.cn