自动化测试平台(五):用户增删改查接口实现

1,207 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天,点击查看活动详情

一、通过DRF视图快速实现用户增删改查

对于用户的增删改查,我们不需要去写四个接口,通过restframework提高的视图可以很方便的开发通用功能接口。


1. 创建公共视图

1)在django项目下创建comFunc文件夹,并在该文件夹下创建comViews.py文件: 在这里插入图片描述


2)在comviews.py文件中增加如下代码:

from rest_framework import mixins
from rest_framework.generics import GenericAPIView


class ComAllAPIView(mixins.ListModelMixin,
                    mixins.CreateModelMixin,
                    mixins.UpdateModelMixin,
                    mixins.DestroyModelMixin,
                    mixins.RetrieveModelMixin,
                    GenericAPIView):

    # 查询
    def get(self, request, *args, **kwargs):
        if request.parser_context['kwargs']:  # 如果有id,则查单个值
            return self.retrieve(request, *args, **kwargs)
        return self.list(request, *args, **kwargs)

    # 创建
    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

    # 更新部分字段
    def patch(self, request, *args, **kwargs):
        return self.partial_update(request, *args, **kwargs)

    # 删除
    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)


这个视图方法通过继承restframework提供的公共mixin来实现增删改查的功能(关于restframework,视图和mixin的讲解请看官方文档进行学习:www.django-rest-framework.org/api-guide/v…


3)然后在user文件夹下创建序列化文件serializers.py: 在这里插入图片描述


4)加入序列化代码:

关于序列化使用和讲解,移步官方文档的serializers章节:www.django-rest-framework.org/api-guide/s…


from django.contrib.auth.models import User
from rest_framework import serializers

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

5)加入序列化代码:

user文件夹下的views.py文件中增加相关的user视图代码,用于实现增删改查接口:

相应引入代码:

from comFunc.comViews import ComAllAPIView
from user.serializers import UserSerializer
from django.contrib.auth.models import User

视图代码

class UserView(ComAllAPIView):
    serializer_class = UserSerializer
    permission_classes = (IsAuthenticated,)
    queryset = User.objects.all()

6)在user文件夹下的urls.py中的urlpatterns列表中增加相应url:

path('all', UserView.as_view()),
path('all<int:pk>', UserView.as_view()),

7)在user文件夹下的urls.py中增加设置app_name的代码:

app_name = "user"

8)在QNtest文件夹下的urls.py中的urlpatterns列表中将user模块的url引入:

path('user/', include('user.urls', namespace='user')),

2. 用户接口

2.1 查询用户列表接口

请求地址: http://localhost:8001/user/all

请求方法: GET

响应结果

在这里插入图片描述


可以看到,响应的结果中也把用户的password带出来了,这是我们不愿意看到的, 我们可以通过设置序列化方法来排除哪些字段不返回:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        exclude=('password',)  # 不返回password字段

这样设置后结果就不会返回password


但这样设置之后会有一个问题,当我们想通过序列化方法创建用户时,指定了password字段也不会进行保存

所以我们要设置password字段为只能够写,不能够读即可,设置代码如下:

class UserSerializer(serializers.ModelSerializer):
    password = serializers.CharField(write_only=True)

    class Meta:
        model = User
        fields = '__all__'

2.2 修改接口

请求地址: http://localhost:8001/user/all/1

请求方法: PATCH

请求参数(修改用户id为1的邮箱地址):

{
	"email":"123@qn.com"
}

2.3 删除接口

删除用户id为2的用户

请求地址: http://localhost:8001/user/all/2

请求方法: DELETE


2.3 创建接口

对于创建用户的接口,我们需要重写post方法,以至于能够设置用户的密码 在views.py文件下的UserView添加(完整userView代码):

class UserView(ComAllAPIView):
    serializer_class = UserSerializer
    permission_classes = (IsAuthenticated,)
    queryset = User.objects.all()

    def post(self, request, *args, **kwargs):
        # 如果传递了password字段就用password的字段,没有则默认密码为123456
        pwd = request.data.get('password', '123456')
        request.data['password'] = make_password(pwd)  # 调用内置生成密码方法进行加密
        return self.create(request, *args, **kwargs)

创建一个用户名为:quniao,邮箱地址为:quniao@qn.com的用户

请求地址: http://localhost:8001/user/all

请求方法: POST 请求参数:

{
	"username":"quniao",
	"email":"quniao@qn.com"
}

四. 总结

至此,我们已经完成了用户的增删改查功能。而且只用了一个八行代码的视图和四行代码的序列化器就实现了。这是非常高效方便的。

这也是我为什么选择DRF的原因,因为太香了。

有了接口就需要进行数据的展示了,下篇博文将通过ts+react+antd来开发前端页面的展示。欢迎订阅专栏!