1.0认识 GenericAPIview类
1.0 定义数据模型
2.0 定义序列化器
3.0 修改settings.py配置文件
4.0 同步数据库
5.0 编写视图
6.0 编写路由
7.0 插入数据
8.0 验证数据
1.1 定义数据模型
1.2 定义序列化器
1.3 修改settings.py配置文件
1.4 同步数据库
python3 manage.py makemigrations #同步数据
python3 manage.py migrate #迁移数据
1.5 编写视图
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.status import HTTP_404_NOT_FOUND
from myapp.serializers import UserSerializer
from myapp.models import User
class UserView(APIView):
def get(self, request):
#print(request.query_params)
queryset = User.objects.all() #调用序列化器将queryset转化成json
user_ser =UserSerializer(queryset,many=True) #序列化器多条数据指定many=True
return Response(user_ser.data)
def post(self, request):
print(request.data)
data ={
'result': 'post'}
return Response(data)
def put(self, request):
print(request.data)
data ={
'result': 'put'}
return Response(data)
def delete(self, request):
print(request.data)
data ={
'result': 'delete'}
return Response(data)
1.6 编写路由
1.7 插入数据
1.8 验证(APIView请求方式)
2.0 改写GenericAPIView方法
2.1 get请求获取所有数据
能够成功获取数据,并且看到定义的code和msg
2.2 get请求获取单条数据
配置app路由
新增视图判断
验证
3.0认识 ViewSet
GenericAPIview有一个问题获取所有用户和单个用户数据需要定义两个视图和URL路由,使用ViewSet可以很好解决这个问题,并且实现路由自动映射。
Viewset视图集不再实现get(),post()等方法,而是实现以下请求方法动作:
list():获取所有数据
retrieve(): 获取单个数据
create():创建数据
update():更新数据
destory();删除数据
3.1 改写 路由
from django.urls import path, re_path
from myapp import views
urlpatterns = [
re_path('^user/$', views.UserView.as_view({
'get':'list','post':'create'})),#获取所有数据,创建
re_path('^user/(?P<id>\d+)/$', views.UserView.as_view({
'get':'retrieve','put':'update','delete':'destory'})), #获取单条数据,更新,删除/user/id
]
3.2 改写视图
from rest_framework.response import Response
from rest_framework.viewsets import ViewSet
from myapp.serializers import UserSerializer
from myapp.models import User
class UserView(ViewSet):
lookup_field = 'id' #默认值pk 改成id
def retrieve(self, request, id=None): #查询单个数据
obj = User.objects.get(id=id)
user_ser = UserSerializer(obj)
res ={
'code':200,'msg':'成功','data':user_ser.data}
return Response(res)
def list(self, request): #查询所有数据
queryset = User.objects.all()
user_ser = UserSerializer(queryset, many=True)
res = {
'code': 200, 'msg': '成功', 'data': user_ser.data}
return Response(res)
def create(self, request): #创建用户
user_ser =UserSerializer(data=request.data)
user_ser.is_valid(raise_exception=True)
user_ser.save()
res = {
'code':200,'msg':'创建用户成功'}
return Response(res)
def update(self, request, id=None): #更新用户
obj = User.objects.get(id=id)
user_ser = UserSerializer(instance=obj, data=request.data)
if user_ser.is_valid():
user_ser.save()
res = {
'code': 200, 'msg': '更新用户成功'}
else:
res = {
'code': 500, 'msg': '更新用户失败,数据格式不正确'}
return Response(res)
def destory(self, request, id=None): #删除用户
obj = User.objects.get(id=id)
obj.delete()
res = {
'code': 200, 'msg': '删除用户成功!'}
return Response(res)
3.3 验证
最终实现增删改查所有数据
3.4 使用自动路由实现注册api(urls.py)
http://127.0.0.1:8000/myapp/api/
实现路由的自动注册
4 ModelviewSet类
ModelviewSet继承GenericAPlview和五个扩展类,封装好各种请求更加完善业务逻辑,基本不用自己编写,只需要指定serializer_class和queryset,就可以直接进行增删改查。
views.py配置如图所示
from rest_framework.response import Response
from rest_framework.viewsets import ViewSet,ModelViewSet
from myapp.serializers import UserSerializer
from myapp.models import User
class UserView(ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
urls.py配置自动路由即可实现增删改查