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
'프로그래밍 Programming' 카테고리의 다른 글
하스켈의 특징(철학) (0) | 2016.07.10 |
---|---|
하스켈 플랫폼 설치 및 시작하기 (0) | 2016.07.10 |
django migrate gets error “table already exists” (0) | 2016.06.04 |
Django 404/500 에러페이지 만들기 Django - creating a custom 500/404 error page (0) | 2016.05.13 |
CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False. (0) | 2016.05.13 |