DRF学习笔记(一)

2022-12-21 21:26:51 浏览数 (1)

# 一、Django REST FrameWork 简介

使用 Django REST FramWork 能够让我们使用 Django 编写的后端 API 接口时,更优雅的处理数据的 json 序列化和 json 反序列化

# 1、DRF 的安装

这里想必学习了 django 的童鞋都应该能够知道通过 python 自带的包管理工具进行安装了吧

命令:

代码语言:javascript复制
pip install djangorestframework

随后打开 Django 项目的 setttings.py 文件,将我们下载的 DRF 框架注册到 Django 的 APP 当中,如下:

代码语言:javascript复制
INSTALL_APPS = {
    ...
    'rest_framework',
} 

ok,到这里我们就成功得把 DRF 安装到自己电脑上了!

# 二、序列化器的使用

# 1、介绍

序列化器是 DRF 当中的灵魂,因为有它的存在,能够帮助我们少写非常多的重复性代码,比如,当我们的应用当中有这样一个 Model :

代码语言:javascript复制
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    pub_date = models.DateField()

在前后端分离的场景下,前端采用 ajax 请求我们的后端接口,尽管 Django 当中已经封装好了 JsonResponse ,但是还是需要我们编写如下的代码才能够将 Python 的对象转成 JSON 数据

代码语言:javascript复制
data = {
    "title":book.title,
    "price":book.price,
    "pub_date":book.pub_date
}
return JsonResponse(data)

这样虽然能够达到我们的目的,但是一当 model 当中的字段过多时,这就是一件非常糟心的事情了,DRF 就是为了处理这种问题而产生的。

# 2、使用

使用 DRF,我们可以这样编写代码,在对应的 app 目录下,新建一个 serializer.py 文件,在文件当中编写如下代码:

代码语言:javascript复制
from rest_framework import serializers

class BookSerializer(serializers.Serializer):
    title = serializers.CharField(max_length=32)
    price = serializers.DecimalField(max_digits=5, decimal_places=2)
    pub_date = serializers.DateField()

这样,我们就写好了 DRF 的序列化器,接下来就能够在 views.py 当中使用了,使用的方式如下:

代码语言:javascript复制
book = serializer.BookSerializer(instance=models.Book.objects.all(), many=True)

接下来使用 DRF 给我们封装好的 Response 对象进行数据的返回即可

代码语言:javascript复制
from rest_framework.response import Response

这样我们就能够开始使用 DRF 提供的序列化器对我们的之前编写的 views 代码进行改造了

# 三、Request 对象解析

当我们的视图层继承了 DRF 给我们提供的的 View 时,DRF会给我们编写的视图函数传递一个 request对象,该对象是对 Django 原生 request对象的封装,同时对获取 request对象中的数据进行了简化,使其更加方便的配合序列化器使用。

# 1、.data 属性

request.data 返回请求体解析后的内容。这类似于标准的 request.POSTrequest.FILES 属性,但是该对象包含有独有的特性:

  • 它包含了所有解析后的内容,包括文件类型和非文件类型的输入
  • 它支持除了POST类型以外的其他HTTP方法的内容解析,意味着你可以访问PUTPATCH类型reqeust的内容
  • 它提供REST framework灵活的请求解析,而不单单支持from数据。举例说你可以像处理form数据一样处理JSON数据。 详细信息,参考parsers documentation (opens new window)

# 2、.query_params 属性

该属性使原生的 request.GET 更加具有语义化,这样写能够让开发者编写的代码能够更加容易阅读。

# 四、Respone 对象解析

DRF 中对 Django 原生的 Response 对象进行了封装

0 人点赞