[Django] Django REST Framework(一) Serializer和ModelSerializer

1.REST Framework概述

Django REST framework是一套基于Django的REST框架,是一个用于构建Web API的功能强大且灵活的工具包。

RESTful 简述

Representational State Transfer(REST),是一种架构样式,定义了一套用于创建WEB服务的约束。当前WEB开发趋势就是前端层出不穷,为了保证一个后台同时适用于多个前端,需要一种统一的机制或API,而RESTful API是目前前后端分离的最佳实践。

为什么需要前后端分离?
  • PC,APP,Pad 等多端适应;
  • SPA开发模式流行(Single Page web Application);
  • 使得前后端开发职责清楚,提高开发效率高;
  • 避免了开发语言和模板语言的高度耦合和开发语言之间的依赖;
RESTful API特点
  • 轻量,直接通过HTTP协议,不需要额外的协议;
  • 面向资源,每一个URL代表一种资源,具有自解释性;
  • 数据描述简单,一般通过JSON、xml做数据通信;
  • 客户端根据不同的请求,通过不同的HTTP方法(get、post、delete、put),对服务器资源进行操作。
为什么要使用Django REST 框架而不是Django?

虽然Django中可以通过DTL(Django Template Language)来实现PC端的显示,但却无法支持如Android端、ios端。而且Django只能依赖DTL实现PC端的显示。

要实现一套后台适应多个前端,就必须使用前后端分离技术,因此就要使用RESTful API,而Django REST框架正是基于Django的RESTful API。

2.安装Django REST Framework

通过如下命令安装REST 框架:

$ pip install djangorestframework

如果没有安装Python,则需要安装Python和Django:

$ sudo apt-get install python3.6
$ sudo apt-get install python3-pip
$ pip install Django

3.序列化和反序列化

序列化,是指将复杂的QuerySet和Model类型转换成Python基本数据类型,从而将这些基本数据类型以JSON的形式响应给客户端。

反序列化则和序列化相反,是指将Http请求中传入的JSON数据转换成复杂的数据类型,从而保存在数据库中。

在REST Framework中,提供了多个用于序列化操作的类,但常用的也就如下两个:

  • Serializer:进行序列化基本的类;

  • ModelSerializer:继承于Serializer,内部实现了通用的序列化逻辑,其中包含了与Model字段对应的字段,可以快速对Model进行序列化。

使用时需要导入对应模块:

from rest_framework import serializers

接下来我们就分别看看这两个序列化操作的类。

4.Serializer

Serializer进行序列化的基本格式如下:

from rest_framework import serializers

class CommentSerializer(serializers.Serializer):
    # 指定要序列化的字段
    email = serializers.EmailField()
    content = serializers.CharField(max_length=200)
    created = serializers.DateTimeField()
    # 用于反序列化时创建一个Model实例
    def create(self, validated_data):
        return Comment(**validated_data)
    # 用于反序列化时更新一个Model实例
    def update(self, instance, validated_data):
       # ...
       instance.email = validated_data.get('email',instance=emial)
       # ...
       return instance

接下来我们看看在REST框架中如何对一个Model进行序列化操作。

Step1.创建一个model:
from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=40)
    age = models.IntegerField()
    number = models.IntegerField(unique=True)
    date = models.DateField()
Step2.创建对该Model进行序列化的类:

在app/下创建serializer.py文件

from rest_framework 
  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值