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

RESTAPI简介与DRF使用

RESTAPI

以资源为url,通过不同的请求方式实现不同的行为。

以资源名作为url

POST:增 …/student/

GET:查所有 …/student/

GET:查单个 …/student/<pk>/ 获取id=pk的学生

DELETE:删 …/student/<pk>/

PUT:改全部 …/student/<pk>/

PATCH:改部分 …/student/<pk>/

视图函数

数据从前端传到服务器时,需要反序列化成能存入数据库的数据,同样,数据从数据库取出,需要序列化成可以传给前端的Json数据,drf里的序列化器可以很好地实现序列化与反序列化两个步骤。

1. 序列化器

1. 自己写的序列化器:

设置字段,然后可以设置POST和UPDATE时数据库的操作

class BookSerializers(serializers.Serializer):title = serializers.CharField(max_length=32)price = serializers.IntegerField()pub_date = serializers.DateField()def create(self, validated_data):# 添加数据逻辑new_book = Book.objects.create(**validated_data)return new_bookdef update(self, instance, validated_data):Book.objects.filter(pk=instance.pk).update(**validated_data)updated_book = Book.objects.get(pk=instance.pk)return updated_book

2. 使用ModelSerializer,里面实现了create和update方法

# ModelSerializer 模型序列化器,只需要配置
class BookSerializers(serializers.ModelSerializer):date = serializers.DateField(source='pub_date')class Meta:model = Book#fields = '__all__'exclude = ["pub_date"]

2. 视图函数

1. 继承APIView,自己写get/post/get/put/delete方法

class BookView(APIView):def get(self, request):# 获取所有书籍book_list = Book.objects.all()# 构建序列化器对象serializer = BookSerializers(instance=book_list, many=True)return Response(serializer.data)def post(self, request):serializer = BookSerializers(data=request.data)if serializer.is_valid():# 通过# new_book = Book.objects.create(**serializer.validated_data)serializer.save()return Response(serializer.data)else:# 校验失败return Response(serializer.errors)return Response()class BookDetailView(APIView):def get(self, request, id):book = Book.objects.get(pk=id)serializer = BookSerializers(instance=book, many=False)return Response(serializer.data)def put(self, request, id):update_book = Book.objects.get(pk=id)serializer = BookSerializers(instance=update_book, data=request.data)if  serializer.is_valid():serializer.save()return Response(serializer.data)else:return Response(serializer.errors)def delete(self, request, id):Book.objects.get(pk=id).delete()return Response()

2. 继承GenericAPIView

好像没有什么区别,就是把请求和序列化器在类里声明了,然后使用self.get_serializer来获得序列化器,用get_objetct来获取查询结果。

class PublishDetailView(GenericAPIView):queryset = Publish.objects.all()serializer_class = PublishSerializersdef get(self, request, pk):serializer = self.get_serializer(instance=self.get_object(), many=False)return Response(serializer.data)def put(self, request, pk):serializer = self.get_serializer(instance=self.get_object(), data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data)else:return Response(serializer.errors)def delete(self, request, pk):self.get_object().delete()return Response()

3. 继承generic的ListCreateAPIView, RetrieveUpdateDestroyAPIView

查询全体和查询单人需要写两个视图函数

class PublishView(ListCreateAPIView):queryset = Publish.objects.all()serializer_class = PublishSerializersclass PublishDetailView(RetrieveUpdateDestroyAPIView):queryset = Publish.objects.all()serializer_class = PublishSerializers

4. 继承ModelViewSet

一行解决

class AuthorView(ModelViewSet):queryset = Author.objects.all()serializer_class = AuthorSerializers
http://www.lryc.cn/news/129181.html

相关文章:

  • 深度学习笔记(kaggle课程《Intro to Deep Learning》)
  • windows下载任意版本php
  • Linux命令
  • TDD(测试驱动开发)?
  • C/C++
  • CCF C³ 走进百度:大模型与可持续生态发展
  • Vue使用html2canvas将DOM节点生成对应的PDF
  • 专访阿里云席明贤,视频云如何运用大模型与小模型来破茧升级2.0
  • Vue 2的计算属性与侦听器
  • JavaScript基础:学习JavaScript语言的基本语法和常用操作,了解网页交互的基本原理
  • 网络每日一练
  • asp.net core读取request内容
  • 笔记:移植xenomai到nuc972(2)
  • 记忆正则表达式的基本元件
  • 低代码是什么?解决哪些问题?什么业务场景适合用低码开发?
  • SOA架构
  • “深入探索JVM内部机制:解密Java虚拟机“
  • PostgreSQL空值的判断
  • 使用phpunit进行单元测试
  • MongoDB 简介
  • [LitCTF 2023]Follow me and hack me
  • Java从入门到高级的全面指南
  • linux 命令- systemctl
  • 自动驾驶,一次道阻且长的远征|数据猿直播干货分享
  • 大数据培训前景怎么样?企业需求量大吗
  • redis — 基于Spring Boot实现redis延迟队列
  • 【日常积累】Linux之init系统学习
  • Python功能制作之3D方块
  • 【0基础入门Python笔记】二、python 之逻辑运算和制流程语句
  • python中的svm:介绍和基本使用方法