rest
rest下的url
url唯一代表资源,http请求方式来区分用户行为
url的设计规范
GET: 127.0.0.1:9001/books/ # 获取所有数据
GET: 127.0.0.1:9001/books/{id} # 获取单条数据
POST: 127.0.0.1:9001/books/ # 增加数据
DELETE: 127.0.0.1:9001/books/{id} # 删除数据
PUT: 127.0.0.1:9001/books/{id} # 修改数据
数据响应规范
GET: 127.0.0.1:9001/books/ # 返回[{}, {}, {}]
GET: 127.0.0.1:9001/books/{id} # {} 单条数据
POST: 127.0.0.1:9001/books/ # {} 添加成功的数据
DELETE: 127.0.0.1:9001/books/{id} # “” 返回空
PUT: 127.0.0.1:9001/books/{id} # {} 更新后完整的数据
错误处理
{ “error”: “message” }
解析器组件
- 解析器组件是用来解析用户请求的数据的(application/json), content-type
- 必须继承APIView
- request.data触发解析
APIView的使用
pip install djangorestframework
1 | from rest_framework.views import APIView |
序列化组件
Django自带的serializer
1 | from django.serializers import serialize # 引入 |
DRF的序列化组件
接口设计
1 | from rest_framework import serializers #引入 |
创建一个序列化类
1 | class BookSerializer(serializers.ModelSerializer): |
开始序列化
get接口(查询多条数据) & post接口
1 | class BookView(APIView): |
get(查询单条数据) & put接口 & delete接口
1 | class BookFilterView(APIView): |
缺点:
serializers.Serializer无法插入数据,只能自己实现create字段太多,不能自动序列化
接口设计优化
使用视图组件的mixin进行接口逻辑优化
导入mixin
1 | from rest_framework.mixinx import ( |
定义序列化类
1 | Class BookSerializer(serializers.ModelSerializer): |
因为使用模块化编程,建议将定义的序列化类放在单独的模块中,再在view.py中导入
1 | from .app_serializers import BookSerializer |
定义视图类
1 | class BookView(ListModelMixin, CreateModelMixin, GenericAPIView): |
注意:
查询单挑数据的url需要给查询的id进行正则分组
re_path(r’books/(?P
\d+)/$, views.BookFilterView.as_view())
使用视图组件的view进行接口逻辑优化
导入模块
1 | from rest_framework import generics |
视图类
1 | class BookView(generics.ListCreateAPIView) |
使用视图组件的viewset进行接口逻辑优化
导入模块
1 | from rest_framework.viewsets import ModelViewSet |
设计url
1 | re_path(r'books/$, views.BookView.as_view({ |
设计视图类
1 | class BookView(ModelViewSet): |