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()),
复制代码

 

posted @   *sunflower*  阅读(97)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示