21. 웹 프로그래밍(게시판)
21.1 주요 기능
21.1.1 글목록, 글쓰기, 수정, 삭제
21.1.2 검색 기능
21.1.3 페이지 나누기
21.1.4 댓글 쓰기, 댓글 목록
21.1.5 파일 업로드, 다운로드
21.2 Django와 mysql 연동
21.2.1 mysql 스크립트
21.2.2 mysql 패키지 설치
pip install pymysql
21.2.3 settings.py 설정
import pymysql
pymysql.install_as_MySQLdb()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'pyweb', # DB명
'USER': 'java', # 데이터베이스 계정
'PASSWORD': 'java1234', # 계정 비밀번호
'HOST': 'localhost', # DB서버 주소(IP)
'PORT': '3306' # 데이터베이스 포트(보통은 3306)
}
}
21.3 Django 게시판 만들기 실습
21.3.1 프로젝트 만들기
[New] - [Other] - [PyDev] - [PyDev Django Project]
프로젝트 이름: pyweb_board
pyweb_board 디렉토리가 2개 만들어진다.
D:\work\pyweb_board
D:\work\pyweb_board\pyweb_board - python 웹프로젝트의 설정 디렉토리
21.3.2 기본 테이블 생성
d:
cd work/pyweb_board
python manage.py migrate
21.3.3 슈퍼 유저 생성
cd work/pyweb_board
python manage.py createsuperuser
아이디와 비밀번호만 입력, 이메일은 생략 가능
비밀번호는 8자 이상이어야 하고 영문자 + 숫자로 구성해야 함
username: admin
password: admin1234
21.3.4 애플리케이션 생성
python manage.py startapp board
board 관련 디렉토리가 만들어진다.
이클립스에서 F5를 눌러 새로고침
21.3.5 settings.py
테이블을 새로 만들기 위해 models.py와 admin.py 2개의 파일을 수정해야 함
- models.py: 테이블에 대한 모델 클래스 정의
- admin.py: models.py에 등록한 테이블이 Admin 사이트에서도 보이도록 처리
테이블을 하나의 클래스로 정의하고 테이블의 컬럼은 클래스의 변수로 매핑
테이블 클래스는 django.db.models.Model 클래스를 상속받아 정의
변수 자료형도 장고에서 미리 정의된 자료형을 사용한다.
21.3.7 board/admin.py
Admin 사이트에 테이블 반영
from django.contrib import admin
from board.models import Board
# Register your models here.
class BoardAdmin(admin.ModelAdmin):
list_display=("writer", "title", "content")
admin.site.register(Board, BoardAdmin)
21.3.8 데이터베이스 변경 사항 반영
지금까지 코드로 작업한 모델 클래스들을 DB에 반영
cd work/pyweb_board
python manage.py makemigrations
python manage.py migrate
21.3.9 웹서버 구동
python manage.py runserver localhost:80
웹브라우저에서 http://localhost/admin
21.3.10 pyweb_board/urls.py
from django.conritb import admin
from django.urls import path
from django.conf import settings
from django.conf.urls import url, include
from board import views
urlpatterns = [
# 관리자용 사이트
path('admin', admin.site.urls),
# 게시판 관련 url
path('', views.list),
path('write', views.write),
path('insert', views.insert),
path('detail', views.detail),
path('update', views.update),
path('delete', views.delete),
path('download', views.download),
path('reply_insert', views.reply_insert),
]