序列化
序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。 序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例
如何使用
- 首先要有models文件,并在里面写上内容
class UserInfo(models.Model): name = models.CharField(max_length=64,verbose_name="姓名") address = models.CharField(max_length=255,verbose_name="地址") def __str__(self): return self.name
- 然后在APP里面单独创建一个用来序列化的文件
xuliehuaxuliehua_appmy_xuliehua.py
from rest_framework import serializers # 引入rest自带的序列化器
from xuliehua_app.models import UserInfo # 引入你要序列化的数据库字段
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
"""
"model"不要写错,否则程序会报错,如下:
AssertionError: Class SnippetSerializer missing "Meta.model" attribute
"""
model = UserInfo
fields = ('name','address') # 序列化字段 - 然后在你的视图文件中写上
from django.shortcuts import render from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt from rest_framework.renderers import JSONRenderer from rest_framework.parsers import JSONParser from xuliehua_app.models import UserInfo from xuliehua_app.my_xuliehua import SnippetSerializer # Create your views here. # 自定义一个HttpResponse子类用来返回任何形式的数据,通用方便 class JSONResponse(HttpResponse): """ An HttpResponse that renders its content into JSON. """ def __init__(self, data, **kwargs): content = JSONRenderer().render(data) kwargs['content_type'] = 'application/json' super(JSONResponse, self).__init__(content, **kwargs) @csrf_exempt # 跳过这个函数的验证 def snippet_list(request): """ 列出所有的实例,或创建一个新的实例. """ if request.method == 'GET': snippets = UserInfo.objects.all() print(snippets)
# 选择序列化类,如果是多个,many=True,如果是单个,many=False serializer = SnippetSerializer(snippets, many=True) print("+++++++++++",serializer.data) return JSONResponse(serializer.data) elif request.method == 'POST': data = JSONParser().parse(request) serializer = SnippetSerializer(data=data) if serializer.is_valid(): serializer.save() return JSONResponse(serializer.data, status=201) return JSONResponse(serializer.errors, status=400) -
写完之后,回到项目下,在你的APP中新建一个urls.py的文件(也可以不用),然后里面写上
from django.urls import path from xuliehua_app import views urlpatterns = [ path('snippet/', views.snippet_list), ]
接下来在你项目的根目录下的urls文件写上
from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('', include('xuliehua_app.urls')), ]
- 启动系统,输入API(http://127.0.0.1:8000/snippet/)就可以看到效果了