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更加方便快捷