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这个类


]
 
 

 

posted @ 2023-07-04 23:36  苍茫大海  阅读(40)  评论(0)    收藏  举报