drf序列化

序列化

序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。
序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例

如何使用

  1. 首先要有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
  2. 然后在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') # 序列化字段
  3. 然后在你的视图文件中写上
    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)
  4. 写完之后,回到项目下,在你的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')),
    ]
  5. 启动系统,输入API(http://127.0.0.1:8000/snippet/)就可以看到效果了
原文地址:https://www.cnblogs.com/ArkhamKnight/p/9448525.html