博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
运维开发笔记整理-序列化
阅读量:5939 次
发布时间:2019-06-19

本文共 20828 字,大约阅读时间需要 69 分钟。

              运维开发笔记整理-序列化

                               作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

 

一.准备环境

1>.创建一个apps 

python manage.py startapp idcs

2>. 创建一个apps的包,以后将创建的项目都移动至改目录中并配置相应的环境目录。这样做的目录是便于管理,否则随着项目的增多,咱们的根目录的文件夹也越多

import syssys.path.insert(0,os.path.join(BASE_DIR,"apps"))      #我们需要使用sys模块将BASE_DIR下的“apps”加入环境变了的第一个位置!

 

3>.检查idcs.apps.IdcsConfig中的name的值是否正确,如下图所示:

4>.安装与配置Django rest framework框架

bogon:~ yinzhengjie$ pip3.6 install djangorestframeworkCollecting djangorestframework  Downloading https://files.pythonhosted.org/packages/ef/13/0f394111124e0242bf3052c5578974e88e62e3715f0daf76b7c987fc6705/djangorestframework-3.9.1-py2.py3-none-any.whl (950kB)    100% |████████████████████████████████| 952kB 18kB/s Installing collected packages: djangorestframeworkSuccessfully installed djangorestframework-3.9.1You are using pip version 19.0.2, however version 19.0.3 is available.You should consider upgrading via the 'pip install --upgrade pip' command.bogon:~ yinzhengjie$
pip3.6 install djangorestframework
INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'idcs.apps.IdcsConfig',    #'rest_framework',            #我们配置上改模块即可!若没有饮用改模块的话,那就最好将其注视掉,如果要用,直接在代码李import即可!]

5>.修改idcs.models.py配置文件

from django.db import models# Create your models here.class Idc(models.Model):    name    = models.CharField("机房名称",max_length=32)    address = models.CharField("机房地址",max_length=256)    phone   = models.CharField("联系人",max_length=15)    email   = models.EmailField("邮件地址",default="null")    letter  = models.CharField("IDC简称",max_length=5)    def __str__(self):        return self.name    class Meta:        db_table = "resources_idc"

6>.查看数据库的表结构

(venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py showmigrationsadmin [ ] 0001_initial [ ] 0002_logentry_remove_auto_addauth [ ] 0001_initial [ ] 0002_alter_permission_name_max_length [ ] 0003_alter_user_email_max_length [ ] 0004_alter_user_username_opts [ ] 0005_alter_user_last_login_null [ ] 0006_require_contenttypes_0002 [ ] 0007_alter_validators_add_error_messages [ ] 0008_alter_user_username_max_lengthcontenttypes [ ] 0001_initial [ ] 0002_remove_content_type_nameidcs (no migrations)sessions [ ] 0001_initial(venv) bogon:yinzhengjie_devops yinzhengjie$
(venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py showmigrations                  #查看那些表没有同步!
(venv) bogon:yinzhengjie_devops yinzhengjie$ (venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py migrateOperations to perform:  Apply all migrations: admin, auth, contenttypes, sessionsRunning migrations:  Applying contenttypes.0001_initial... OK  Applying auth.0001_initial... OK  Applying admin.0001_initial... OK  Applying admin.0002_logentry_remove_auto_add... OK  Applying contenttypes.0002_remove_content_type_name... OK  Applying auth.0002_alter_permission_name_max_length... OK  Applying auth.0003_alter_user_email_max_length... OK  Applying auth.0004_alter_user_username_opts... OK  Applying auth.0005_alter_user_last_login_null... OK  Applying auth.0006_require_contenttypes_0002... OK  Applying auth.0007_alter_validators_add_error_messages... OK  Applying auth.0008_alter_user_username_max_length... OK  Applying sessions.0001_initial... OK(venv) bogon:yinzhengjie_devops yinzhengjie$ (venv) bogon:yinzhengjie_devops yinzhengjie$ (venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py showmigrationsadmin [X] 0001_initial [X] 0002_logentry_remove_auto_addauth [X] 0001_initial [X] 0002_alter_permission_name_max_length [X] 0003_alter_user_email_max_length [X] 0004_alter_user_username_opts [X] 0005_alter_user_last_login_null [X] 0006_require_contenttypes_0002 [X] 0007_alter_validators_add_error_messages [X] 0008_alter_user_username_max_lengthcontenttypes [X] 0001_initial [X] 0002_remove_content_type_nameidcs (no migrations)                      #我们发现就apps还没有同步!其他的表已经同步到数据库啦!sessions [X] 0001_initial(venv) bogon:yinzhengjie_devops yinzhengjie$
(venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py migrate                      #同步元数据信息
(venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py showmigrationsadmin [X] 0001_initial [X] 0002_logentry_remove_auto_addauth [X] 0001_initial [X] 0002_alter_permission_name_max_length [X] 0003_alter_user_email_max_length [X] 0004_alter_user_username_opts [X] 0005_alter_user_last_login_null [X] 0006_require_contenttypes_0002 [X] 0007_alter_validators_add_error_messages [X] 0008_alter_user_username_max_lengthcontenttypes [X] 0001_initial [X] 0002_remove_content_type_nameidcs (no migrations)sessions [X] 0001_initial(venv) bogon:yinzhengjie_devops yinzhengjie$ (venv) bogon:yinzhengjie_devops yinzhengjie$ (venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py  makemigrations idcs              #为idcs生成新的签名Migrations for 'idcs':  apps/idcs/migrations/0001_initial.py    - Create model Idc(venv) bogon:yinzhengjie_devops yinzhengjie$ (venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py showmigrationsadmin [X] 0001_initial [X] 0002_logentry_remove_auto_addauth [X] 0001_initial [X] 0002_alter_permission_name_max_length [X] 0003_alter_user_email_max_length [X] 0004_alter_user_username_opts [X] 0005_alter_user_last_login_null [X] 0006_require_contenttypes_0002 [X] 0007_alter_validators_add_error_messages [X] 0008_alter_user_username_max_lengthcontenttypes [X] 0001_initial [X] 0002_remove_content_type_nameidcs [ ] 0001_initial                  #就这一个数据库还没有同步信息呢!其他的都已经同步啦~sessions [X] 0001_initial(venv) bogon:yinzhengjie_devops yinzhengjie$
(venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py makemigrations idcs                #为idcs生成新的签名
(venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py showmigrationsadmin [X] 0001_initial [X] 0002_logentry_remove_auto_addauth [X] 0001_initial [X] 0002_alter_permission_name_max_length [X] 0003_alter_user_email_max_length [X] 0004_alter_user_username_opts [X] 0005_alter_user_last_login_null [X] 0006_require_contenttypes_0002 [X] 0007_alter_validators_add_error_messages [X] 0008_alter_user_username_max_lengthcontenttypes [X] 0001_initial [X] 0002_remove_content_type_nameidcs [ ] 0001_initialsessions [X] 0001_initial(venv) bogon:yinzhengjie_devops yinzhengjie$ (venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py migrate idcs            #同步idcs表!Operations to perform:  Apply all migrations: idcsRunning migrations:  Applying idcs.0001_initial... OK(venv) bogon:yinzhengjie_devops yinzhengjie$ (venv) bogon:yinzhengjie_devops yinzhengjie$ (venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py showmigrationsadmin [X] 0001_initial [X] 0002_logentry_remove_auto_addauth [X] 0001_initial [X] 0002_alter_permission_name_max_length [X] 0003_alter_user_email_max_length [X] 0004_alter_user_username_opts [X] 0005_alter_user_last_login_null [X] 0006_require_contenttypes_0002 [X] 0007_alter_validators_add_error_messages [X] 0008_alter_user_username_max_lengthcontenttypes [X] 0001_initial [X] 0002_remove_content_type_nameidcs [X] 0001_initialsessions [X] 0001_initial(venv) bogon:yinzhengjie_devops yinzhengjie$
(venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py migrate idcs                    #同步idcs表!

7>.往数据库插入测试数据

(venv) bogon:yinzhengjie_devops yinzhengjie$ (venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py shellPython 3.6.6 (v3.6.6:4cf1f54eb7, Jun 26 2018, 19:50:54) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwinType "help", "copyright", "credits" or "license" for more information.(InteractiveConsole)>>> >>> from idcs.models import Idc>>> >>> idc = Idc()>>> >>> idc.name = "中国检验检疫科学研究员亦庄机房">>> >>> idc.address = "北京亦庄经济开发区荣华南路11号">>> >>> idc.phone = "010-53897343">>> >>> idc.email = 'yinzhengjie@mail.caiq.org.cn'>>> >>> idc.letter = 'yz'>>> >>> idc.save()>>> >>> >>> idc.id = None>>> >>> >>> idc.name = "中国检验检疫科学研究院高碑店机房">>> >>> idc.address = "高碑店">>> >>> idc.letter = "gbd">>> >>> idc.email = 'jky@mail.caiq.org.cn'>>> >>> idc.save()>>> >>>
添加2条测试数据详细信息步骤

  

 

二.序列化模型

1>.在idcs的apps中创建序列化文件,并编写序列化代码,如下图所示

# !/usr/bin/env python# _*_conding:utf-8_*_# @author :yinzhengjie# blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/from rest_framework import serializersclass IdcSerializer(serializers.Serializer):    """        IDC序列化类    """    id          = serializers.IntegerField()          #注意,我们这里定义变量的类型,这个类型是定义返回给前端的数据类型    name        = serializers.CharField()    address     = serializers.CharField()    phone       = serializers.CharField()    email       = serializers.EmailField()    letter      = serializers.CharField()
具体代码戳这里!

2>.使用自定义的序列化类

(venv) bogon:yinzhengjie_devops yinzhengjie$ (venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py  shellPython 3.6.6 (v3.6.6:4cf1f54eb7, Jun 26 2018, 19:50:54) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwinType "help", "copyright", "credits" or "license" for more information.(InteractiveConsole)>>> >>> >>> from idcs.serializers import IdcSerializer>>> >>> from idcs.models import Idc>>> >>> idc = Idc.objects.get(pk=1)>>> >>> idc
>>> >>> serializer = IdcSerializer(idc)>>> >>> serializerIdcSerializer(
): id = IntegerField() name = CharField() address = CharField() phone = CharField() email = EmailField() letter = CharField()>>> >>> >>> serializer.data            #我们可以获取到数据!{
'id': 1, 'name': '中国检验检疫科学研究员亦庄机房', 'address': '北京亦庄经济开发区荣华南路11号', 'phone': '010-53897343', 'email': 'yinzhengjie@mail.caiq.org.cn', 'letter': 'yz'}>>> >>> >> >>> res = serializer.data>>> >>> type(res)
>>> >>> import json>>> >>> json.dumps(res)              #不推荐使用这种方法直接转换成json格式,而是使用'{"id": 1, "name": "\\u4e2d\\u56fd\\u68c0\\u9a8c\\u68c0\\u75ab\\u79d1\\u5b66\\u7814\\u7a76\\u5458\\u4ea6\\u5e84\\u673a\\u623f", "address": "\\u5317\\u4eac\\u4ea6\\u5e84\\u7ecf\\u6d4e\\u5f00\\u53d1\\u533a\\u8363\\u534e\\u5357\\u8def11\\u53f7", "phone": "010-53897343", "email": "yinzhengjie@mail.caiq.org.cn", "letter": "yz"}'>>> >>>
使用python 自带的模块进行序列化操作(不推荐使用,因为它没有做异常处理操作!)
(venv) bogon:yinzhengjie_devops yinzhengjie$ (venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py  shellPython 3.6.6 (v3.6.6:4cf1f54eb7, Jun 26 2018, 19:50:54) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwinType "help", "copyright", "credits" or "license" for more information.(InteractiveConsole)>>> >>> >>> from idcs.serializers import IdcSerializer>>> >>> from idcs.models import Idc>>> >>> idc = Idc.objects.get(pk=1)>>> >>> idc
>>> >>> serializer = IdcSerializer(idc)>>> >>> serializerIdcSerializer(
): id = IntegerField() name = CharField() address = CharField() phone = CharField() email = EmailField() letter = CharField()>>> >>> >>> serializer.data            #我们可以获取到数据!{
'id': 1, 'name': '中国检验检疫科学研究员亦庄机房', 'address': '北京亦庄经济开发区荣华南路11号', 'phone': '010-53897343', 'email': 'yinzhengjie@mail.caiq.org.cn', 'letter': 'yz'}>>> >>> >> >>> res = serializer.data>>> >>> >>> from rest_framework.renderers import JSONRenderer>>> >>> jr = JSONRenderer()>>> >>> jr.render(serializer.data)b'{"id":1,"name":"\xe4\xb8\xad\xe5\x9b\xbd\xe6\xa3\x80\xe9\xaa\x8c\xe6\xa3\x80\xe7\x96\xab\xe7\xa7\x91\xe5\xad\xa6\xe7\xa0\x94\xe7\xa9\xb6\xe5\x91\x98\xe4\xba\xa6\xe5\xba\x84\xe6\x9c\xba\xe6\x88\xbf","address":"\xe5\x8c\x97\xe4\xba\xac\xe4\xba\xa6\xe5\xba\x84\xe7\xbb\x8f\xe6\xb5\x8e\xe5\xbc\x80\xe5\x8f\x91\xe5\x8c\xba\xe8\x8d\xa3\xe5\x8d\x8e\xe5\x8d\x97\xe8\xb7\xaf11\xe5\x8f\xb7","phone":"010-53897343","email":"yinzhengjie@mail.caiq.org.cn","letter":"yz"}'>>> >>> res = jr.render(serializer.data)>>>
使用rest_framework 自带的模块进行序列化操作(强烈推荐使用,因为它包含了异常处理!) 

 

三.反序列化模型

1>.在idcs的apps中创建序列化文件,并编写序列化代码,如下图所示

# !/usr/bin/env python# _*_conding:utf-8_*_# @author :yinzhengjie# blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/from rest_framework import serializersclass IdcSerializer(serializers.Serializer):    """        IDC序列化类    """    id          = serializers.IntegerField(read_only=True)                          #把当前字段设置为只读属性,如果给改字段穿参数会被忽略!    name        = serializers.CharField(required=True,max_length=32,min_length=2)   #我们要求用户必须对改字段传参数,而且传参数对长度必须在2~32个字符之间!下面字段中对属性同理!    address     = serializers.CharField(required=True,max_length=256)    phone       = serializers.CharField(required=True,max_length=15)    email       = serializers.EmailField(required=True)    letter      = serializers.CharField(required=True,max_length=5)
具体代码戳这里

2>.反序列化操作 

>>> res = jr.render(serializer.data)>>> >>> resb'{"id":1,"name":"\xe4\xb8\xad\xe5\x9b\xbd\xe6\xa3\x80\xe9\xaa\x8c\xe6\xa3\x80\xe7\x96\xab\xe7\xa7\x91\xe5\xad\xa6\xe7\xa0\x94\xe7\xa9\xb6\xe5\x91\x98\xe4\xba\xa6\xe5\xba\x84\xe6\x9c\xba\xe6\x88\xbf","address":"\xe5\x8c\x97\xe4\xba\xac\xe4\xba\xa6\xe5\xba\x84\xe7\xbb\x8f\xe6\xb5\x8e\xe5\xbc\x80\xe5\x8f\x91\xe5\x8c\xba\xe8\x8d\xa3\xe5\x8d\x8e\xe5\x8d\x97\xe8\xb7\xaf11\xe5\x8f\xb7","phone":"010-53897343","email":"yinzhengjie@mail.caiq.org.cn","letter":"yz"}'>>> >>> >>> from django.utils.six import BytesIO>>> >>> stream = BytesIO(res)>>> >>> stream.read()b'{"id":1,"name":"\xe4\xb8\xad\xe5\x9b\xbd\xe6\xa3\x80\xe9\xaa\x8c\xe6\xa3\x80\xe7\x96\xab\xe7\xa7\x91\xe5\xad\xa6\xe7\xa0\x94\xe7\xa9\xb6\xe5\x91\x98\xe4\xba\xa6\xe5\xba\x84\xe6\x9c\xba\xe6\x88\xbf","address":"\xe5\x8c\x97\xe4\xba\xac\xe4\xba\xa6\xe5\xba\x84\xe7\xbb\x8f\xe6\xb5\x8e\xe5\xbc\x80\xe5\x8f\x91\xe5\x8c\xba\xe8\x8d\xa3\xe5\x8d\x8e\xe5\x8d\x97\xe8\xb7\xaf11\xe5\x8f\xb7","phone":"010-53897343","email":"yinzhengjie@mail.caiq.org.cn","letter":"yz"}'>>>
读取流中的数据
>>> jr.render(serializer.data)b'{"id":1,"name":"\xe4\xb8\xad\xe5\x9b\xbd\xe6\xa3\x80\xe9\xaa\x8c\xe6\xa3\x80\xe7\x96\xab\xe7\xa7\x91\xe5\xad\xa6\xe7\xa0\x94\xe7\xa9\xb6\xe5\x91\x98\xe4\xba\xa6\xe5\xba\x84\xe6\x9c\xba\xe6\x88\xbf","address":"\xe5\x8c\x97\xe4\xba\xac\xe4\xba\xa6\xe5\xba\x84\xe7\xbb\x8f\xe6\xb5\x8e\xe5\xbc\x80\xe5\x8f\x91\xe5\x8c\xba\xe8\x8d\xa3\xe5\x8d\x8e\xe5\x8d\x97\xe8\xb7\xaf11\xe5\x8f\xb7","phone":"010-53897343","email":"yinzhengjie@mail.caiq.org.cn","letter":"yz"}'>>> >>> res = jr.render(serializer.data)>>> >>> from django.utils.six import BytesIO>>> >>> stream = BytesIO(res)>>> >>> from rest_framework.parsers import JSONParser>>> >>> jsondata = JSONParser()>>> >>> data = jsondata.parse(stream)>>> >>> data{
'id': 1, 'name': '中国检验检疫科学研究员亦庄机房', 'address': '北京亦庄经济开发区荣华南路11号', 'phone': '010-53897343', 'email': 'yinzhengjie@mail.caiq.org.cn', 'letter': 'yz'}>>> >>>
使用rest_framework模块进行反序列化操作
(venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py  shellPython 3.6.6 (v3.6.6:4cf1f54eb7, Jun 26 2018, 19:50:54) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwinType "help", "copyright", "credits" or "license" for more information.(InteractiveConsole)>>> >>> data = {
'id': 1, 'name': '中国检验检疫科学研究员亦庄机房', 'address': '北京亦庄经济开发区荣华南路11号', 'phone': '010-53897343', 'email': 'yinzhengjie@mail.caiq.org.cn', 'letter': 'yz'}>>> >>> from idcs.serializers import IdcSerializer      >>> >>> serializer = IdcSerializer(data=data)>>> >>> serializerIdcSerializer(data={
'id': 1, 'name': '中国检验检疫科学研究员亦庄机房', 'address': '北京亦庄经济开发区荣华南路11号', 'phone': '010-53897343', 'email': 'yinzhengjie@mail.caiq.org.cn', 'letter': 'yz'}): id = IntegerField(read_only=True) name = CharField(max_length=32, min_length=2, required=True) address = CharField(max_length=256, required=True) phone = CharField(max_length=15, required=True) email = EmailField(required=True) letter = CharField(max_length=5, required=True)>>> >>> >>> serializer.is_valid()          #验证成功返回TrueTrue>>>>>> serializer.validated_data #获取到所有干净的数据,OrderedDict([('name', '中国检验检疫科学研究员亦庄机房'), ('address', '北京亦庄经济开发区荣华南路11号'), ('phone', '010-53897343'), ('email', 'yinzhengjie@mail.caiq.org.cn'), ('letter', 'yz')])>>>
使用自定义类反序列化并严重是否成功案例!

 

四.调用save方法

1>.在idcs的apps中创建序列化文件,并编写序列化代码,如下图所示

# !/usr/bin/env python# _*_conding:utf-8_*_# @author :yinzhengjie# blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/from rest_framework import serializersfrom .models import Idcclass IdcSerializer(serializers.Serializer):    """        IDC序列化类    """    id          = serializers.IntegerField(read_only=True)                          #把当前字段设置为只读属性,如果给改字段穿参数会被忽略!    name        = serializers.CharField(required=True,max_length=32,min_length=2)   #我们要求用户必须对改字段传参数,而且传参数对长度必须在2~32个字符之间!下面字段中对属性同理!    address     = serializers.CharField(required=True,max_length=256)    phone       = serializers.CharField(required=True,max_length=15)    email       = serializers.EmailField(required=True)    letter      = serializers.CharField(required=True,max_length=5)    def create(self, validated_data):        return Idc.objects.create(**validated_data)    def update(self, instance, validated_data):        instance.name = validated_data.get("name",instance.name)        instance.address = validated_data.get("name", instance.address)        instance.phone = validated_data.get("name", instance.phone)        instance.email = validated_data.get("name", instance.email)        instance.save()                     #这里这里的save方法会把数据写入到数据库中!        return instance
具体代码戳这里!

 

2>.调用save方法

(venv) bogon:yinzhengjie_devops yinzhengjie$ python manage.py  shellPython 3.6.6 (v3.6.6:4cf1f54eb7, Jun 26 2018, 19:50:54) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwinType "help", "copyright", "credits" or "license" for more information.(InteractiveConsole)>>> >>> data = {
'name': '中国检验检疫科学研究员亦庄机房', 'address': '北京亦庄经济开发区荣华南路11号', 'phone': '010-53897343', 'email': 'yinzhengjie@mail.caiq.org.cn', 'letter': 'yz'}) File "
", line 1 data = {
'name': '中国检验检疫科学研究员亦庄机房', 'address': '北京亦庄经济开发区荣华南路11号', 'phone': '010-53897343', 'email': 'yinzhengjie@mail.caiq.org.cn', 'letter': 'yz'}) ^SyntaxError: invalid syntax>>> >>> >>> >>> data = {
'name': '中国检验检疫科学研究员亦庄机房', 'address': '北京亦庄经济开发区荣华南路11号', 'phone': '010-53897343', 'email': 'yinzhengjie@mail.caiq.org.cn', 'letter': 'yz'}>>> >>> from idcs.serializers import IdcSerializer>>> >>> serializer = IdcSerializer(data=data)>>> >>> serializer.is_valid()True>>> >>> serializer.save()          #只要调用save方法,默认就会去调用序列化类的create方法,这是因为django它有判断机制,如果你没有给它传递id字段就以为你是创建(create),如果有id字段就以为你要做更新操作(updata)
>>> >>>

>>> from idcs.models import Idc

>>>
>>> Idc.objects.all()                        #验证是否保存成功,我们可以查看此时数据库的数据,很显然由2条数据变为3条数据,说明保存成功啦!
<QuerySet [<Idc: 中国检验检疫科学研究员亦庄机房>, <Idc: 中国检验检疫科学研究院高碑店机房>, <Idc: 中国检验检疫科学研究员亦庄机房>]>
>>>
>>> data = IdcSerializer(Idc.objects.all(),many=True)     #序列化多条数据!
>>>

>>> from rest_framework.renderers import JSONRenderer

>>>
>>> res = JSONRenderer().render(data.data)           #将多条数据取出来~
>>>
>>> res
b'[{"id":1,"name":"\xe4\xb8\xad\xe5\x9b\xbd\xe6\xa3\x80\xe9\xaa\x8c\xe6\xa3\x80\xe7\x96\xab\xe7\xa7\x91\xe5\xad\xa6\xe7\xa0\x94\xe7\xa9\xb6\xe5\x91\x98\xe4\xba\xa6\xe5\xba\x84\xe6\x9c\xba\xe6\x88\xbf","address":"\xe5\x8c\x97\xe4\xba\xac\xe4\xba\xa6\xe5\xba\x84\xe7\xbb\x8f\xe6\xb5\x8e\xe5\xbc\x80\xe5\x8f\x91\xe5\x8c\xba\xe8\x8d\xa3\xe5\x8d\x8e\xe5\x8d\x97\xe8\xb7\xaf11\xe5\x8f\xb7","phone":"010-53897343","email":"yinzhengjie@mail.caiq.org.cn","letter":"yz"},{"id":2,"name":"\xe4\xb8\xad\xe5\x9b\xbd\xe6\xa3\x80\xe9\xaa\x8c\xe6\xa3\x80\xe7\x96\xab\xe7\xa7\x91\xe5\xad\xa6\xe7\xa0\x94\xe7\xa9\xb6\xe9\x99\xa2\xe9\xab\x98\xe7\xa2\x91\xe5\xba\x97\xe6\x9c\xba\xe6\x88\xbf","address":"\xe9\xab\x98\xe7\xa2\x91\xe5\xba\x97","phone":"010-53897343","email":"jky@mail.caiq.org.cn","letter":"gbd"},{"id":3,"name":"\xe4\xb8\xad\xe5\x9b\xbd\xe6\xa3\x80\xe9\xaa\x8c\xe6\xa3\x80\xe7\x96\xab\xe7\xa7\x91\xe5\xad\xa6\xe7\xa0\x94\xe7\xa9\xb6\xe5\x91\x98\xe4\xba\xa6\xe5\xba\x84\xe6\x9c\xba\xe6\x88\xbf","address":"\xe5\x8c\x97\xe4\xba\xac\xe4\xba\xa6\xe5\xba\x84\xe7\xbb\x8f\xe6\xb5\x8e\xe5\xbc\x80\xe5\x8f\x91\xe5\x8c\xba\xe8\x8d\xa3\xe5\x8d\x8e\xe5\x8d\x97\xe8\xb7\xaf11\xe5\x8f\xb7","phone":"010-53897343","email":"yinzhengjie@mail.caiq.org.cn","letter":"yz"}]'
>>>
>>>

 

 

五.总结

1>.序列化

  1.1>.拿到queryset

  1.2>.将queryset给序列化类

     serializer = IdcSerializer(idc)          #序列化一条数据      serializer = IdcSerializer(idc,many=True)    #序列化多条数据

  1.3>.转JSON格式

    JSONRenderer().render(serializer.data)

2>.反序列化

  from rest_framework.parses import JSONParser  data = JSONParser().parse(BytesIO(content))  serializer = IdcSerializer(data=data)  serializer.is_valid()  serializer.save()

 

转载于:https://www.cnblogs.com/yinzhengjie/p/10287458.html

你可能感兴趣的文章
手动删除SVCH0ST.EXE的方法
查看>>
已释放的栈内存
查看>>
Android网络之数据解析----SAX方式解析XML数据
查看>>
Java递归列出所有文件和文件夹
查看>>
[关于SQL]查询成绩都大于80分的学生
查看>>
Delphi(Tuxedo,BDE,ADO)三合一数据集组件HsTxQuery
查看>>
java之ibatis数据缓存
查看>>
“TNS-03505:无法解析名称”问题解决一例
查看>>
JVM源码分析之FinalReference完全解读
查看>>
LeetCode - Longest Common Prefix
查看>>
Android图片处理
查看>>
2015年第21本:万万没想到,用理工科思维理解世界
查看>>
大家谈谈公司里的项目经理角色及职责都是干什么的?
查看>>
剑指offer
查看>>
Velocity魔法堂系列二:VTL语法详解
查看>>
NopCommerce架构分析之八------多语言
查看>>
转:Eclipse自动补全功能轻松设置
查看>>
ES6新特性:Javascript中的Reflect对象
查看>>
hibernate逆向工程生成的实体映射需要修改
查看>>
mysql update操作
查看>>