ModelSerializers默认帮我们实现了创建和更新方法,简化了我们的操作,当然如果你想自己写,可以重写它。其余使用方法跟普通的序列化一样。
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = ('id', 'title', 'vnum', 'content') 三者取一
#exclude = () 表示不返回字段 三者取一
#fields = '__all__': 表示所有字段 三者取一
#read_only_fields = () #设置只读字段 不接受用户修改
编写视图
@csrf_exempt
def article_list(request):
# http://127.0.0.1:8000/drf/artciles/ get 获取所有
if request.method == 'GET':
articles = Article.objects.all()
serializer = ArticleModelSerializer(articles,many=True)
return JsonResponse({"code": 0, "msg": '操作成功', "data": serializer.data})
elif request.method == 'POST':
data = JSONParser().parse(request) # 把前端传过来的json数据转成python数据类型
serializer = ArticleModelSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data,status=201)
return JsonResponse(serializer.errors,status=400)
路由
path('artciles/',views.article_list)
# 编写删除和更新
@csrf_exempt
def article_detail(request,id):
try:
article = Article.objects.get(pk=id)
except Article.DoesNotExist:
return HttpResponse(status=404)
if request.method == 'GET': # 获取单个信息
serializer = ArticleModelSerializer(article)
return JsonResponse(serializer.data)
elif request.method == 'PUT': # 修改
data = JSONParser().parse(request)
serializer = ArticleModelSerializer(article,data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data)
return JsonResponse(serializer.errors,status=400)
elif request.method == 'PATCH':
data = JSONParser().parse(request)
ser = ArticleModelSerializer(instance=article,data=data,partial=True)
if ser.is_valid():
ser.save()
return JsonResponse(ser.data)
elif request.method == 'DELETE': # 删除
article.delete()
return JsonResponse({"code": 0, "msg": '操作成功'})