序列化组件写图书接口
一、先建好表格
models.py
class Book(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) price = models.DecimalField(max_digits=5, decimal_places=2) publish_date = models.DateField() publish = models.ForeignKey(to='Publish', to_field='nid', on_delete=models.CASCADE) authors = models.ManyToManyField(to='Author') class Author(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) age = models.IntegerField() author_detail = models.OneToOneField(to='AuthorDatail', to_field='nid', unique=True, on_delete=models.CASCADE) class AuthorDatail(models.Model): nid = models.AutoField(primary_key=True) telephone = models.BigIntegerField() birthday = models.DateField() addr = models.CharField(max_length=64) class Publish(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) city = models.CharField(max_length=32) email = models.EmailField()
二、写一个序列化类继承ModelSerializer
新建myser.py文件
from rest_framework import serializers from app01 import models class BookSerializers(serializers.ModelSerializer): class Meta: model = models.Book fields = '__all__'
三、在视图函数使用序列化的类
views.py:
from rest_framework.views import APIView from app01 import models from app01.myser import BookSerializers from rest_framework.response import Response class Books(APIView): def get(self, request, *args, **kwargs): response = {'code': 100, 'msg': '查询成功'} ret = models.Book.objects.all() book_ser = BookSerializers(instance=ret, many=True) response['data'] = book_ser.data return Response(response) def post(self, request, *args, **kwargs): response = {'code': 100, 'msg': '新增成功'} book_ser = BookSerializers(data=request.data) if book_ser.is_valid(): book_ser.save() else: response['code'] = 101 response['msg'] = book_ser.errors # 错误信息被response序列化出来返回前端 return Response(response) class BookDetail(APIView): def get(self, request, id, **kwargs): # id是有名分组传过来的id response = {'code': 100, 'msg': '查询成功'} ret = models.Book.objects.filter(pk=id).first() book_ser = BookSerializers(instance=ret, many=False) response['data'] = book_ser.data return Response(response) def put(self, request, id, **kwargs): response = {'code': 100, 'msg': '修改成功'} ret = models.Book.objects.filter(pk=id).first() book_ser = BookSerializers(instance=ret, data=request.data) # 修改需要传两个参数 if book_ser.is_valid(): book_ser.save() # 校验通过,如果不是空,调update方法, 如果是空,调create方法 # 原因是ModelSerializer 重写了这两个方法 else: response['code'] = 101 response['msg'] = book_ser.errors return Response(response) def delete(self, request, id, **kwargs): response = {'code': 100, 'msg': '删除成功'} models.Book.objects.filter(pk=id).delete() return Response(response)
urls.py
url(r'^books/$', views.Books.as_view()), url(r'^books/(?P<id>\d+)$', views.BookDetail.as_view()),
演示:
新增数据
修改数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现