python可变对象项目中的坑

python可变对象项目中的坑

由代码引出问题

    1. 数据返回类封装

 class BaseResponse(object):

    def success_response(self, data=None):

        if not data:
            return Response(response_code['200'])
        else:
            response_code['200']['datas'] = data
            ret = response_code['200']

        return Response(ret)
复制代码
    1. 接口1

class ShowHistoryTableNameView(GenericAPIView, BaseResponse):
    """显示与用户历史信息"""
    serializer_class = ShowUserTableInfoSerializer
    queryset = UploadManyTables.objects.all()
    permission_classes = [IsAuthenticated]

    def get(self, request):
        data = self.set_history_table_name()
        return self.success_response(data=data)

    def set_history_table_name(self):
        """返回的数据需要历史的表名
        """
        pass

复制代码
    1. 接口2

class CreateFieldBindingView(ModelViewSet, BaseResponse):
    # 忽略
    @action(methods=['get'], detail=False)
    def show_all_relation(self, request):
        """
           1 显示 表字段绑定好的关系
           2 给前端提供搜索功能  可以根据不同的请求参数进行匹配搜索
        """
        # 中间代码忽略
        return self.success_response(data=serializer.data)

复制代码

问题:当我访问接口2 再访问接口1 接口2的data数据会传给接口1 出现幻觉

这个就是最基本的python的 字典修改属于可变对象的修改会影响其他的使用者

解决方案: 每次使用的时候删掉之前的数据


# 数据返回类封装
 class BaseResponse(object):   
     def success_response(self, data=None):

        if response_code['200'].get('datas'):
            del response_code['200']['datas']

        if not data:
            return Response(response_code['200'])
        else:
            response_code['200']['datas'] = data
            ret = response_code['200']
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享