22. 파일 등록 처리 - eungyukm/DjangoBase GitHub Wiki

파일 등록 처리

  1. 파일 업로드 설정
  • settings.py 파일에 저장될 경로를 지정합니다.
# 업로드 폴더 위치
MEDIA_URL = '/upload/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload')
  1. board_app/models/ContentTable에 있는 content_file을 FiledField로 변경합니다.
content_file = models.FileField(upload_to='files/', null=True)
  1. 마이그레이션 수행합니다.
python3 manage.py makemigrations
python3 manage.py migrate   

04. board_app/temlplates/board_write.html에 있는 form 태그에 multipart-formdata 설정을 합니다.    
```
  1. board_app/views.py의 board_write_result 함수에 파일 처리를 해줍니다.
def board_write(request):
    # 파라미터를 추출합니다.
    board_info_idx = request.GET['board_info_idx']

    template = loader.get_template('board_write.html')
    render_data = {
        'board_info_idx' : board_info_idx
    }
    return HttpResponse(template.render(render_data, request))


@csrf_exempt
def board_write_result(request) :
    content_subject = request.POST['board_subject']
    content_text = request.POST['board_content']
    content_date = timezone.localtime()

    content_writer_idx = request.session['login_user_idx']
    # 외래키(BoardInfoTable의 PK 컬럼을 참조한다)
    content_board_idx = request.POST['board_info_idx']

    content_model = board_app.models.ContentTable()
    content_model.content_subject = content_subject
    content_model.content_text = content_text
    content_model.content_date = content_date

    content_writer_model = user_app.models.UserTable.objects.get(user_idx=content_writer_idx)
    content_board_model = board_app.models.BoardInfoTable.objects.get(board_info_idx = content_board_idx)

    content_model.content_writer_idx = content_writer_model
    content_model.content_board_idx = content_board_model

    # 업로드된 파일 명을 가져옵니다.
    content_model.content_file = request.FILES.get('board_file')

    content_model.save()

    message = '''
            <script>
                alert('저장되었습니다')
                locaiton.href = '/board/board_read'
            </script>
            '''
    return HttpResponse(message)
⚠️ **GitHub.com Fallback** ⚠️