본문 바로가기

Python

python django postgres 데이터베이스 - 브라우저 출력 (1/2)

python django 프레임워크에서 postgres 디비연동 후

데이터베이스의 테이블 정보를 브라우저에 출력하는 내용입니다.

 

윈도우환경, pycharm, venv, django 폴더생성(설정폴더 등) 

로컬 postgres 데이터베이스,  사용자계정, 패스워드, 생성 후 작업

 

pycharm 터미널에서 전처리 

venv 환경에서 아래 명령어 실행


 

pip install django

django-admin startproject myproject
python manage.py startapp appview


생성된 django 프레임워크 구조

django

 


 

models.py 파일

 

# appview/models.py
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    published_date = models.DateField()
    isbn_number = models.CharField(max_length=13, unique=True)
    pages = models.IntegerField()
    language = models.CharField(max_length=10)

    class Meta:
        db_table = 'custom_book_table'   # create tabel 시 명시적 테이블 이름 지정

    def __str__(self):
        return self.title


 

admin.py 파일

 

# appview/admin.py
from django.contrib import admin
from .models import Book

admin.site.register(Book)

 

 


appview폴더 > urls.py 파일

 

# appview/urls.py

from django.urls import path
from . import views  # views 임포트

urlpatterns = [
    # 기본적인 뷰를 연결
    path('', views.index, name='index'),
]


views.py 파일

# appview/views.py
from django.shortcuts import render
from .models import Book

def index(request):
    books = Book.objects.all()  # Book 모델의 모든 데이터를 가져옴
    return render(request, 'appview/book_list.html', {'books': books})

 


 

 tamplatates폴더 book_list.html 파일

 

<!--  book_list.html  -->

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Book List</title>
</head>
<body>
    <h1>Book List</h1>
    <ul>
        <!-- books는 views.py에서 전달한 데이터 -->
        {% for book in books %}
            <li>
                <strong>{{ book.title }}</strong> by {{ book.author }}<br>
                Published: {{ book.published_date }}<br>
                ISBN: {{ book.isbn_number }}<br>
                Pages: {{ book.pages }}<br>
                Language: {{ book.language }}
            </li>
        {% empty %}
            <li>No books available.</li>
        {% endfor %}
    </ul>
</body>
</html>


 

myproject폴더 > urls.py 파일

 

# myproject/urls.py

from django.contrib import admin
from django.urls import path, include  # include 임포트

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('appview.urls')),  # 'appview.urls'로 URL 연결
]

 


 

myproject폴더 > settings.py 파일

 

#settings.py

 

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',  # 세션 미들웨어 추가
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',  # 인증 미들웨어 추가
    'django.contrib.messages.middleware.MessageMiddleware',  # 메시지 미들웨어 추가
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',  # 템플릿 백엔드 설정
        'DIRS': [],
        'APP_DIRS': True,  # 앱 내 템플릿 디렉토리 사용
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

INSTALLED_APPS = [
    'django.contrib.admin',  # admin 앱 추가
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'appview'
    # 기타 앱'들...
]


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'database_d',
        'USER': 'users',
        'PASSWORD': '1234',
        'HOST': 'localhost',
        'PORT': '5432',
        'OPTIONS': {
            'client_encoding': 'UTF8',  # 인코딩을 UTF-8로 설정
        }
    }
}

DEBUG = True  #개발시 True 운영시 False 비꿔야함

# 정적 파일을 제공할 URL 경로
STATIC_URL = '/static/'  # 기본값으로 /static/ 경로 사용

ROOT_URLCONF = 'myproject.urls' 
SECRET_KEY = '6z1r5$e8@5vcf2x0z3@pt#9h%x8g2hl7m+5e90$&pftt&5h@fd'


 

postgres 데이터 베이스 database_d 생성 아이디 users 생성, 패스워드 1234 생성 , grant 권한부여

후에 

위 스크립트 작성후 터미널에


python manage.py makemigrations

python manage.py migrate

python manage.py runserver


처음 브라우저 출력시 테이블에 데이터가 없으므로


Book list

Not avaliavable


출력됨

 

postgres 데이터베이스 접속해서

postgres custom_book_table 테이블에 insert 쿼리 삽입


INSERT INTO custom_book_table (title, author, published_date, isbn_number, pages, language)
VALUES
    ('The Great Gatsby', 'F. Scott Fitzgerald', '1925-04-10', '9780743273565', 218, 'English'),
    ('1984', 'George Orwell', '1949-06-08', '9780451524935', 328, 'English'),
    ('To Kill a Mockingbird', 'Harper Lee', '1960-07-11', '9780061120084', 281, 'English'),
    ('Pride and Prejudice', 'Jane Austen', '1813-01-28', '9780141439518', 279, 'English'),
    ('Moby-Dick', 'Herman Melville', '1851-10-18', '9781503280786', 585, 'English');


SELCT * FROM custom_book_table;

 

insert 된 쿼리확인후

 

터미널에 python manage.py runserver 실행

 

브라우저창에

http://127.0.0.1:8000 

입력시 database_d 데이터베이스 custom_book_table 데이터

정상출력 확인