django restframework实现增删改查
#安装restframework包
pip install djangorestframework
restframework相当于一个app必须在setting文件中配置

1.建立相应的模型类
from datetime import datetime###导入时间模块
class Book(models.Model): ###注意类名首字母要大写
name=models.CharField(max_length=100,unique=True) ###字符串类型必须要设置最大长度 unique=True字段唯一
phone = models.IntegerField(blank=True,null=True) blank/null=True, 允许为空,null与数据库有关,blank与表单验证有关
create_at = models.DateTimeField(default=datetime,null=True,blank=True)
class Meta:
db_table = "book" # 更改表名
2.视图层
from rest_framework.response import Response##导入响应,与django自带有区别,返回json数据
from rest_framework.views import APIView
from datetime import datetime
from rest_framework import serializers#导入序列化器
from .models import Book#引入模型类
# Create your views here.
##下面这段代码是序列化器,将数据转化成json和解json
class BookSerializer(serializers.ModelSerializer):
create_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
class Meta:
model=Book #你想要序列化的模型名称
fields='__all__'##all对所有字段进行序列化
######
class Index(APIView):#继承APIVIEW
def get(self,request):###get请求获取所有数据
queryset= Book.objects.all()#所有数据
ob=BookSerializer(instance=queryset,many=True)#序列化转json,many=TRUE,对所有数据进行处理
return Response(ob.data)##.data获取所有数据
def post(self, request):#post请求 实现添加操作
oc = Book.objects.all()
serializer = BookSerializer(data=request.data)#将接收到的数据送到序列化器
time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")#对时间进行处理转化成年-月-日形式
try:
serializer.is_valid(raise_exception=True)
oc = serializer.validated_data.update({"create_at":time})#反序列化是json数据到字典类型的转化过程,由于时间time我们在添加的时候可以不用添加时间让时间进行自动更新,这里向反序列化的数据添加时间字段
stu = Book.objects.create(**serializer.validated_data)##执行添加操作
ser = BookSerializer(instance=stu, many=False)#执行反序列化
return Response(ser.data)#成功返回添加的数据
except:
return Response(serializer.errors)#失败返回错误
#第二个类实现查看单个数据,删除更新数据
class IndexView(APIView):
def get(self,request,id):###要携带id想要删除那个把id传过来就行
ON=Book.objects.get(pk=id)#接收id
serializer = BookSerializer(instance=ON,many=False)
return Response(serializer.data)
def delete(self, request,id):#删除操作
ON=Book.objects.get(pk=id).delete()
return Response()
def put(self,request,id):##put更新操作
instance = Book.objects.get(pk=id)
bs = BookSerializer(instance=instance, data=request.data)
if bs.is_valid():
# bs.save()
stu=Book.objects.filter(pk=id).update(**bs.validated_data)
return Response(request.data)
else:
return Response(bs.errors)
3.路由urls#与视图层对应
from django.contrib import admin
from django.urls import path,re_path
from .views import Index,IndexView#引入视图层的两个类
urlpatterns = [
path('index/', Index.as_view()),##这个路由走视图层Index这个类,,发get请求就走get那个函数,发post请求就走post那个函数
re_path('index/(\d+)', IndexView.as_view()),#re_pach意思是与上面那个pach有联系,走IndexView这个类
]

浙公网安备 33010602011771号