sdu项目实训2-3 DRF中APIView的使用

APIView继承自View


一、APIView之request

使用APIView可以通过request获取参数

1.类视图

from rest_framework.views import APIView

class TestAPIView(APIView):

    def get(self, request):

        # 1,获取APIVIew中的get请求参数
        print(request.query_params)

        return HttpResponse("get")

    def post(self, request):
        # 2,获取APIView中的post的参数
        print(request.data)

        return HttpResponse("post")
        

2.配置路由

  • 主路由
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',views.index_view),
    
    path('',include('agriculture.urls')),
]
  • 子路由
from .views import ShowCropaView, TestAPIView

urlpatterns = [
    path('test', TestAPIView.as_view()),
]

3.使用Postman进行测试

  • 测试get请求
    在这里插入图片描述
    打印结果:
<QueryDict: {'name': ['张三'], 'age': ['20']}>
  • 测试post请求
    在这里插入图片描述
    输出结果:
{'city': '济南', 'type': '小麦'}

在这里插入图片描述
输出结果:

<QueryDict: {'name': ['张三'], 'age': ['20']}>

二、APIView之response

可以使用response响应各种数据和状态

好处:

  • 1,使用一个类, 就可以替代以前View中的各种类型的Response(HttpResponse,JsonResponse….)
  • 2, 可以配合状态码status使用

1.类视图

from rest_framework.views import APIView
from django import http
from rest_framework.response import Response
from rest_framework import status

#定义类,集成APIView
class TestAPIView(APIView):

    def get(self, request):

        ...

        return Response({'name':'张三','age':20},status=status.HTTP_200_OK)
        

2.使用Postman进行测试

在这里插入图片描述

三、APIView实现列表视图

可以使用序列化器和APIView对列表视图进行改写

1.子路由

from .views import ShowCropaView, TestAPIView, ShowCropaAPIView, CreateUserAPIView

urlpatterns = [

    path('test', TestAPIView.as_view()),
    path('cropsa',ShowCropaAPIView.as_view()),
    path('newuser',CreateUserAPIView.as_view())
]

2.类视图

class ShowCropaAPIView(APIView):

    def get(self,request):
        # 1,查询所有的数据
        crop_infos = City_cropinfo.objects.filter(city=request.query_params['city'], crop_type=request.query_params['type'])

        # 2,创建序列化器对象,many=True 表示传入的是列表对象(多个数据)
        serializer = City_cropinfoModelSerializer(instance=crop_infos, many=True)

        # 3,返回响应
        return Response(serializer.data)


class CreateUserAPIView(APIView):

    def post(self,request):
        # 1,获取参数
        data_dict = request.data

        # 2,创建序列化器对象
        serializer = UserModelSerializer(data=data_dict)

        # 3,校验,入库
        serializer.is_valid(raise_exception=True)
        serializer.save()

        # 4,返回响应
        return Response(serializer.data, status=status.HTTP_201_CREATED)

3.序列化器

class UserModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = User  #参考模型类生成字段
        fields = '__all__'  #生成所有字段

class City_cropinfoModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = City_cropinfo  #参考模型类生成字段
        fields = '__all__'  #生成所有字段

4.使用Postman进行测试

  • 查询城市农作物产量信息
    在这里插入图片描述
  • 创建新用户
    在这里插入图片描述
    在这里插入图片描述

总结

APIView比起普通的View更加方便快捷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值