사용자 친화적 인 다중 / 대량 파일 업로드 기능을 다른 앱에 제공 할 수있는 Django 앱

StackOverflow https://stackoverflow.com/questions/1627165

  •  06-07-2019
  •  | 
  •  

문제

나는 정직 할 것입니다 : 이것은 지난주 Django-Users Mailinglist에 대해 묻는 질문입니다. 아직 거기에 답장을받지 못했기 때문에 여기에서 더 많은 관심을 받기를 희망하여 스택 오버플로에 다시 게시하고 있습니다.

자체 앱에서 사용자 친화적 인 다중 / 대량 파일 업로드를 쉽게 수행 할 수있는 앱을 만들고 싶습니다. 사용자 친화적 인 경우 gmail, flickr와 같은 업로드를 의미합니다. 여기서 사용자는 찾아보기 파일 대화 상자에서 한 번에 여러 파일을 선택할 수 있습니다. 그런 다음 파일이 순차적으로 또는 병렬로 업로드되며 선택한 파일의 멋진 개요가 페이지에 옆에있는 진행 막대가있는 페이지에 표시됩니다. '취소'업로드 버튼도 가능한 옵션입니다.

그 모든 niceness는 일반적으로 플래시 객체를 사용하여 해결됩니다. 다음과 같이 클라이언트 측을위한 완전한 솔루션이 있습니다 : swfuploadhttp://swfupload.org/ , FancyUpload http://digitarald.de/project/fancyupload/, yui 2 업 로더 http://developer.yahoo.com/yui/uploader/ 그리고 아마도 더 많은 것입니다.

물론이 트릭은 프로젝트에 솔루션을 통합하는 것입니다. 특히 Django와 같은 프레임 워크에서는 다시 재사용 할 수 있으려면 두 배가됩니다.

그래서 몇 가지 아이디어가 있지만 Django 나 플래시 기반 업로드 솔루션에 대한 전문가는 아닙니다. 지식이 풍부하고 경험이 풍부한 사람들로부터 피드백을 받기를 희망하면서 여기에서 내 아이디어를 공유하겠습니다. (또는 심지어 '나도 원해요!'대답 :))

당신은 내가 몇 가지 가정을한다는 것을 알게 될 것입니다 : 이것은 응용 프로그램의 (초기) 범위를 제어하에 유지하는 것입니다. 이러한 가정은 물론 논쟁의 여지가 있습니다.

좋아, 내 아이디어는 지금까지 :

  • 여러 파일을 업로드하려면 각 파일을 포함시키는 모델이 있습니다. 즉, 모델에는 하나의 파일 필드 또는 하나의 ImageField가 포함됩니다. 여러 파일 필드/ 이미지 필드가 다수의 (그러나 물론 유한 한) 양의 모델을 쉽게 업로드 할 필요가 없습니다. IMHO : 100 파일 필드가있는 모델이 있으면 뭔가 잘못하고 있습니다 :) 예상 내 예상식 질량 업로드를 원하는 예.

    • 파일 필드가있는 모델 '브로셔', 제목 필드 (파일 이름에서 동적으로 생성) 및 date_added 필드가있는 앱.
    • 모델 '갤러리'및 '사진'이있는 사진 갤러리 앱. 사진을 추가 할 갤러리를 선택하고 사진을 업로드하고 새 사진 객체가 만들어지고 외국 키가 선택된 갤러리로 설정됩니다.
  • 좋아하는 플래시 업로드 솔루션의 앱을 구성하거나 확장 할 수있어서 좋을 것입니다. 위의 세 가지 중 하나를 기본값으로 선택할 수 있지만 앱을 구현하여 사람들이 추가 구현을 쉽게 추가 할 수 있도록 (Django가 여러 데이터베이스를 사용할 수 있음)를 쉽게 추가 할 수 있습니다. 특정 클라이언트 측 솔루션에 적합하지 않도록하십시오.

  • 처음부터 선택해야한다면 가장 작은 발자국으로 하나를 골라 낼까요? (클라이언트 측면에서 가장 작은 다운로드)

  • 플래시 기반 솔루션은 파일을 URL에 비동기 적으로 (그리고 순차적으로 또는 병렬로) 게시합니다. URL은 제네릭 앱에 로컬에있는 것이 좋습니다 (따라서 앱을 사용하는 모든 앱마다 동일합니다). 그 URL은 제네릭 앱에서 제공 한보기로 이동합니다.

  • 보기는 다음을 수행합니다. 새 모델 인스턴스를 만들고 파일을 추가하고 선택적으로 추가 작업을 수행하고 인스턴스를 저장합니다.

  • 추가 작업을 수행하는 것은 앱을 사용하는 앱이 실행하려는 코드입니다. 모델에 파일 필드/ImageField 만 있으면 추가 코드를 제공 할 필요가 없습니다. 표준보기 코드가 작업을 수행합니다. 그러나 대부분의 앱은 다른 필드를 채우는 것과 같이 내가 생각하는 여분의 일을 원할 것입니다 : Title, Date_added, 외국 키, Manytomany, ...

  • 나는 여분의 일을위한 메커니즘에 대해 아직 생각하지 않았다. 일반적인 앱보기를 마무리하는 것만으로도 떠오 웠지만 개발자 친화적이지는 않습니다. 자신의 URL 패턴과 자신의보기를 작성해야하기 때문입니다. 그러면 새 URL 등을 사용하려면 플래시 솔루션을 알려야합니다 ... 여기에서 신호와 같은 것이 사용될 수 있다고 생각합니까?

  • Forms/Admin : 나는이 모든 것이 관리자 또는 일반적인 Django 양식/위젯에 가장 잘 통합 될 수있는 방법에 대해 여전히 매우 스케치하고 있습니다. (그리고 이것은 Django 경험 쇼의 부족이었습니다) :

    • 갤러리/사진 앱의 경우 : 갤러리 세부 정보 양식에 대량 사진 업로드 위젯을 제공 할 수 있습니다. 그러나 갤러리 인스턴스가 아직 저장되지 않으면 어떻게해야합니까? 파일 업로드보기는 사진 인스턴스에서 외국 키를 설정할 수 없습니다. Auth 앱은 사용자를 만들 때 먼저 사용자 이름과 비밀번호를 요청한 다음 Haleadres를 채우거나 역할을 선택하는 더 큰 양식을 제공합니다.
    • 단 하나의 모델 만있는 앱의 경우 : Django 관리자에게 질량 업로드를 수행하기 위해 양식을 어떻게 제공합니까? 당신은 당신의 모델의 세부 형태로 그것을 할 수 없다. 그것은 단지 하나의 모델 인스턴스를위한 것입니다.

이 앱에서 시작하기 전에 답변을 받아야하는 수십 가지 더 많은 질문이있을 것입니다. 그러니 당신의 생각을 말 해주세요! 나에게 입력을 줘! 당신은 무엇을 좋아합니까? 그렇지 않습니까? 당신은 무엇을 다르게 하시겠습니까? 이 아이디어는 견고합니까? 어디에 있지 않습니까?

고맙습니다!

도움이 되었습니까?

해결책

방금 약 한 달 전에 이것을 위해 간단한 앱을 출시했습니다. Django-Uploadify.

기본적으로 Django 템플릿 태그입니다. 업로드 (jQuery 필요). 그것을 사용하면 템플릿에 이것을 추가하는 것만 큼 간단합니다 ...

{% load uploadify_tags }{% multi_file_upload ‘/upload/complete/url/’ %}

태그는 수신 파일이 수신 된시기를 나타내는 클라이언트 측 및 서버 측 (DJANGO 신호) 모두에서 이벤트 (파일 당 1 개)를 발사합니다.

예를 들어, 모든 사용자가 지원 파일을 처리하는 모델 '미디어'가 있다고 가정합니다.

def upload_received_handler(sender, data, **kwargs):
    if file:
        new_media = Media.objects.create(
            file = data,
            new_upload = True,
        )
        new_media.save()

upload_recieved.connect(upload_received_handler, dispatch_uid=‘whatever.upload_received’)

확인하십시오 위키 설정 방법에 대한 정보는 신호 처리기 (클라이언트/서버)를 작성하는 방법에 대한 정보를 보려면.


위의 개념적 구현에 대해 다음은 몇 가지 고려 사항이 있습니다.

  • 앱이 "파일 모델"인스턴스를 자동으로 생성하도록하면 사람들이 이미 작업중 인 자체 모델을 가지고있을 수 있습니다.
  • 모든 유형의 보안 또는 인증을 구현하려면 공개 시스템이 필요하고 '자동 창작'유형이 적습니다.
  • 나는 신호/이벤트가 이것을 처리하는 방법이라고 생각하고, 당신이 언급 한 것의 '다른 일'부분을 처리합니다.
  • 나의 결론은 다중 단체가 실제로 폼 위젯이 형태 위젯을 구현한다는 의미에서 결코 형태 위젯이 될 수 없다는 것이었다. 1 파일 1은 1 모델 인스턴스 (일부 예외 포함)로 표시 될 가능성이 높습니다. 즉, 1 개의 위젯이 N 모델 인스턴스를 나타내는 상황이 있습니다. 그러나 Django는 설정되어 위젯이 1 인스턴스에서 1 필드에 대해 1 값을 나타냅니다. 대부분의 사용 사례가 위젯으로 사용하는 데 적합하지 않습니다 (따라서 템플릿 태그 경로를 사용한 이유).
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top