Request和Response类
| |
| |
| """ |
| data: POST,PUT,PATCH请求方式解析后的数据 , |
| 在原始 django中put提交的数据在request.POST中是取不到的 |
| 其他的用起来和之前一样用(FILES, method,path···) >>>底层原理:__getattr__ |
| """ |
| |
| data = None, |
| status = None, |
| |
| headers= =None, |
| |
| res = JsonResponse(a) |
| res['aaa']='bbb' |
| return res |
drf能够解析的请求编码
| |
| urlencoded |
| form-data |
| json |
| """ |
| # 其实通过配置完成:项目中没有配置,是在drf内置的配置文件中提前配好了 |
| -drf也是有两套,一套是项目中得配置(settings.py),一套是默认的配置 |
| -drf的配置文件settings.py中有 DEFAULT_PARSER_CLASSES(默认的解析类) |
| -'rest_framework.parsers.JSONParser', 可以解析json格式 |
| -'rest_framework.parsers.FormParser', 可以解析urlencoded格式 |
| -'rest_framework.parsers.MultiPartParser' 可以解析form-data格式 |
| """ |
| |
| REST_FRAMEWORK = { |
| 'DEFAULT_PARSER_CLASSES': [ |
| 'rest_framework.parsers.JSONParser', |
| |
| |
| |
| class TestView(APIView): |
| parser_classes = [JSONParser,FormParser,MultiPartParser] |
总结:
| |
| |
| 1.基本上都运行JSONParser,FormParser |
| 2.如果上传文件只允许MultiPartParser |
响应编码
| |
| |
| REST_FRAMEWORK = { |
| 'DEFAULT_RENDERER_CLASSES': [ |
| |
| 'rest_framework.renderers.BrowsableAPIRenderer', |
| ] |
| } |
| |
| class TestView(APIView): |
| renderer_classes = [JSONRenderer,] |
| |
| |
两个视图基类APIView、GenericAPIView
| |
| |
| 类属性: |
| queryset = User.objects.all() |
| serializer_class = UserSerializer |
| 方法: |
| self.get_objecr() |
| self.get_serializer |
| self.get_queryset() |
基于APIView写5个接口
| class UserView(APIView): |
| def get(self, request): |
| book_list = User.objects.all() |
| ser = UserSerializer(instance=book_list, many=True) |
| return Response(ser.data) |
| |
| def post(self, request): |
| ser = UserSerializer(data=request.data) |
| if ser.is_valid(): |
| ser.save() |
| return Response({'code': 100, 'msg': "新增成功"}, status=201) |
| else: |
| return Response({'code': 101, 'msg': ser.errors}) |
| |
| |
| class UserDetailView(APIView): |
| def get(self, request, pk): |
| book = User.objects.filter(pk=pk).first() |
| ser = UserSerializer(instance=book) |
| return Response(ser.data) |
| |
| def put(self, request, pk): |
| book = User.objects.filter(pk=pk).first() |
| ser = UserSerializer(instance=book, data=request.data) |
| if ser.is_valid(): |
| ser.save() |
| return Response({'code': 100, 'msg': "修改成功"}, status=201) |
| else: |
| return Response({'code': 101, 'msg': ser.errors}) |
| |
| def delete(self, request, pk): |
| User.objects.filter(pk=pk).delete() |
| return Response('') |
基于GenericAPIView写5个接口
| from .models import Book |
| from rest_framework.generics import GenericAPIView |
| from app01.ser import BookSerializer |
| from rest_framework.response import Response |
| |
| class BookView(GenericAPIView): |
| queryset = Book.objects.all() |
| serializer_class = BookSerializer |
| |
| def get(self,request): |
| book_list = self.get_queryset() |
| res = self.get_serializer(instance=book_list, many=True) |
| return Response(res.data) |
| def post(self,request): |
| res = self.get_serializer(data=request.data) |
| if res.is_valid(): |
| res.save() |
| return Response({'code': 100, 'msg':'添加成功'}) |
| else: |
| return Response({'code': 101, 'msg': res.errors}) |
| |
| class BookDateView(GenericAPIView): |
| queryset = Book.objects.all() |
| serializer_class = BookSerializer |
| |
| def get(self,request,pk): |
| book = self.get_object() |
| res = self.get_serializer(instance=book) |
| return Response(res.data) |
| |
| def put(self,request,pk): |
| book = self.get_object() |
| res = self.get_serializer(instance=book,data=request.data) |
| if res.is_valid(): |
| res.save() |
| return Response({'code':100, 'msg': '修改成功'}) |
| else: |
| return Response({'code': 101, 'msg': res.errors}) |
| |
| def delete(self,request,pk): |
| self.get_queryset().filter(pk=pk).delete() |
| return Response({'code': 100, 'msg': '删除成功'}) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)