今日内容概要
- 基于APIView+Response写视图类
- APIView的执行流程(源码分析)
- Request类的源码分析
- 验证不同编码格式提交数据(request.POST)
- 序列化类的序列化的使用
- 序列化类的反序列化
基于APIView+Response写视图类
1.APIView的基本使用
- 首先明确drf是一个第三方的app,只能在django上使用;
- 其次在安装了drf后,导入一个视图类APIView,所有后期要使用drf写视图类,都是继承APIView及其子类。
2.前戏之使用View+JsonResponse写视图类
views.py
from django.http import JsonResponse from django.views import View from .models import Book class BookView(View): def get(self, request): print(type(request)) book_list = Book.objects.all() # book_list是queryset对象不能直接序列化,只能通过for循环一个个拼成列表套字典的形式 res_list = [] for book in book_list: res_list.append({ 'name': book.name, 'price': book.price, 'publish': book.publish}) return JsonResponse(res_list,safe=False,json_dumps_params={ 'ensure_ascii':False}) # 只能序列化字典和列表,
3.使用APIView+drf的Response写(不要忘了注册rest_framework这个app)
settings.py
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01.apps.App01Config', 'rest_framework' # 注册drf这个app ]
views.py
from .models import Book from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.request import Request class BookView(APIView): # APIView继承自django的View def get(self, request): # print(type(self.request)) # 新的request # print(type(request)) print(request._request) print(type(request._request)) #django.core.handlers.wsgi.WSGIRequest # print(request.method) # get # print(request.path) # /books/ # print(request.GET) # 原来的get请求提交的参数 # print(request.POST) # 原来post请求提交的参数 book_list = Book.objects.all() # book_list是queryset对象不能直接序列化,只能通过for循环一个个拼成列表套字典的形式 res_list = [] for book in book_list: res_list.append({ 'name': book.