• Django Restframework


    安装:

    pip install djangorestframework
    

     

    开始使用序列化
    1. 导入模块
    2. 建立一个序列化类
    3. 获取queryset
    4. 开始序列化
    5. 获取序列化后的数据,返回给客户端

    from rest_framework import serializers
    from Reim.models import Users,Dept,Roles,Menus
    #创建序列化类,字段类型不一定要跟models的字段一致
    class UserSerializer(serializers.Serializer):
        id=serializers.CharField(max_length=10,read_only=True)
        name=serializers.CharField(max_length=12)
        username = serializers.CharField(max_length=24)
        pwd = serializers.CharField(max_length=24)
        # roleuser = serializers.CharField(max_length=24)#对多对多字段
        sort = serializers.CharField(max_length=24)
        dept = serializers.CharField(max_length=24)
        # dept_id = serializers.CharField(max_length=24,source="dept.id")
        # dept_name = serializers.CharField(max_length=24,source="dept.name",read_only=True)
    
        roleuser = serializers.SerializerMethodField()#对多对多字段 默认read_only=True
        def get_roleuser(self,obj):
            role_list=list()
            for role in obj.roleuser.all():
                role_list.append({"id":role.id,"name":role.name})
            return role_list
    
        def create(self, validated_data):
            # 关键词替换    用来处理一对多
    
            print(validated_data)
            validated_data["dept_id"]=validated_data.pop("dept")
            print(validated_data)
            usr_obj=Users.objects.create(**validated_data)
            return usr_obj  
    

      

    #!/usr/bin/env python
    # -*- encoding: utf-8 -*-
    '''
    @File    :   serializers.py
    @Contact :   shuishandt@foxmail.com
    @License :   (C)Copyright 2019-2020, Liugroup-NLPR-CASIA
     
    @修改日期          @作者      @版本      @描述
    ------------      -------    --------    -----------
    2019/11/23 9:17   gxrao      1.0         None
    '''
     
    from rest_framework import serializers
    from Reim.models import Users,Dept,Roles,Menus
    #创建序列化类,字段类型不一定要跟models的字段一致
    '''
    class UserSerializer(serializers.Serializer):
        id=serializers.CharField(max_length=10,read_only=True)
        name=serializers.CharField(max_length=12)
        username = serializers.CharField(max_length=24)
        pwd = serializers.CharField(max_length=24)
        # roleuser = serializers.CharField(max_length=24)#对多对多字段
        sort = serializers.CharField(max_length=24)
        dept = serializers.CharField(max_length=24)
        # dept_id = serializers.CharField(max_length=24,source="dept.id")
        # dept_name = serializers.CharField(max_length=24,source="dept.name",read_only=True)
     
        roleuser = serializers.SerializerMethodField()#对多对多字段 默认read_only=True
        def get_roleuser(self,obj):
            role_list=list()
            for role in obj.roleuser.all():
                role_list.append({"id":role.id,"name":role.name})
            return role_list
     
        def create(self, validated_data):
            # 关键词替换    用来处理一对多
     
            print(validated_data)
            validated_data["dept_id"]=validated_data.pop("dept")
            print(validated_data)
            usr_obj=Users.objects.create(**validated_data)
            return usr_obj
    '''
    class UserSerializer(serializers.ModelSerializer):
        class Meta:
            model=Users
            fields="__all__"
            #只写字段
            # extra_kwargs={
            #     'dept':{'write_only':True},
            #     'roleuser': {'write_only': True}
            # }
     
     
        dept_id = serializers.CharField(max_length=24,source="dept.id",read_only=True)
        dept_name = serializers.CharField(max_length=24,source="dept.name",read_only=True)
     
        roleuser = serializers.SerializerMethodField()#对多对多字段 默认read_only=True
        def get_roleuser(self,obj):
            role_list=list()
            for role in obj.roleuser.all():
                role_list.append({"id":role.id,"name":role.name})
            return role_list
    """
        def create(self, validated_data):
            # 关键词替换    用来处理一对多    默认会写好
     
            print(validated_data)
            # validated_data["dept_id"]=validated_data.pop("dept")
            print(validated_data)
            usr_obj=Users.objects.create(**validated_data)
            return usr_obj
     
    """
     
     
     
    from django.shortcuts import render
     
    from rest_framework.views import APIView
    from rest_framework.response import Response
     
    from Reim.models import Users,Dept,Menus,Roles
    from utils.serializers import UserSerializer
    # Create your views here.
     
     
    class UserView(APIView):
        def get(self,request):
            origin_data=Users.objects.all()
     
            serialized_data=UserSerializer(origin_data,many=True)#查询是多行数据,many=True
            return Response(serialized_data.data)
     
     
        def post(self,request):
            get_data=request.data
            verified_data=UserSerializer(data=get_data,many=False)
     
            if verified_data.is_valid():
                user_obj=verified_data.save()
                # 用来处理多对多
                roleusers=Roles.objects.filter(id__in=request.data['roleuser'])
                print(">>>>>>>>>>>>>>>>>>>",roleusers)
                user_obj.roleuser.add(*roleusers)
                return Response(verified_data.data)
            else:
                return Response(verified_data.errors)
     
     
    class UserView(ListModelMixin,CreateModelMixin,GenericAPIView):
        queryset = Users.objects.all()
        serializer_class = UserSerializer
        def get(self,request,*args,**kwargs):
            return self.list(request,*args,**kwargs)
     
        def post(self,request,*args,**kwargs):
            return self.create(request,*args,**kwargs)
     
    11/24
    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework.mixins import (
        ListModelMixin,CreateModelMixin,DestroyModelMixin,UpdateModelMixin,RetrieveModelMixin
    )
    from rest_framework.generics import GenericAPIView
    from rest_framework import generics
    from rest_framework.viewsets import ModelViewSet
     
     
     
     
    class UserFilterView(RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,GenericAPIView):
        queryset = Users.objects.all()
        serializer_class = UserSerializer
     
        def get(self, request, *args, **kwargs):
            return self.retrieve(request, *args, **kwargs)
        def delete(self,request,*args,**kwargs):
            return self.destroy(request,*args,**kwargs)
        def put(self,request,*args,**kwargs):
            return self.update(request,*args,**kwargs)
     
     
    class UserView(generics.ListCreateAPIView):
        queryset = Users.objects.all()
        serializer_class = UserSerializer
     
     
    class UserFilterView(generics.RetrieveUpdateDestroyAPIView):
        queryset = Users.objects.all()
        serializer_class = UserSerializer
    '''
    class UserView(ModelViewSet):
        queryset = Users.objects.all()
        serializer_class = UserSerializer
     
     
      urlpatterns = [
        # re_path(r'v1/user/$', views.UserView.as_view()),
        # re_path(r'v1/user/(?P<pk>d+)/$', views.UserFilterView.as_view()),
        re_path(r'v1/user/$',views.UserView.as_view({
            'get':'list',
            'post':'create',
        })),
        re_path(r'v1/user/(?P<pk>d+)/$', views.UserView.as_view({
            'get':'retrieve',
            'put':'update',
            'delete':'destroy',
        })),
     
    ]
  • 相关阅读:
    spark Kryo serialization failed: Buffer overflow 错误
    spark sql加载avro
    Java读写hdfs上的avro文件
    spark使用scala读取Avro数据(转)
    spark遇到的错误1-内存不足
    php数据表
    php商品详情页的修改
    php ecshop前台修改
    php的文件
    php文件的学习
  • 原文地址:https://www.cnblogs.com/Mengchangxin/p/11830407.html
Copyright © 2020-2023  润新知