카테고리 없음

Django_앱, 마이그레이션, MTV

멍주다배 2025. 1. 7.

앱 생성 및 등록

  • 앱 등록: python manage.py startapp 앱이름
    • 앱은 프로젝트에서 독립적인 기능을 의미
#blog 앱 생성
python manage.py startapp blog

 

  • 앱 등록: myproject/settings.py의 INSTALLED_APPS에 앱 이름 추가하기
INSTALLED_APPS = [
    # 기존 앱들
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    # 새로 추가한 앱
    'blog',
]

 

모델 생성

  • 모델 정의: 앱의 models.py 파일에서 데이터베이스 모델을 정의
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)  			# 게시글 제목
    content = models.TextField()              			# 게시글 내용
    author = models.CharField(max_length=100) 			# 작성자 이름
    
    created_at = models.DateTimeField(auto_now_add=True)  # 생성 시간
    updated_at = models.DateTimeField(auto_now=True)      # 수정 시간

    def __str__(self):
        return self.title

 

  • 모델 마이그레이션: 모델의 변경 사항을 데이터베이스에 반영
    • python manage.py makemigrations
      • 모든 앱의 모델 마이그레이션이 실행됨
    • 원하는 앱의 모델을 지정해서 마이그레이션 하는 것이 실수를 예방할 수 있음 
      • 개발 시 앱 기능 구현 완료 여부에 따라 별도 적용 가능
      • 프로젝트 생성 후 첫 마이그레이션 생성은 앱 이름 생략해야 함
#모든 앱의 모델 마이그레이션이 실행
python manage.py makemigrations

#blog 앱 모델 마이그레션 파일 생성
python manage.py makemigrations blog

#데이터베이스에 반영
python manage.py migrate blog

🌟데이터베이스 확인

  • 데이터베이스 연결: control + shift + p ->  ‘SQLite: Open Database’ 선택 -> db 선택
  • sqlite 새로고침
  • 데이터 베이스 접속 후 테이블에 컬럼이 추가 됐는지 확인하기!

🌟마이그레이션 사용해보기

  • 마이그레이션 확인
    • 버전 관리, 마이그레이트 적용/미적용 확인 가능 => 롤백 가능
python mange.py showmigration

0003까지 마이그레이트 적용 완료

  • 마이그레이션의 sql문 확인: python manage.py sqlmigrate 앱이름 마이그레이션번호 
python manage.py sqlmigrate blog 0003

 

  • 마이그레이션 롤백 (과거 환경의 테이블로 돌아감)
    • 롤백 후 데이터베이스 확인하기
#0003 적용을 지우고 0002로 가고싶음
python manage.py migrate blog 0002

0003 적용 해제 후 0002로 롤백
롤백 후 마이그레이션 확인
다시 마이그레이트 적용
마이그레이트 적용 확인 - 다시 0003까지 적용 완료

  • 초기 마이그레이션(0001)으로 돌아가기
python manage.py migrate blog zero

초기 마이그레이션으로 돌아가기
전체 적용 해제됨
다시 마이그레이트 적용
0003까지 적용 완료

  • 아예 마이그레이션 지우기
    • 마이그레이션 적용이 안된 파일만 삭제 =>마이그레이션 적용 해체 후 삭제하기
    • 마이그레이션은 이전 버전에 대한 의존성을 가짐. 신중하게 잘 지워야 함!!
마이그레이션 파일 삭제

관리자 페이지에 모델 등록

  • 관리자 계정 생성
python manage.py createsuperuser

 

  • 모델 등록: admin.py에 등록
from django.contrib import admin
from .models import Post

admin.site.register(Post)

 

  • 관리자 페이지 접속
    • 서버 실행 후 관리자 페이지(http://127.0.0.1:8000/admin/)접속
python manage.py runserver

 

URL 및 뷰 설정

  • URL 설정
    • 앱 디렉토리에 urls.py 파일을 생성
    • myproject/urls.py에 앱의 URL을 포함
#앱 디렉토리 urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),  #블로그 메인 페이지
]
#myproject/urls.py

from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),  #blog 앱 URL 등록
]

 

  • 뷰(view) 작성: views.py 파일에서 메인 페이지 정의
from django.shortcuts import render
from .models import Post

def index(request):
    posts = Post.objects.all()  # 모든 게시글 가져오기
    return render(request, 'blog/index.html', {'posts': posts})

 

  • 템플릿(template) 생성: blog/templates/blog/index.html 파일 생성 후 작성
<!DOCTYPE html>
<html>
<head>
    <title>Blog</title>
</head>
<body>
    <h1>Blog Posts</h1>
    <ul>
        {% for post in posts %}
            <li>{{ post.title }} - {{ post.author }}</li>
        {% endfor %}
    </ul>
</body>
</html>