代码之家  ›  专栏  ›  技术社区  ›  Jekson

DRF:如何在另一个类方法中调用一个类?

  •  0
  • Jekson  · 技术社区  · 4 年前

    我有两种不同的方法:

    1. 加载和验证csv文件FileUploadView(APIView)[PUT]
    2. 根据上载的文件数据向数据库添加新对象 毒死蜱

    文件上传

    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。当然,如果可能的话。

    0 回复  |  直到 4 年前