restful规范
1)根据method不同,进行不同操作
2)面向资源编程
3)体现版本
4)体现是API
5)最好用https
6)响应式设置状态码
7)条件 ?id=1
8)返回值
9)返回错误信息
10)Hypermedia API
REST framework框架
1)路由
2)视图
3)权限
4)认证
5)访问频率限制
6)序列化
7)分页
8)解析器
9)渲染器
10)版本
视图三部曲
使用混合(mixins)
1 from rest_framework.views import APIView 2 from rest_framework.response import Response 3 from .models import * 4 from django.shortcuts import HttpResponse 5 from django.core import serializers 6 7 8 from rest_framework import serializers 9 10 11 class BookSerializers(serializers.ModelSerializer): 12 class Meta: 13 model=Book 14 fields="__all__" 15 #depth=1 16 17 18 class PublshSerializers(serializers.ModelSerializer): 19 20 class Meta: 21 model=Publish 22 fields="__all__" 23 depth=1 24 25 26 class BookViewSet(APIView): 27 28 def get(self,request,*args,**kwargs): 29 book_list=Book.objects.all() 30 bs=BookSerializers(book_list,many=True,context={'request': request}) 31 return Response(bs.data) 32 33 34 def post(self,request,*args,**kwargs): 35 print(request.data) 36 bs=BookSerializers(data=request.data,many=False) 37 if bs.is_valid(): 38 print(bs.validated_data) 39 bs.save() 40 return Response(bs.data) 41 else: 42 return HttpResponse(bs.errors) 43 44 45 class BookDetailViewSet(APIView): 46 47 def get(self,request,pk): 48 book_obj=Book.objects.filter(pk=pk).first() 49 bs=BookSerializers(book_obj,context={'request': request}) 50 return Response(bs.data) 51 52 def put(self,request,pk): 53 book_obj=Book.objects.filter(pk=pk).first() 54 bs=BookSerializers(book_obj,data=request.data,context={'request': request}) 55 if bs.is_valid(): 56 bs.save() 57 return Response(bs.data) 58 else: 59 return HttpResponse(bs.errors) 60 61 62 class PublishViewSet(APIView): 63 64 def get(self,request,*args,**kwargs): 65 publish_list=Publish.objects.all() 66 bs=PublshSerializers(publish_list,many=True,context={'request': request}) 67 return Response(bs.data) 68 69 70 def post(self,request,*args,**kwargs): 71 72 bs=PublshSerializers(data=request.data,many=False) 73 if bs.is_valid(): 74 # print(bs.validated_data) 75 bs.save() 76 return Response(bs.data) 77 else: 78 return HttpResponse(bs.errors) 79 80 81 class PublishDetailViewSet(APIView): 82 83 def get(self,request,pk): 84 85 publish_obj=Publish.objects.filter(pk=pk).first() 86 bs=PublshSerializers(publish_obj,context={'request': request}) 87 return Response(bs.data) 88 89 def put(self,request,pk): 90 publish_obj=Publish.objects.filter(pk=pk).first() 91 bs=PublshSerializers(publish_obj,data=request.data,context={'request': request}) 92 if bs.is_valid(): 93 bs.save() 94 return Response(bs.data) 95 else: 96 return HttpResponse(bs.errors)