python可变对象项目中的坑
由代码引出问题
-
-
数据返回类封装
-
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
-
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
复制代码
-
-
接口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