我尝试使用HTTP请求来接受CSV,然后尝试将CSV中每列的数据放入列表中。问题是,每当我试图从CSV获取数据时,它总是在我的命令行上以空白列表的形式返回。
我尝试过使用IO:
csv_file = request.DATA
csv = csv_file.content.decode('utf-8')
data_set = csv.reader(io.StringIO(csv))
print data_set
但是,这会导致属性错误。
AttributeError: 'dict' object has no attribute 'content'
File "C:\Users\Varun\Documents\BitBucket\api\apicall\lib\site-packages\django\core\handlers\base.py", line 132, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Varun\Documents\BitBucket\api\apicall\lib\site-packages\django\views\decorators\csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "C:\Users\Varun\Documents\BitBucket\api\apicall\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\Varun\Documents\BitBucket\api\apicall\lib\site-packages\rest_framework\views.py", line 407, in dispatch
response = self.handle_exception(exc)
File "C:\Users\Varun\Documents\BitBucket\api\apicall\lib\site-packages\rest_framework\views.py", line 404, in dispatch
response = handler(request, *args, **kwargs)
File "C:\Users\Varun\Documents\BitBucket\api\remodel\views.py", line 4922, in put
csv = csv_file.content.decode('utf-8')
class LeadCSVInvite(APIView):
permission_classes = (permissions.IsAuthenticated,)
parser_class = (FileUploadParser, MultiPartParser)
def put(self, request, filename, format=None):
csv_file = request.DATA
csv = csv_file.content.decode('utf-8')
print csv
## Check the messages.error
# if not csv_file.name.endswith('.csv'):
# return Response(status=400)
# #return Response({'errorCode': 1, 'errorMsg': "not csv"}, content_type= 'application/json', status=status.HTTP_400_BAD_REQUEST)
data_set = csv.reader(io.StringIO(csv))
print data_set
# print data_set
# io_string = io.StringIO(data_set)
# next(io_string)
emails = []
names = []
for column in data_set:
print column
first_name = column[0],
email = column[1]
emails.append(email)
names.append(first_name)
for i in range(len(emails)):
if emails[i] is None:
return Response(status=400)
#return Response({'errorCode': 1, 'errorMsg': "no email"}, content_type= 'application/json', status=status.HTTP_400_BAD_REQUEST)
print emails[i]
emails[i] = emails[i].lower().strip()
client_exists = User.objects.filter(email=emails[i]).exists()
if names[i] is None and not client_exists:
return Response(status=400)
#return Response({'errorCode': 2, 'errorMsg': "no first name"}, content_type = 'application/json', status=status.HTTP_400_BAD_REQUEST)
elif names[i] is not None:
client_name = names[i].strip()
print names[i]
我希望姓名和电子邮件列表分别填充来自CSV的第一列和第二列的数据。
发布于 2019-08-06 18:35:27
该错误本身表明您正在尝试针对dict调用content属性。了解csv文件是如何从前端传递的。
https://stackoverflow.com/questions/57331027
复制相似问题