나는 솔직히 말해서 이것이 지난 주 Django-Users 메일 링리스트에서 물어 본 질문입니다. 이후 아직 응답을 얻지 못했기 때문에 스택 오버플로에서 더 많은 관심을 받기를 바란다.사용자 친화적이고 다중/대량 파일 업로드 기능을 다른 앱에 제공 할 수있는 장고 앱
사용자 친화적 인 애플리케이션을 쉽게 만들고 싶습니다. 자신의 앱에 여러/대량 파일을 업로드하고 싶습니다. 사용자 친화적 인 I 은 Gmail, Flickr 등의 업로드를 의미합니다. 사용자가 파일 찾아보기 대화 상자에서 한 번에 여러 개의 파일을 선택할 수 있습니다. 그런 다음 파일이 순차적으로 또는 병렬로 에 업로드되고 선택된 파일의 멋진 개요가 페이지에 표시되며 그 옆에 진행 막대가 표시됩니다. '취소' 업로드 버튼도 가능한 옵션입니다.
일반적으로 Flash 개체를 사용하여 niceness를 해결할 수 있습니다. http://swfupload.org/, FancyUpload http://digitarald.de/project/fancyupload/ , YUI 2 업 로더 http://developer.yahoo.com/yui/uploader/ 아마 더 많은 SWFUpload : 같은 완벽한 솔루션은 클라이언트 측 위해 밖으로있다.
물론이 트릭은 프로젝트에 통합 된 솔루션을 얻고 있습니다. 특히 Django와 같은 프레임 워크에서는 double을 사용하면 을 다시 사용할 수 있습니다.
그래서 몇 가지 아이디어가 있지만 장고에 대한 전문가도 아니고 플래시 기반 업로드 솔루션도 아닙니다. 에 대해 더 많은 지식과 경험을 가진 사람들로부터 약간의 피드백을 받기를 바랍니다. (또는 심지어 단지 '나는 이것도 원한다!') 대답 :
나는 약간의 가정을합니다. 이것은 응용 프로그램의 (초기) 범위를 계속 유지하는 것입니다. 물론 논쟁의 여지가의있다 이러한 가정 :
좋아, 내 생각은 지금까지의 :
당신이 대량 업로드 여러 파일을 원하는 경우 각 파일을 포함 할 모델을 할 것입니다. 즉 모델에는 FileField 또는 하나의 ImageField가 포함됩니다. FileFields/ 여러 개가있는 모델/ ImageFields를 사용하면 쉽게 대량 업로드 할 필요가 없습니다. imho : 모델에 100 개의 FileField가 있고 뭔가 잘못하고 있습니다 :) 내 예상 유형 대량 업로드 :
- 파일 필드 (동적 파일 이름에서 생성)을 제목 필드와 DATE_ADDED 필드가 하나의 모델 '브로셔'이 앱.
- '갤러리'및 '사진'모델이 포함 된 사진 갤러리 앱입니다. 갤러리를 선택하여 그림을 추가하고 사진을 업로드하고 새 사진 개체 을 만들고 외래 키를 선택한 갤러리에 설정합니다.
좋아하는 플래시 업로드 솔루션을위한 앱을 구성하거나 확장하는 것이 좋을 것입니다.우리는 위의 세 가지 중 하나를 기본값 인 으로 선택할 수 있지만 사람들이 쉽게 추가 구현을 추가 할 수 있도록 앱을 구현합니다 (장고는 여러 데이터베이스를 사용할 수 있음). 특정 클라이언트 측 솔루션에 대해 불가지론 자 이도록하십시오.
처음부터 선택해야 할 경우 이 가장 작은 풋 프린트를 선택하십시오. (클라이언트 측 물건의 최소 다운로드)
Flash 기반 솔루션은 비동기 적으로 (순차적으로 또는 순차적으로 병렬로) URL에 파일을 게시합니다. 일반 앱에 로컬 이라는 URL을 제안합니다 (따라서 앱을 사용하는 모든 앱에서 동일합니다). 해당 URL은 일반 앱에서 제공하는보기로 이동합니다.
보기는 다음을 수행합니다. 새 모델 인스턴스를 만들고 파일을 추가하고 OPTIONALLY EXTRA STUFF를 추가하고 인스턴스를 저장하십시오.
DO EXTRA STUFF는 앱을 사용하는 앱이 실행하려고하는 코드입니다. 모델에 FileField/ImageField가있는 경우 추가 코드를 제공 할 필요가 없습니다. 표준보기 코드가 작업을 수행합니다. ...
가 아직 DO EXTRA 물건 메커니즘에 대해 생각하지 않은 제목, DATE_ADDED, ForeignKeys를, manytomany : 그러나 대부분의 응용 프로그램은 내가 에서 다른 필드를 채우는처럼 생각 여분의 물건을 수행 할 것입니다. 단지 일반 앱보기를 래핑하는 것이 마음에 들었지만 자신의 URL 패턴과 자신의보기를 작성해야하므로 개발자는 과 친숙하지 않습니다. 그런 다음 플래시 솔루션에 새로운 URL 등을 사용하도록 알려야합니다. 신호가 사용될 수 있다고 생각합니까?
양식/관리자 : 나는 여전히이 가장 잘 은 관리자에 통합하거나 할 수있는 방법에 매우 스케치 해요 일반 장고 양식/위젯/... (그리고 이것이 장고 경험의 나의 부족이 표시되었다) :
갤러리/사진 응용 프로그램의 경우- : 당신은 갤러리 세부 양식의 대량 사진 업로드 위젯을 제공 할 수있다. 그러나 갤러리 인스턴스가 아직 저장되지 않은 경우 어떻게해야합니까? 파일 업로드보기는 사진 인스턴스에서 외래 키를 설정할 수 없습니다. 나는 당신이 사용자를 만들 때 auth 앱이 사용자 이름과 비밀번호를 묻기 위해 을 묻는다. 그러면 더 큰 폼을 제공하여 emailadres를 채우고 역할을 선택한다. 우리는 과 같은 것을 할 수있다.
- 하나의 모델 만있는 앱의 경우 : Django 관리자가 대량 업로드를 수행 할 수있는 양식을 어떻게 제공합니까? 하나의 모델 인스턴스에 대해서만 모델의 세부 양식 ( )으로 수행 할 수 없습니다.
아마 내가 심지어이 응용 프로그램을 시작할 수 있습니다 전에 대답 할 필요가 수십 더 많은 질문이있다. 그래서 네가 생각하는 것을 말해줘! 내게 입력 해주세요! 너는 무엇을 좋아하니? 뭐라구? 너 뭐 다른거야? 이 아이디어는 확실한가요? 그게 어디 있지?
감사합니다.
꽤 멋져 보입니다! 한 가지 질문 : 파일 업로드시 추가 정보를 보낼 수 있습니까? 예를 들어 사진이 속한 갤러리의 PK입니다. 그럴 수 없다면 파일을받는 순간 모델을 저장할 수 없습니다. 그렇다면 FK가 null이되도록하고 새로 업로드 된 파일을 구분하는 제안 된 방법을 사용해야합니다. 그 방법으로 볼 수있는 문제는 여러 사용자가 파일을 동시에 업로드 할 수 있다는 것입니다. 더하기 : 나는 여전히 갤리에게 사진이 속하는지 알 수있는 방법이 없을 것입니다. (업로드 후 사용자가 선택하도록해야합니까?) – hopla
개념적 구현 방법 : 저는 앱이 자동으로 인스턴스를 생성하게하지 않을 것입니다. 'FileModel'은 아니지만 프로그래머가 선택한 모델 (즉, 자신의 모델)을 가리 킵니다. 당신의 다른 말은 매우 통찰력있어. 고마워. 또한 : 당신이 이미 내가 원하는 것을 할 수있는 무언가를 가지고 있기 때문에, 나는 이제 그걸 해킹하려는 경향이 있습니다. – hopla
앱에서 가장 잘 작동 할 패턴은 "먼저 업로드하고 질문하기"입니다. Flickr를 사용한 적이 있다면 지금까지 보았을 것입니다. 미디어 모델에는 "new_upload"(bool) 및 "uploaded_by"(사용자에게 FK)라는 두 개의 필드가 있습니다. 두 값은 파일이 업로드 될 때 설정됩니다. 클라이언트 측에서는 파일 업로드가 완료된 후 (템플릿 태그를 통해 전달 된 URL) 사용자가 새로 업로드 한 파일을 보여주는 화면으로 이동하여 갤러리 (또는 태그 또는 자르기, 또는 무엇이든) 각 파일을 개별적으로. –