Django-rest-framework框架之APIView与序列化详解

今日内容概要

  • 基于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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值