컴퓨터과학/Django

Django CRUD 웹 프로젝트 #1 빠른 프로젝트 생성하기

민유민민 2023. 4. 11. 23:00

장고를 이용하여 CRUD 블로그를 만드는 실습을 정리할 예정이다.

 

가상환경 설정

파이썬 프로젝트를 개발할 때마다 독립된 환경을 구축하는게 패키지나 버전 관리에 용이하므로, 가상환경을 만들겠다.

가상환경을 만드려면 일단 당연히 파이썬을 다운받아야한다.

(가상환경의 버전은 생성하는 파이썬의 버전과 일치한다.)

 

간단하게 python -m venv {가상환경이름}을 이용하여 가상환경을 생성한다.

python -m venv venv

그리고 가상환경을 사용할 때마다 아래와 같은 명령어를 입력한다.

#git bash 기준 venv가 있는 폴더에서 터미널로 실행시킬 경우
source venv/Scripts/activate

위와 같이 (venv)가 뜨면, 인터프리터가 가상환경에 적용을 받고 있다는 얘기이다.

그 후 Django와 pillow 를 install 해준다. (원하는 버전이 있다면 ==을 뒤에 붙여 버전을 명시한다.)

pip install django
pip install pillow

pillow 같은 경우에는 파이썬의 이미지 관리 라이브러리인데, 이미지를 띄우거나 저장 기능을 구현할 것이므로 pillow를 install 해줘야 한다.(안 해주면 model에서 Imagefield 값을 갖는 컬럼은 적용하지도 못하고 오류가 난다.)

 

장고 프로젝트 시작하기

프로젝트 생성

프로젝트 폴더를 생성할 디렉터리에서 명령어를 실행한다.

django-admin startproject {프로젝트명} . #.을 입력해야 CWD(Current Working Directory)에 프로젝트 폴더를 생성한다

서버 시작하기

python manage.py runserver

 

 

구현할 웹사이트 

간단하게 블로그 형태로, 포스팅하고 게시글 상세보기까지 할 수 있다.

앱 생성

스프링의 패키지처럼, 장고도 기능별로 분리된 작업 공간인 앱이 필요하다.

위에처럼 블로그의 기능을 가진 블로그 앱을 만든다고 하면

python manage.py startapp blog

이와 같은 모듈을 가진 앱 폴더가 생성된다.

이후에는 settings.py에 생성할 앱을 등록한다.

Settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog'
]

 

Models.py

테이블과 컬럼 그리고 속성등을 설정한다. 만약 포스트에 대한 테이블을 작성 시

class Post(models.Model):
    title = models.CharField(max_length=30)
    content = models.TextField() #글자수 제한 X

    created_at = models.DateTimeField(auto_now_add=True) # 컬럼에 추가될 때 생김
    updated_at = models.DateTimeField(auto_now=True) # 자동추가
    
    author = models.ForeignKey(User, null=True, on_delete=models.CASCADE) #CASCADE()XXX 지워지게 되면 그 함수를 실행하라 CALL-BACK

이런 식으로 작성해주면 된다. 

 

DB 생성

" 이하의 과정은 Model 작성 후 DB 테이블을 생성 및 적용하는 과정이다. "

 

Model 등에서 조작을 하여, 컬럼이 추가,삭제 및 속성이 변경되거나 테이블을 생성할 시에는 DB 테이블에 적용사항을 담은 migrations 파일을 생성한다.

python manage.py makemigrations

 

그리고 migrations을 DB에 적용하기 위한 명령어를 입력한다.

python manage.py migrate

관리자 계정 생성하기

관리자 권한으로 사이트를 관리하기 위해서는 관리자 계정을 생성하는 명령어를 입력한다.

python manage.py createsuperuser

아이디...비밀번호...이메일 등을 입력 후 

localhost:8000/admin으로 접속하면 

 

createsuperuser로 생성한 아이디/패스워드를 입력하고 로그인한다.

이렇게 로그인 할 수 있는 화면이 뜬다.

 

이후에는 각 모델에서 만든 테이블과 유저 관련한 조작을 할 수 있다. 참고로 관리페이지에 보이려면 미리 admin.py에 등록을 해야한다.

그러면 관리자 화면에 들어온다. 위에 테이블들은 admin.py에서 미리 등록시킨 것이다.

Admin.py

from django.contrib import admin
from .models import Post, Category, Tag
# Register your models here.

admin.site.register(Post)
admin.site.register(Category)
admin.site.register(Tag)

내가 작성한 Admin.py는 이러하다, 아직 Category나 Tag는 구축하지 않았으므로 그대로 따라할거면, 이 둘은 빼도 된다.

 

 

프로젝트 구조 

.
|-- README.md
|-- blog
|    |-- __init__.py
|    |-- admin.py
|    |-- apps.py
|    |-- models.py
|    |-- static
|    |-- templates
|    |-- tests.py
|    |-- urls.py
|    `-- views.py
|-- django_project
|    |-- __init__.py
|    |-- asgi.py
|    |-- settings.py
|    |-- urls.py
|    `-- wsgi.py
|-- manage.py

 

 

Project 내부 구조는 manage.py가 가장 바깥에 나와 있으며, project의 초기값등을 설정할 수 있는 django_project 폴더와 blog 앱을 생성한 뒤 blog앱 폴더가 있음을 확인할 수 있다. (참고로 교수님은 django_project 내부에 앱 폴더가 들어있는 형식이던데... 이런 식으로 하면 blog app을 못 찾는 일이 벌어진다.)

 

 

 

Trouble shooting

언젠가부터 manage.py makemigrations 시 DB 테이블이 생성되지 않는 문제가 생긴다.

이럴 때는 manage.py makemigrations blog 후 manage.py migrate blog 처럼 직접 앱을 명시하는 방법으로 해결할 수 있다.