|
|
|
from article.models import Article
|
|
|
|
from article.serializers import ArticleListSerializer, ArticleDetailSerializer
|
|
|
|
from rest_framework.decorators import api_view
|
|
|
|
from rest_framework.response import Response
|
|
|
|
from rest_framework.views import APIView
|
|
|
|
from django.http import Http404
|
|
|
|
from rest_framework import mixins
|
|
|
|
from rest_framework import generics
|
|
|
|
from rest_framework import status
|
|
|
|
|
|
|
|
|
|
|
|
@api_view(['GET', 'POST'])
|
|
|
|
def article_list(request):
|
|
|
|
# 获取所有文章列表
|
|
|
|
if request.method == 'GET':
|
|
|
|
articles = Article.objects.all()
|
|
|
|
serializer = ArticleListSerializer(articles, many=True)
|
|
|
|
return Response(serializer.data)
|
|
|
|
# 创建新的文章
|
|
|
|
elif request.method == 'POST':
|
|
|
|
serializer = ArticleListSerializer(data=request.data)
|
|
|
|
if serializer.is_valid():
|
|
|
|
serializer.save()
|
|
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
|
|
|
|
|
|
# 和article_list()功能相同
|
|
|
|
class ArticleList(generics.ListCreateAPIView):
|
|
|
|
queryset = Article.objects.all()
|
|
|
|
serializer_class = ArticleListSerializer
|
|
|
|
|
|
|
|
|
|
|
|
# 第一种版本
|
|
|
|
|
|
|
|
# class ArticleDetail(APIView):
|
|
|
|
# """文章详情视图"""
|
|
|
|
# def get_object(self, pk):
|
|
|
|
# """获取单个文章对象"""
|
|
|
|
# try:
|
|
|
|
# # pk代表主键
|
|
|
|
# return Article.objects.get(pk=pk)
|
|
|
|
# except:
|
|
|
|
# raise Http404
|
|
|
|
#
|
|
|
|
# def get(self, request, pk):
|
|
|
|
# article = self.get_object(pk)
|
|
|
|
# serializer = ArticleDetailSerializer(article)
|
|
|
|
# # 返回Json数据
|
|
|
|
# return Response(serializer.data)
|
|
|
|
#
|
|
|
|
# def put(self, request, pk):
|
|
|
|
# article = self.get_object(pk)
|
|
|
|
# serializer = ArticleDetailSerializer(article, data=request.data)
|
|
|
|
# # 验证提交的数据是否合法
|
|
|
|
# # 不合法就返回400
|
|
|
|
# if serializer.is_valid():
|
|
|
|
# # 序列化器将持有的数据反序列化后
|
|
|
|
# # 保存到数据库
|
|
|
|
# serializer.save()
|
|
|
|
# return Response(serializer.data)
|
|
|
|
# return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
#
|
|
|
|
# def delete(self, request, pk):
|
|
|
|
# article = self.get_object(pk=pk)
|
|
|
|
# article.delete()
|
|
|
|
# # 删除成功后返回204
|
|
|
|
# return Response(status=status.HTTP_204_NO_CONTENT)
|
|
|
|
|
|
|
|
# 第二种版本
|
|
|
|
|
|
|
|
# class ArticleDetail(mixins.RetrieveModelMixin,
|
|
|
|
# mixins.UpdateModelMixin,
|
|
|
|
# mixins.DestroyModelMixin,
|
|
|
|
# generics.GenericAPIView):
|
|
|
|
# """文章详情视图"""
|
|
|
|
# queryset = Article.objects.all()
|
|
|
|
# # 序列化类
|
|
|
|
# serializer_class = ArticleDetailSerializer
|
|
|
|
#
|
|
|
|
# def get(self, request, *args, **kwargs):
|
|
|
|
# return self.retrieve(request, *args, **kwargs)
|
|
|
|
#
|
|
|
|
# def put(self, request, *args, **kwargs):
|
|
|
|
# return self.update(request, *args, **kwargs)
|
|
|
|
#
|
|
|
|
# def delete(self, request, *args, **kwargs):
|
|
|
|
# return self.destroy(request, *args, **kwargs)
|
|
|
|
|
|
|
|
# ArticleDetail类还可以简化为下面的代码
|
|
|
|
class ArticleDetail(generics.RetrieveUpdateDestroyAPIView):
|
|
|
|
queryset = Article.objects.all()
|
|
|
|
serializer_class = ArticleDetailSerializer
|