Season 1 아카이브/프로그래밍
                
              장고 파일 업로드 Django File Uploads
                문장전달자
                 2016. 6. 4. 15:25
              
              
                    
        728x90
    
    
  파일을 업로드하는 페이지를 만들어봅니다.
기존에 프로젝트는 생성되어 있다고 가정하고 진행합니다.
1. setting.py 파일에 파일이 저장될 위치 지정
1 2 3  | #settings.py MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/'  | cs | 
2. FileField 를 가진 Document 모델 생성
1 2 3 4 5  | #models.py from django.db import models class Document(models.Model):     docfile = models.FileField(upload_to='documents/%Y/%m/%d')  | cs | 
3. Form 을 만든다
1 2 3 4 5 6 7 8  | # forms.py from django import forms class DocumentForm(forms.Form):     docfile = forms.FileField(         label = 'Select a file',         help_text = 'max. 42 megabytes'         )  | cs | 
4. View 를 만든다(세부 파일명 등은 사용자따라 다르시겠죠)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23  | from django.template import RequestContex from .models import Document from blog.forms import DocumentForm from django.core.urlresolvers import reverse def upload_file(request):     if request.method == 'POST':         form = DocumentForm(request.POST, request.FILES)         if form.is_valid():             newdoc = Document(docfile = request.FILES['docfile'])             newdoc.save()             return HttpResponseRedirect(reverse('blog.data_analysis.upload_file'))     else:         form = DocumentForm()     documents = Document.objects.all()     return render_to_response(         'blog/resource_data_analysis_fileuploading_form.html',         {'documents': documents, 'form': form},         context_instance=RequestContext(request)     )     | cs | 
5. URL 지정을 해줍니다.
1 2 3 4  | #urls.py urlpatterns = [     url(r'^data_analysis/uploadfile/$', 'blog.data_analysis.upload_file'), ]  | cs | 
6. 템플릿 파일을 만듭니다.
(4번 항목의 resource_data_analysis_fileuploading_form.html 파일에 아래 내용을 넣어줍니다)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28  | # template  <div class="panel-heading">     <h3 class="panel-title">File Uploading Form</h3>         <!-- List of uploaded documents -->         {% if documents %}             <ul>             {% for document in documents %}                 <li><a href="{{ document.docfile.url }}">{{ document.docfile.name }}</a></li>             {% endfor %}             </ul>         {% else %}             <p>No documents.</p>         {% endif %} </div> <div class="panel-body">                        <!-- Upload form. Note enctype attribute! -->     <form action="" method="post" enctype="multipart/form-data">         {% csrf_token %}         <p>{{ form.non_field_errors }}</p>         <p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p>         <p>             {{ form.docfile.errors }}             {{ form.docfile }}         </p>         <p><input type="submit" value="Upload" /></p>     </form> </div>                      | cs | 
7. 2번 항목의 Document 테이블을 생성하도록 마이그레이션을 해줍니다.
1 2  | python manage.py makemigrations blog python manage.py migrate  | cs | 
8. 실행한 모습니다.
※ 참고사이트
https://docs.djangoproject.com/en/1.9/topics/http/file-uploads/
728x90