Loading

django -APIView的使用

1.APIView的使用:

1.1 在 user/urls.py 中添加路由

from django.contrib import admin
from django.urls import path
from bookapp.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/cate/', CateView.as_view()),

]

1.2创建user/serializers.py写序列化器

from rest_framework import serializers
from .models import *


class Cateser(serializers.ModelSerializer):
    class Meta:
        model = Cate	  #数据库表名
        fields = "__all__" #序列化所有字段      
        #depth = 1  # 外键序列化 添加了这个关联的外键都会查询出来


class Bookser(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = "__all__"

1.3 在 user/views.py 中添加视图函数

from .models import *
from rest_framework.views import APIView
from rest_framework.response import Response
from .sers import *


class CateView(APIView):
    # get是查询数据  post是添加数据
    def get(self, request):
        cate = Cate.objects.all()  # 查询所有数据 他是一个查询集
        ser = Cateser(cate, many=True)  # 因为查询的是一个查询集 所以需要些many=True
        return Response(ser.data)

    def post(self, request):
        ser = Cateser(data=request.data)
        resp = {}
        if ser.is_valid():
            ser.save()
            resp['code'] = 200
            resp['code'] = ser.data
        else:
            print(ser.errors)
            resp['code'] = 400
            resp['code'] = ser.errors
        return Response(resp)

    def put(self, request):  # put 修改数据 完全修改数据  patch 部分修改数据
        # 想要修改的话 需要知道要修改谁 还要知道最新的数据 data=xxx 传递的新的值
        id = request.GET.get('id')
        # first是从查询集中 获取一个model对象
        cate = Cate.objects.filter(id=id).first()  
        # 传递 两个参数 参数1是要修改的数据  参数2是要赋予的新值
        ser = Cateser(instance=cate, data=request.data)  
        resp = {}
        if ser.is_valid():
            ser.save()
            resp['code'] = 200
        else:
            resp['code'] = 400
        return Response(resp)

    def delete(self, request):
        # 需要知道删除谁
        id = request.GET.get('id')
        resp = {}
        try:
            Cate.objects.filter(id=id).delete()
            resp['code'] = 200
        except Exception as e:
            print(e)
            resp['code'] = 400
        return Response(resp)
posted @ 2020-10-21 20:08  就学45分钟  阅读(1172)  评论(0编辑  收藏  举报