• 初撩Django-RESTful-rest_framework序列化(将模型序列化为JSON)


    官方网站:

    https://www.django-rest-framework.org/

    翻译网站:
    https://q1mi.github.io/Django-REST-framework-documentation/

    RESTful 在Django框架中实现的插件:rest_framework

    在Django框架中RESTful主要表现在序列化的实现、视图函数的实现和urls路由的实现,在这里我们可能会完全推翻Django基础知识中实现代码的方式。

    1. 安装:

    pip install djangorestframework

    2. 在Django中的配置:

      1. settings.py中INSTALLED_APPS添加['rest-framework',]

      2.在应用中创建Serializers.py

    3.Serializers中三个基础的序列化类:

    • serializers.HyperLinkedModelSerializer:序列化模型,并添加超链接
    • serializers.Serializer:手动添加序列化
    • serializers.ModelSerializer:自动序列化,只需要把模型导入,属性many=True 表示可序列化多个模型

    3.1 。serializers.HyperLinkedModelSerializer:

    # models.py
    from django.db import models
    
    class Books(models.Model):
        b_name = models.CharField(max_length=30)
        b_price = models.FloatField(default=1)
    
        def to_dict(self):    
            return {'id':self.id, 'b_name':self.b_name, 'b_price':self.b_price}
    models.py
    # urls.py
    from django.urls import include, path
    from rest_framework import routers
    
    from REST import views
    
    
    router = routers.DefaultRouter()
    router.register(r'Books', views.BookViewSet)
    
    urlpatterns = [
        path('', include(router.urls)),
    ]
    urls.py
    from django.shortcuts import render
    
    # Create your views here.
    from rest_framework import viewsets
    
    from REST.models import Books
    from REST.serializers import BookSerializer
    
    
    
    class BookViewSet(viewsets.ModelViewSet):
        queryset = Books.objects.all()
        serializer_class = BookSerializer
    views.py
    # serializers.py
    from rest_framework import serializers
    
    from REST.models import Books
    
    
    class BookSerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model = Books
            fields = ('url', 'b_name','b_price')
    serializers.py

    models.py : 建立模型

    urls.py :建立路由

    views.py :建立序列化类视图

    serializers.py :序列化

    3.2 。serializers.Serializer

    class Person(models.Model):
        p_name = models.CharField(max_length=32)
        p_age = models.IntegerField(default=1)
        p_sex = models.BooleanField(default=False)
    
        class Meta:
            db_table = 'Person'
    models.py
    from django.urls import  path
    from REST import views
    
    
    urlpatterns = [
        path('person', views.PersonView.as_view()),
    ]
    urls.py
    class PersonView(View):
        def post(self,request):
            p_name = request.POST.get('p_name')
            p_age = request.POST.get('p_age')
            print('*********',p_name)
    
            person = Person()
            person.p_name = p_name
            person.p_age = p_age
            print('***##***', p_name)
            person.save()
    
            person_serializer = PersonSerializer(person)
            return JsonResponse(person_serializer.data)
    views.py
    class PersonSerializer(serializers.Serializer):
        # 和模型中的字段对应
        id = serializers.IntegerField(read_only=True)  # 表示只读
        p_name = serializers.CharField(max_length=32)
        p_age = serializers.IntegerField(default=1)
        p_sex = serializers.BooleanField(default=False)
    
        #  进行对象的创建
        def create(self,validated_data):
            return Person.objects.create(**validated_data)
    
        # 对象的更新
        def update(self, instance, validated_data):
            # 分别拿到对象,并对对象进行更新
            instance.p_name = validated_data.get('p_name',instance.p_name)
            print('@@@@@@')
            instance.p_age = validated_data.get('p_age', instance.p_age)
            instance.p_sex = validated_data.get('p_sex', instance.p_sex)
            instance.save()
    
            return instance
    serializers.py

    3.3 。serializers.ModelSerializer

    class StudentSerializer(serializers.ModelSerializer):
        class Meta:
            model = Students
            fields = ('s_name', 's_age')
    serializers.py

    (省略了models.py,urls.py,views.py,和serializers.Serializer类似)ModelSerializer简单,常用!!!

  • 相关阅读:
    Raid5 Raid10性能测试
    MetaData_model_package
    UBoot命令说明
    ubuntu 12.10 配置一个Apache+MySQL+phpMyAdmin环境
    SSH服务器
    VC2008使用boost库方式
    嵌入式Web服务器BOA移植
    利用matlab将数据写入指定列的方法
    error LNK2019: 无法解析的外部符号,解决办法
    在CYGWIN下编译和运行软件Bundler ,以及PMVS,CMVS的编译与使用
  • 原文地址:https://www.cnblogs.com/Vera-y/p/12087815.html
Copyright © 2020-2023  润新知