django restframework

本文详细介绍了Django中POST请求的CSRF认证豁免与保护方式,演示了如何使用Django内置序列化器进行数据序列化及反序列化,包括创建、更新对象和分页显示等高级操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.POST请求免于csrf认证

    from django.views.decorators.csrf  import csrf_exempt

    @csrf_exempt
    写入被修饰的函数

2.POST请求仅要求此函数要通过csrf认证

    from django.views.decorators.csrf  import csrf_protect
    @csrf_protect

仅限 FBV模式

3.jango序列化

      import json
      from django.core import serializers
      from django.http import JsonResponse
      
      goods = Goods.objects.all()
      json_data = serializers.serialize('json', goods)
      json_data = json.loads(json_data)
      return JsonResponse(json_data, safe=False)
      返回序列化后的结果

4.使用序列化实现创建对象
serializers.py

       class GoodsSerializer(serializers.Serializer):
           name = serializers.CharField(required=True, max_length=100)
           click_num = serializers.IntegerField(default=0)

           post方法创建新对象    同时也有 update 函数
           def create(self, validated_data):
               return Goods.objects.create(**validated_data)

views.py

     class GoodsListViews(APIView):

         实现查看操作
         def get(self, request, format=None):
             goods = Goods.objects.all()[:10]
             goods_serializer = GoodsSerializer(goods, many=True)
             return Response(goods_serializer.data)
             
         实现添加操作
         def post(self, request, format=None):
             serializer = GoodsSerializer(data=request.data)
             if serializer.is_valid():
                 serializer.save()
                 return Response(serializer.data, status=status.HTTP_201_CREATED)
             return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

5.简化查询

      class GoodsSerializer(serializers.ModelSerializer):
          class Meta:
              model = Goods
              field = ('name', 'add_time')  
              要返回的字段
              
              field = '__all__'    
              全部字段

6.分页显示 (url指向 GoodsListViews.as_view())
views.py

       class GoodsPagination(PageNumberPagination):

           page_size = 10
           page_size_query_param = 'page_size'
           page_query_param = "p"
           max_page_size = 100


       class GoodsListViews(generics.ListAPIView):

           queryset = Goods.objects.all()
           serializer_class = GoodsSerializer
           pagination_class = GoodsPagination

serializers.py

      class CategorySerializer(serializers.ModelSerializer):
          class Meta:
              model = GoodsCategory
              fields = '__all__'


      class GoodsSerializer(serializers.ModelSerializer):
          category = CategorySerializer()

          class Meta:
              model = Goods
              field = '__all__'    

6.对象逆序排列

                  class  Post(models.Model):
                      pass
                      class Meta:
                          ordering=['-id']
                          # 根据 id 逆排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值