0. 이 글은 누구를 위한 글인가요?
- 내 분석 기록을 파일로 저장하고 싶어요.
- 지금 필터링된 검색 결과만 CSV로 받고 싶어요.
- Django에서 CSV 파일을 동적으로 생성해 다운로드하는 법을 배우고 싶어요.
1. 실습 목표
이번 글의 목표는 마이페이지에서 현재 필터링된 검색 결과를 CSV 파일로 바로 다운로드하는 기능을 추가하는 것입니다. 사용자가 조회한 결과만 저장되며, 정적인 파일이 아니라 요청 시 동적으로 생성된 CSV가 다운로드됩니다.
기능 | 설명 |
---|---|
검색 결과 저장 | 현재 마이페이지에서 필터링된 내역만 저장 |
CSV 동적 생성 | Django가 HttpResponse로 실시간 CSV 생성 |
버튼 클릭 즉시 다운로드 | 브라우저에서 자동 저장됨 |
2. URL 연결 추가 (urls.py)
# analyzer/urls.py
path('mypage/download/', views.download_csv, name='download_csv'),
3. views.py에 다운로드 뷰 추가
from django.http import HttpResponse
import csv
from django.utils.dateparse import parse_date
from .models import AnalysisResult
@login_required
def download_csv(request):
keyword = request.GET.get('keyword', '')
sentiment = request.GET.get('sentiment', '')
start_date = request.GET.get('start_date', '')
end_date = request.GET.get('end_date', '')
results = AnalysisResult.objects.filter(user=request.user)
if keyword:
results = results.filter(title__icontains=keyword)
if sentiment:
results = results.filter(sentiment=sentiment)
if start_date:
results = results.filter(analyzed_at__date__gte=parse_date(start_date))
if end_date:
results = results.filter(analyzed_at__date__lte=parse_date(end_date))
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="my_analysis_results.csv"'
writer = csv.writer(response)
writer.writerow(['분석일', '키워드', '제목', '감성', '요약'])
for r in results:
writer.writerow([
r.analyzed_at.strftime("%Y-%m-%d %H:%M"),
r.keyword,
r.title,
r.sentiment,
r.summary
])
return response
4. 템플릿에 다운로드 버튼 추가 (mypage.html)
<form method="get">
키워드: <input type="text" name="keyword" value="{{ keyword }}">
감성:
<select name="sentiment">
<option value="">전체</option>
<option value="긍정" {% if sentiment == '긍정' %}selected{% endif %}>긍정</option>
<option value="부정" {% if sentiment == '부정' %}selected{% endif %}>부정</option>
<option value="중립" {% if sentiment == '중립' %}selected{% endif %}>중립</option>
</select>
시작일: <input type="date" name="start_date" value="{{ start_date }}">
종료일: <input type="date" name="end_date" value="{{ end_date }}">
<button type="submit">검색</button>
<button type="submit" formaction="{% url 'download_csv' %}" formmethod="get">CSV 다운로드</button>
</form>
✔️ 설명: form 내에 formaction
과 formmethod="get"
을 사용하면, 검색 조건을 유지한 채 다운로드 URL로 이동합니다.
5. CSV 출력 예시
분석일,키워드,제목,감성,요약
2025-03-21 15:00,인공지능,AI가 바꾸는 미래 사회,긍정,AI가 미래 사회를 변화시킨다
2025-03-20 10:45,인공지능,AI 기술의 의료 적용 확대,긍정,AI 기술이 의료에 확대되고 있다
6. 흐름 요약
- 사용자가 마이페이지에서 키워드/감성/날짜 검색
- [CSV 다운로드] 버튼 클릭
- GET 방식으로 필터 조건 전달 →
download_csv()
실행 - 필터 결과를 기반으로 CSV 실시간 생성
- 브라우저에서 다운로드 자동 시작
'Python' 카테고리의 다른 글
Django 웹앱 UI 개선하기 – Bootstrap으로 반응형 페이지 만들기 (0) | 2025.04.21 |
---|---|
Django 뉴스 분석 웹앱 성능 & UX 개선 – 로딩 표시 + 비동기 처리 (AJAX) (0) | 2025.04.20 |
Django 마이페이지에 검색 & 필터 기능 추가하기 (날짜, 키워드, 감성 기준) (0) | 2025.04.18 |
Django 웹앱에 마이페이지 추가하기 – 사용자별 뉴스 분석 기록 저장 & 조회 (0) | 2025.04.17 |
Django 웹앱에 사용자 로그인 & 회원가입 기능 추가하기(기본 인증 시스템 활용) (0) | 2025.04.16 |