앱 생성 및 등록
- 앱 등록: 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
#모든 앱의 모델 마이그레이션이 실행
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
- 마이그레이션의 sql문 확인: python manage.py sqlmigrate 앱이름 마이그레이션번호
python manage.py sqlmigrate blog 0003
- 마이그레이션 롤백 (과거 환경의 테이블로 돌아감)
- 롤백 후 데이터베이스 확인하기
#0003 적용을 지우고 0002로 가고싶음
python manage.py migrate blog 0002
- 초기 마이그레이션(0001)으로 돌아가기
python manage.py migrate blog zero
- 아예 마이그레이션 지우기
- 마이그레이션 적용이 안된 파일만 삭제 =>마이그레이션 적용 해체 후 삭제하기
- 마이그레이션은 이전 버전에 대한 의존성을 가짐. 신중하게 잘 지워야 함!!
마이그레이션 파일 삭제
관리자 페이지에 모델 등록
- 관리자 계정 생성
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>