2009-10-13 3 views
0

매우 간단한 답변이지만, 인터넷에 올 수없는 질문 일 수 있습니다.잘못된 형식의 업로드 필드가 아무데도 가리키고 있지 않습니다.

나는 장고 응용 프로그램을 작성 중입니다. 필요없는 ImageField가있는 양식이 있습니다. 사용자가 양식 (이미지 포함)을 제출 한 후 양식이 유효하지 않은 경우 서버 측에서 요청 데이터 및 파일 (예 : form = FooForm(request.DATA, request.FILES, instance = foo)이있는 양식을 채우고 응답을 클라이언트에 다시 보냅니다.

클라이언트에서 다른 필드는 표시되지만 이미지 필드는 아무 곳을 가리 키지 않습니다. 이미지 필드가 필요하지 않으므로 사용자는 대개 상황을 간과하고 이미지없이 양식을 다시 제출합니다.

어쨌든 이것이 문제가되는지 또는 어쨌든 작동 할 것으로 예상되는 경우에도 분실했습니다. 문제가되는 경우 자세한 내용을 기재하십시오.

답변

1

브라우저 보안 작동 방식은 피할 수없는 결과입니다. 다른 입력 필드와 마찬가지로 모든 서버 측 시스템에서 파일 업로드 필드의 초기 값을 설정할 수 없습니다. 악의적 인 사이트가 사용자의 허가없이 컴퓨터에서 콘텐츠를 업로드하는 것을 막기위한 것입니다. 그렇지 않으면 사이트에서 암호 파일을 기본값으로 사용하도록 필드를 설정할 수 있습니다.

분명히 사용자가 업로드 한 파일을 원한다면 문제가됩니다. 양식이 처음에는 유효하지 않았 으면 저장되지 않고 두 번째로 파일을 잃어버린 채 사용자가 업로드하지 않으면 다시. 한 가지 가능한 솔루션은 파일 업로드를 두 번째 페이지로 자체 양식에 배치하는 것입니다. 양식의 유효성을 검사하고 저장하면 두 번째 양식이 파일 만 표시됩니다. Trac bugtracker는 '업로드 할 파일이 있습니다'라는 기본 폼의 확인란을 선택하고 확인란을 선택하면 해당 양식으로 사용자를 이동시킴으로써 이와 같이 작동합니다.

+0

감사합니다. Daniel. 나는 클라이언트에게 파일을 돌려 보내는 것을 생각하지 않았지만, 다른 필드들과 마찬가지로 경로 문자열을 보내고 복원 할 수 있다고 생각했습니다. – shanyu

+0

+1 - 당신이 할 수있는 또 다른 일은 "suspectIntendedFileUpload"와 같은 이름의 숨겨진 필드를 추가하는 것입니다.이 필드는 파일 업로드와 함께 제출을 받으면 설정할 수 있습니다. 그런 다음 숨겨진 필드 집합과 파일 업로드가없는 추가 제출을 얻으면 필드를 설정 해제하고 사용자에게 경고 할 수 있습니다. –

+0

@dominic - 위대한 팁, 감사합니다. – shanyu

관련 문제