• Django rest framework 小结


    1. settings.py 文件中配置rest_framework
      INSTALLED_APPS = ('rest_framework',)
      
    2. 建立序列化和反序列化模型类
      from goods.models import Goods
      from rest_framework import serializers
      class TypeSerializers(serializers.ModelSerializer):
          class Meta:
              model = Types
              fields = '__all__'
      class GoodsSerializers(serializers.ModelSerializer):
          # 外键
          #types = serializers.CharField(source="goods_type")
          #types = serializers.PrimaryKeyRelatedField(queryset=Types.objects.all(), label='类型')
           types = TypeSerializers(read_only=True)
          #获取模型中的choice值
          types_name = serializers.CharField(source="get_goods_type_display")
          # 显示自定义字段
          types_difund = serializers.SerializerMethodField()
          class Meta:
              model = Goods
              #fields = "__all__" 
              fields = ['id', 'good_name', 'price', 'types', 'types_name', 'types_difund']
          
          def get_types(self, row):
              type_list = row.type_id.all()
              ret = []
              for item in type_list:
                  ret.append({'type_name': item.name})
              return ret
    3. 建立视图函数(CBV方式)
      from .serializer import GoodsSerializers
      from rest_framework.viewsets import generics
      from rest_framework import permissions # 设置访问权限 class GoodListView(generics.ListAPIView):
      queryset = Goods.objects.all()
         serializer_class = GoodsSerializers
      permission_classes = [permissions.IsAuthenticatedOrReadOnly, permissions.IsAuthenticated]
      # 自定义查询字段
      lookup_field = 'time' # 按该参数条件查询数据,默认是按主键
      def get(self, request, time):
      goods = self.get_object()
      serializer = self.get_serializer(goods)
      return Response(data = serializer.data)

          lookup_url_kwarg = 'id' #URL中的参数
    4. 建立视图函数(FBV方式)
      from django.http import JsonResponse
      from rest_framework.renderers import JSONRenderer
      from rest_framework.parsers import JSONParser
      from .models import Goods
      from .serializers import GoodsSerializer
      
      def good_list(request):
          if request.method == "GET":
              goods  = Goods.objects.all()
              ser = GoodsSerializer(goods, many=True)
              return JsonResponse(ser.data)
          elif request.method == "POST":
              data = JSONParser().parse(request) #将请求参数格式化
              ser = GoodsSerializer(data=data)
              if ser.is_valid(): # 验证数据
                  ser.save() #保存数据
                  return JsonResponse(ser.data, status=201)
              return JsonResponse(ser.errors, status=400)
          elif request.method == "PUT":
              data = JSONParser().parse(request)
              ser = GoodsSerializer(Goods.objects.get(id=request.Get.get('id')), data=data)
              if ser.is_valid():
                  ser.save()
                  return JsonResponse(ser.data)
              return JsonResponse(ser.errors, status=400)
          elif request.method == "DELETE":
              Goods.objects.get(id=request.Get.get('id')).delete()
              return HttpResponse(status=204)
    5. 建立链接
      urlpatterns = [
        #path('goods/', GoodListView.as_view(), name='glist'),
      path('goods/<int:id>', GoodListView.as_view(), name='glist'),
      path('api-auth/', include('rest_framework.urls')), ]
  • 相关阅读:
    Activemq安装
    Python小代码_12_生成前 n 行杨辉三角
    Python小代码_11_生成小于 n 的裴波那契数列
    Python小代码_10_判断是否为素数
    Python小代码_9_求水仙花数
    Python小代码_8_今天是今年的第几天
    Python小代码_7_字符串的字符次数统计
    Python小代码_6_列表推导式求 100 以内的所有素数
    Python小代码_5_二维矩阵转置
    关于列表元素的删除
  • 原文地址:https://www.cnblogs.com/netalen/p/11302782.html
Copyright © 2020-2023  润新知