python django postgres 데이터베이스 - 브라우저 출력(1/2) 에서
데이터베이스 정보를 가져오는 부분이였으면,
python django postgres 데이터베이스 - 필터 기능 추가 (2/2)
에서는 데이터베이스의 내용에 필터를 걸어서 브라우저 출력하는 내용이다.
조건은
소스 수정후
브라우저 디폴트 출력 후, 화면 하단부에 있는 "필터 테스트 버튼" 을 클릭하면
database_d 데이터베이스의 custom_book_table 의 title 컬럼값에 문자열 "1" 이포함된 경우
필터링한 조건으로 하단부에 추가로 출력 한다.
이전에
django 프레임워크, venv환경, postgres 디비이름 : database_d, 아이디:users, 패스워드:1234
설정은 1/2 에서 확인했다.
터미널에 관련된 명령어를 확인하자.
pip install django
django-admin startproject myproject
python manage.py startapp appview
python manage.py createsuperuser
python manage.py runserver
아래 django 프로젝트 구조는
python django postgres 데이터베이스 - 브라우저 출력(1/2)
과 같다.
아래 postgres 디비 스키마를 확인한다.
postgres 데이터베이스이름 : database_d
아이디 : users
패스워드 : 1234
테이블 이름 : custom_book_table
- TOBE django 수정할 파일(3개)
appview폴더 > urls.py
appview폴더 > views.py
appview폴더 > templates폴더 > appview폴더 > book_list.html
# models.py (수정안함 그대로, 나머지 설정파일도 그대로)
#appview.urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.book_list, name='book_list'), # 기본 화면: 전체 데이터 출력
path('filter/', views.filter_books, name='filter_books'), # 필터된 데이터 출력
]
#appview.views.py
from django.shortcuts import render
from .models import Book # Book 모델을 import
def book_list(request):
"""
book_list.html 화면에서 모든 책 데이터를 출력
"""
books = Book.objects.all() # 데이터베이스에서 모든 책 데이터를 가져옴
filtered_books = None # 필터링된 데이터 초기화
return render(request, 'appview/book_list.html', {'books': books, 'filtered_books': filtered_books})
def filter_books(request):
"""
"A" 버튼 클릭 시 custom_book_table의 title 컬럼에 "1"이 포함된 데이터를 필터링
"""
books = Book.objects.filter(title__contains="1") # title에 "1"이 포함된 데이터만 가져옴
all_books = Book.objects.all() # 전체 데이터 (필터링 전에 사용)
return render(request, 'appview/book_list.html', {'books': all_books, 'filtered_books': books})
#appview.templates.appview.book_list.html
<!DOCTYPE html>
<html>
<head>
<title>Book List</title>
</head>
<body>
<h1>Book List</h1>
<!-- 기존 테이블: 모든 책 데이터를 출력 -->
<table border="1">
<thead>
<tr>
<th>Title</th>
<th>Author</th>
<th>Published Date</th>
<th>ISBN</th>
<th>Pages</th>
<th>Language</th>
</tr>
</thead>
<tbody>
<!-- Django의 템플릿 태그를 사용하여 데이터 출력 -->
{% for book in books %}
<tr>
<td>{{ book.title }}</td>
<td>{{ book.author }}</td>
<td>{{ book.published_date }}</td>
<td>{{ book.isbn_number }}</td>
<td>{{ book.pages }}</td>
<td>{{ book.language }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<!-- "A" 버튼 -->
<!-- 버튼 클릭 시 custom_book_table에서 "1"이 포함된 데이터를 표시 -->
<form method="get" action="{% url 'filter_books' %}">
<button type="submit">필터 테스트 버튼</button>
</form>
<!-- 아래는 필터링된 데이터가 있을 경우 출력 -->
{% if filtered_books %}
<h2>Filtered Books (Title includes "1")</h2>
<table border="1">
<thead>
<tr>
<th>Title</th>
<th>Author</th>
<th>Published Date</th>
<th>ISBN</th>
<th>Pages</th>
<th>Language</th>
</tr>
</thead>
<tbody>
{% for book in filtered_books %}
<tr>
<td>{{ book.title }}</td>
<td>{{ book.author }}</td>
<td>{{ book.published_date }}</td>
<td>{{ book.isbn_number }}</td>
<td>{{ book.pages }}</td>
<td>{{ book.language }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</body>
</html>
상기 3개 파일의 스크립트 작성후
터미널에 아래 명령어 실행
python manage.py migrate #model.py 구조 정의 파일의 변경이 없으면 실행 하지 않아도 된다.
python manage.py runserver #브라우저에 띄울수 있다.
브라우저 창에
http://127.0.0.1:8000/
입력하면 아래 화면이 출력된다.
그리고 하단부에 있는 "필터 테스트 버튼" 을 클릭하면
database_d 데이터베이스의 custom_book_table 의 title 컬럼에 문자열 "1" 이포함된 경우에는
필터링한 조건 정보가 하단부에 출력 된다.
'Python' 카테고리의 다른 글
python django postgres 데이터베이스 - 브라우저 출력 (1/2) (3) | 2024.12.13 |
---|---|
파이썬 pycharm django 연동 (0) | 2024.12.13 |
로또 번호 추출 파이썬 프로그래밍 (1) | 2024.10.25 |
AI CHAT PROMPT (1) | 2024.10.25 |