zoukankan      html  css  js  c++  java
  • 初撩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简单,常用!!!

  • 相关阅读:
    HDU2586 How far away?(tarjan的LCA)
    You Raise Me Up
    POJ2891 Strange Way to Express Integers(中国剩余定理)
    POJ2142 The Balance(扩展欧几里得)
    HDU 1166模仿大牛写的线段树
    NetWord Dinic
    HDU 1754 线段树裸题
    hdu1394 Minimum Inversion Number
    hdu2795 Billboard
    【完全版】线段树
  • 原文地址:https://www.cnblogs.com/Vera-y/p/12087815.html
Copyright © 2011-2022 走看看