我有两种不同的方法:
-
加载和验证csv文件FileUploadView(APIView)[PUT]
-
根据上载的文件数据向数据库添加新对象
毒死蜱
文件上传
class FileUploadView(APIView):
parser_classes = (MultiPartParser, FormParser)
permission_classes = (permissions.AllowAny,)
def put(self, request, format=None):
if 'file' not in request.data:
raise ParseError("Empty content")
f = request.data['file']
filename = f.name
if filename.endswith('.csv'):
file = default_storage.save(filename, f)
r = csv_file_parser(file)
status = 204
else:
status = 406
r = "File format error"
return Response(r, status=status)
创建实例
class CsvToDatabase(APIView):
def post(self, request, format=None):
r_data = request.data
...
#some logic
...
serializer = VendorsCsvSerializer(data=data)
try:
serializer.is_valid(raise_exception=True)
serializer.save()
except ValidationError:
return Response({"errors": (serializer.errors,)},
status=status.HTTP_400_BAD_REQUEST)
else:
return Response(request.data, status=status.HTTP_200_OK)
网址.py
urlpatterns = [
path('csv_upload/', FileUploadView.as_view(), name='csv_upload'),
path('from_csv_create/', CsvToDatabase.as_view(), name='csv_vendor_create'),]
目前,我只是手动传递给邮递员的结果
PUT
方法
FileUploadView
班级(
Response(r, status=status
)给我一个json)的POST方法
CsvToDatabase
班级。
当然,此选项不适用于工作应用程序。我想知道是否有一种方法可以在内部自动调用POST方法
文件上载视图
下课后
.csv
处理文件并接收json。
我知道我可以转车
POST
类的方法
文件上载视图
打电话给
self.POST
方法内部
放
. 但是组合功能会使测试更加复杂,所以我想使用不同的url。当然,如果可能的话。