1.APIView的使用:
1.1 在 user/urls.py 中添加路由
from django.contrib import admin
from django.urls import path
from bookapp.views import *
urlpatterns = [
path('admin/', admin.site.urls),
path('book/cate/', CateView.as_view()),
]
1.2创建user/serializers.py写序列化器
from rest_framework import serializers
from .models import *
class Cateser(serializers.ModelSerializer):
class Meta:
model = Cate #数据库表名
fields = "__all__" #序列化所有字段
#depth = 1 # 外键序列化 添加了这个关联的外键都会查询出来
class Bookser(serializers.ModelSerializer):
class Meta:
model = Book
fields = "__all__"
1.3 在 user/views.py 中添加视图函数
from .models import *
from rest_framework.views import APIView
from rest_framework.response import Response
from .sers import *
class CateView(APIView):
# get是查询数据 post是添加数据
def get(self, request):
cate = Cate.objects.all() # 查询所有数据 他是一个查询集
ser = Cateser(cate, many=True) # 因为查询的是一个查询集 所以需要些many=True
return Response(ser.data)
def post(self, request):
ser = Cateser(data=request.data)
resp = {}
if ser.is_valid():
ser.save()
resp['code'] = 200
resp['code'] = ser.data
else:
print(ser.errors)
resp['code'] = 400
resp['code'] = ser.errors
return Response(resp)
def put(self, request): # put 修改数据 完全修改数据 patch 部分修改数据
# 想要修改的话 需要知道要修改谁 还要知道最新的数据 data=xxx 传递的新的值
id = request.GET.get('id')
# first是从查询集中 获取一个model对象
cate = Cate.objects.filter(id=id).first()
# 传递 两个参数 参数1是要修改的数据 参数2是要赋予的新值
ser = Cateser(instance=cate, data=request.data)
resp = {}
if ser.is_valid():
ser.save()
resp['code'] = 200
else:
resp['code'] = 400
return Response(resp)
def delete(self, request):
# 需要知道删除谁
id = request.GET.get('id')
resp = {}
try:
Cate.objects.filter(id=id).delete()
resp['code'] = 200
except Exception as e:
print(e)
resp['code'] = 400
return Response(resp)