上一章介绍了DRF的快速搭建api,但REST framework自带的增删改查功能有一定局限性,下面介绍一下自己如何完成增删改查的接口

上一篇链接:https://blog.csdn.net/qq_41590764/article/details/108810761

开始

第一步:新建工程,新建app,安装restframework,配置setting,创建models模型

上面的基本操作就不过多介绍,详见上一篇,app的名称还是demo1

第二步:创建序列化器

还有另一种创建序列化器的方法,就是一步一步添加,当然上面这种代码会少很多

# 一步一步增加序列化
class UserSer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    User_id = serializers.IntegerField()
    name = serializers.CharField(max_length=32)
    age = serializers.IntegerField()
    num = serializers.IntegerField()
    password = serializers.IntegerField()

    def create(self, validated_data):
        return User.objects.create(**validated_data)
    def update(self, instance, validated_data):
        instance.User_id = validated_data.get('User_id', instance.User_id)
        instance.name = validated_data.get('name', instance.name)
        instance.age = validated_data.get('age', instance.age)
        instance.num = validated_data.get('num', instance.num)
        instance.password = validated_data.get('password', instance.password)
        instance.save()
        return instance

这种方法的效果和上面的是一样的,但是可以加深对序列化器的理解,两种方法选取一个即可

第三步:编写视图函数

需要引用的库

REST框架提供了两个可用于编写API视图的包装器(wrappers)。

  1. 用于基于函数视图的@api_view装饰器。
  2. 用于基于类视图的APIView类。

下面主要介绍装饰器,当有get请求和post请求的时候,会自动检测到,并进入UserViewSet函数进行处理

@api_view(['GET', 'POST'])
def UserViewSet(request):
    if request.method == "GET":
        users = User.objects.all()
        user = UserSer(users, many=True)
        return Response(data=user.data, status=status.HTTP_200_OK)
    elif request.method == "POST":
        data = UserSer(data=request.data)
        if data.is_valid():
            data.save()
            return Response(data=data.data, status=status.HTTP_200_OK)
        else:
            return Response(data=data.errors, status=status.HTTP_400_BAD_REQUEST)

当有get,put,delete请求的时候出发下面函数 

@api_view(['GET', 'PUT', 'DELETE'])
def UserViewSetPutDelete(request, pk):
    try:
        # filter查询若不存在返回空,get查询不存在抛出异常
        # 这里可以指定查询哪一个字段的数据,可以是name,age等
        user = User.objects.get(User_id=pk)    
    except:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method == "GET":
        u = UserSer(user)
        return Response(data=u.data, status=status.HTTP_200_OK)

    elif request.method == "PUT":
        u = UserSer(user, data=request.data)
        if u.is_valid():
            u.save()
            return Response(data=u.data, status=status.HTTP_200_OK)
        else:
            return Response(data=u.errors, status=status.HTTP_400_BAD_REQUEST)

    elif request.method == 'DELETE':
        user.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

第四步:编写urls

path的路由不能使用正则表达式,还是url好用

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', UserViewSet),
    url(r'^api/(?P<pk>[0-9]+)$', UserViewSetPutDelete),
]

第五步:启动项目

访问IP地址:http://127.0.0.1:8000/api/

访问IP地址:http://127.0.0.1:8000/api/1

下方的数据框中填入json格式的数据,即可正常的添加和修改

大功告成!!!