用APIview实现的功能
""" GET /books/ 提供所有记录 POST /books/ 新增一条记录 GET /books/<pk>/ 提供指定id的记录 PUT /books/<pk>/ 修改指定id的记录 DELETE /books/<pk>/ 删除指定id的记录 APIView 序列化器 """
路由
url(r'^books/$', views.BookListAPIView.as_view()),
url(r'^books/(?P<pk>\d+)/$', views.BookDetailAPIView.as_view()),
model
class BookInfo(models.Model):
btitle = models.CharField(max_length=20, verbose_name='名称')
bpub_date = models.DateField(verbose_name='发布日期')
bread = models.IntegerField(default=0, verbose_name='阅读量')
bcomment = models.IntegerField(default=0, verbose_name='评论量')
is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
image = models.ImageField(verbose_name='图书', null=True, upload_to='book')
class Meta:
db_table = 'tb_books'
verbose_name = '图书'
verbose_name_plural = verbose_name
def __str__(self):
"""定义每个数据对象的显示信息"""
return self.btitle
def bpub_date_format(self):
return self.bpub_date.strftime('%Y-%m-%d')
bpub_date_format.short_description = '发布日期'
bpub_date_format.admin_order_field = 'bpub_date'
class ***fo(models.Model):
GENDER_CHOICES = (
(0, 'female'),
(1, 'male')
)
hname = models.CharField(max_length=20, verbose_name='名称')
hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别')
hcomment = models.CharField(max_length=200, null=True, verbose_name='描述信息')
hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书')
is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
class Meta:
db_table = 'tb_heros'
verbose_name = '英雄'
verbose_name_plural = verbose_name
def __str__(self):
return self.hname
def read(self):
return self.hbook.bread
read.short_description = '阅读量'
read.admin_order_field = 'hbook__bread'
序列化文件
from django.contrib.auth.models import User
from rest_framework import serializers
from .models import BookInfo
class BookInfoModelSerializer(serializers.ModelSerializer):
class Meta:
model = BookInfo
fields = '__all__'
view视图
查询全部数据
"""以下是继承APIView的视图"""
class BookListAPIView(APIView):
"""列表视图"""
def get(self, request):
"""查询所有"""
qs = BookInfo.objects.all()
serializer = BookInfoModelSerializer(instance=qs, many=True)
print(serializer.data)
return Response(serializer.data)
新增数据
"""以下是继承APIView的视图"""
class BookListAPIView(APIView):
def post(self, request):
"""新增"""
data = request.data
serializer = BookInfoModelSerializer(data=data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
根据pk查询一条数据
class BookDetailAPIView(APIView):
"""详情视图"""
def get(self, request, pk):
try:
book = BookInfo.objects.get(id=pk)
except BookInfo.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
serializer = BookInfoModelSerializer(instance=book)
return Response(serializer.data)
根据pk进行修改一条数据
class BookDetailAPIView(APIView):
def put(self, request, pk):
try:
book = BookInfo.objects.get(id=pk)
except BookInfo.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
serializer = BookInfoModelSerializer(instance=book, data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)
删除一条数据
def delete(self, request, pk):
try:
book = BookInfo.objects.get(id=pk)
except BookInfo.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
book.delete()
return Response(status=status.HTTP_204_NO_CONTENT)