DRF基础
请求与响应
控制请求编码格式
drf配置文件默认可以解析全部编码格式,drf配置文件路径:
from rest_framework import settings
全局控制:
在配置文件中加入:
REST_FRAMEWORK = { 'DEFAULT_PARSER_CLASSES': [ 'rest_framework.parsers.JSONParser', # 解析json 'rest_framework.parsers.FormParser', # 解析urlencoded 'rest_framework.parsers.MultiPartParser', # 解析form-data ], }
note:三个参数代表能接收的编码格式,注释掉其中一个代表前端用该编码格式传的数据不会被接收到。
局部控制:
在视图类中配置:
from rest_framework.parsers import JSONParser, FormParser, MultiPartParser class BookView(APIView): parser_classes = [ JSONParser, # 解析json FormParser, # 解析urlencoded MultiPartParser # 解析form-data ]
note:有哪个就代表可以解析哪些格式的数据。
优先级:视图类 > 项目配置文件 > drf配置文件。
响应
drf的响应对象有着众多属性,Response路径:
from rest_framework.response import Response
"""重要参数""" data=None, # 要序列化的数据,字典,列表,字符串 status=None, # http响应状态码 headers=None, # 响应头 """其他参数""" template_name=None, # 模板名字,渲染页面效果 content_type=None # 响应数据的格式,默认为json格式
全局控制响应编码:
# 在配置文件中添加 REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', # json格式 'rest_framework.renderers.BrowsableAPIRenderer', # 浏览器格式 ], }
局部生效:
# 视图类中添加 from rest_framework.renderers import JSONRenderer, BrowsableAPIRenderer class BookView(APIView): renderer_classes = [JSONRenderer,BrowsableAPIRenderer]
作业
# views.py class BookView(GenericAPIView): queryset=Book.objects queryset=Book.objects.all() serializer_class = BookSerializer def get(self,request): book_list=self.get_queryset() book_ser=self.get_serializer(book_list,many=True) return Response(book_ser.data) def post(self,request): book_ser = self.get_serializer(data=request.data) if book_ser.is_valid(): book_ser.save() return Response(book_ser.data) else: return Response({'status':101,'msg':'校验失败'}) class BookDetailView(GenericAPIView): queryset = Book.objects serializer_class = BookSerializer def get(self, request,pk): book = self.get_object() book_ser = self.get_serializer(book) return Response(book_ser.data) def put(self, request,pk): book = self.get_object() book_ser = self.get_serializer(instance=book,data=request.data) if book_ser.is_valid(): book_ser.save() return Response(book_ser.data) else: return Response({'status': 101, 'msg': '校验失败'}) def delete(self,request,pk): ret=self.get_object().delete() return Response({'status': 100, 'msg': '删除成功'}) #url.py path('books/', views.BookView.as_view()), re_path('books/(?P<pk>\d+)', views.BookDetailView.as_view()),
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步