空壳主体接入网站,安阳企业网站建设,商务网站建设与维护论文,网站建设与管理实施方案RESTAPI
以资源为url#xff0c;通过不同的请求方式实现不同的行为。
以资源名作为url
POST:增 …/student/
GET#xff1a;查所有 …/student/
GET#xff1a;查单个 …/student/pk/ 获取idpk的学生
DELETE#xff1a;删 …/student/pk/
PUT#…RESTAPI
以资源为url通过不同的请求方式实现不同的行为。
以资源名作为url
POST:增 …/student/
GET查所有 …/student/
GET查单个 …/student/pk/ 获取idpk的学生
DELETE删 …/student/pk/
PUT改全部 …/student/pk/
PATCH改部分 …/student/pk/
视图函数
数据从前端传到服务器时需要反序列化成能存入数据库的数据同样数据从数据库取出需要序列化成可以传给前端的Json数据drf里的序列化器可以很好地实现序列化与反序列化两个步骤。
1. 序列化器
1. 自己写的序列化器
设置字段然后可以设置POST和UPDATE时数据库的操作
class BookSerializers(serializers.Serializer):title serializers.CharField(max_length32)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(pkinstance.pk).update(**validated_data)updated_book Book.objects.get(pkinstance.pk)return updated_book2. 使用ModelSerializer里面实现了create和update方法
# ModelSerializer 模型序列化器只需要配置
class BookSerializers(serializers.ModelSerializer):date serializers.DateField(sourcepub_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(instancebook_list, manyTrue)return Response(serializer.data)def post(self, request):serializer BookSerializers(datarequest.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(pkid)serializer BookSerializers(instancebook, manyFalse)return Response(serializer.data)def put(self, request, id):update_book Book.objects.get(pkid)serializer BookSerializers(instanceupdate_book, datarequest.data)if serializer.is_valid():serializer.save()return Response(serializer.data)else:return Response(serializer.errors)def delete(self, request, id):Book.objects.get(pkid).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(instanceself.get_object(), manyFalse)return Response(serializer.data)def put(self, request, pk):serializer self.get_serializer(instanceself.get_object(), datarequest.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 PublishSerializers4. 继承ModelViewSet
一行解决
class AuthorView(ModelViewSet):queryset Author.objects.all()serializer_class AuthorSerializers