zoukankan      html  css  js  c++  java
  • 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/)就可以看到效果了
  • 相关阅读:
    vue中打印 使用mapState映射 vuex state 中的数据 结果显示 [__ob__: Observer]的问题
    css里面鼠标的形状-----》easyui哪点事
    多张表进行关联查询---->删除某个数据的时候出现还有子记录的提示
    MyEclipse迁移过程中Tomcat版本不一致的解决办法
    Easyui里面动态设置输入框的可见性
    PL/SQL那点事-->修改Oracle数据库里面的字段长度
    PL/SQL那点事-->SqlSession operation; SQL []; ORA-01722: 无效数字
    PL/SQL数据开发那点事
    PL/SQL数据库开发那点事
    java类型与jdbc类型对应表
  • 原文地址:https://www.cnblogs.com/ArkhamKnight/p/9448525.html
Copyright © 2011-2022 走看看