2017-11-09 6 views
-1

현재 sklearn 모델 객체를 서버 측에서 클라이언트 측으로 이동하려고합니다. 나는 장고에 새로 왔어. 힘들게 힘들어하고있어.Django의 HttpRequest에서 피클 링 된 객체 전달하기

옵션 하나는 모든 모델 매개 변수를 jsonify하고이를 전달하고 해당 매개 변수로 새 모델 객체를 재구성하는 것입니다.

그러나 단순화하고 장고에 대해 조금 배우려는 시도에서 절인 개체를 전달하려고했지만 실패했습니다. 나는 간단한

pickle.loads(api_res) 

를 한 경우 나, 프론트 엔드 API에서 그것을 가지고

result = pickle.dumps({'test':'test'}, pickle.HIGHEST_PROTOCOL) 
return HttpResponse(pkl) 

내가 유형 인스턴스 오류 :

나는 원래 같은 간단한 무언가를 시도했다. 내가 할 때 :

pickle.loads(api_res.read()) 

나에게 EOF 오류가 발생합니다.

나는 또한 문자열 버전 대신 pickle.dump를 사용할 수있는 가능성이 있음을 알고 있지만, 장고 컨텐츠 유형 등과 관련하여 문제가 발생했습니다. 방해가되는 것처럼 보입니다.

케이크에 불행한 장식은 개체를 직렬화하여 장고로 반환하는 경우를 찾기가 어렵다는 것입니다. 거의 모든 결과가 장고 개체 자체를 serialize/pickling하기 때문입니다.

도움말/링크를 제공해 주시면 감사하겠습니다.

답변

1

포인트 제로 : 누구에게도 pickle.load에 주사 할 가능성을 허용하지 않습니다. Arbitrary code execution with Python pickles을 참조하십시오.

당신이 이것을 원한다고 확신하는 경우 프론트 엔드가 무엇을하고 있는지 확인하십시오. 어쩌면 데이터를 어떻게 든 변경하거나 필드에 데이터를 전송할 수 있습니다. 또한 api_res 인스턴스의 클래스 문서를 확인하십시오.

+0

서버 쪽에서 클라이언트 쪽까지 sklearn 모델 개체를 전달하는 방법에 대한 다른 제안이 있습니까? 그것이 궁극적으로 내가하려는 일입니다. 우리는 모델 서버 측을 교육하지만 현재 개발자가 다양한 데이터 소싱을 위해 노트북에서 클라이언트 측에 액세스 할 수있는 방법이 없습니다. – Lzkatz

+0

JSON 또는 CBOR을 사용하는 것이 좋습니다. 객체를 unpickle 처리하는 것은 아키텍처 독립적 인 방식으로 객체를 직렬화하는 것입니다. 그러나 노트북과 통합하는 것이 가장 좋은 방법이라고 생각합니다. – lig

관련 문제