초보자를 위한 장고 뿌시기 3 Django로 모델링하기
20 Jan 2020 | django pythongoormedu의 초보자를 위한 장고 뿌시기를 보고 공부한 것을 정리합니다.
처음으로 프로젝트를 생성하면 아래와 같은 파일 구조가 만들어진다. 프로젝트명은 MyFirstDjango로 설정하였다.
MyFirstDjango
|_ MyFirstDjango
|_ __init__.py
|_ settings.py
|_ urls.py
|_ wsgi.py
|_ manage.py
__init__.py
: python ver 2대에서 패키지임을 알려주는 모듈settings.py
- 장고의 설정 파일. 중요!
- 조금만 설정하면 어려운 기능도 쉽게 구현할 수 있게 해 준다.
INSTALLED_APPS
: 어떤 앱들이 설치되어 있는지DATABASE
: 기본은 sqlite3 (보통 로컬 환경에서 작동하며, 실제 서비스 운영에는 부적합)
urls.py
: application의 경로 설정- 기본적으로 관리자 페이지를 제공
urlpatterns = [
path('admin/', admin.site.urls),
]
wsgi.py
: web server gateway interface -> Nginx 등의 웹 서버와 장고 어플리케이션을 연결해주는 파이프라인 같은 것manage.py
: 다양한 명령어를 장고에서 실행할 수 있도록 해 준다.
실행을 누르면
python3 /workspace/MyFirstDjango/manage.py migrate && python3 /workspace/MyFirstDjango/manage.py runserver 0.0.0.0:80
의 명령어가 실행된다.
장고에서의 모델링
- models.py에서 모델링
- python manage.py makemigrations로 주문서를 만든다 : migration은 생성될 테이블 정보를 담은 주문서 cf) 테이블 : 모델의 설계를 그대로 데이터베이스에 저장한 형태
- python manage.py migrate로 주문서 내역대로 테이블 생성 (실제 데이터베이스에)
- 서버는 control+c로 종료
python manage.py startapp 앱이름 으로 앱을 생성
python manage.py startapp posts
cf) tab으로 자동완성 가능 하고 엔터를 누르면posts
라는 폴더가 생성된다.
posts
|_ migrations
|_ __init__.py
|_ admin.py
|_ apps.py
|_ models.py
|_ tests.py
|_ views.py
|_ manage.py
admin.py
: 관리자 페이지를 설정tests.py
: 테스트 진행view.py
: 요청을 받고 응답을 주는 곳
즉, MTV를 조작할 수 있는 부분이 생성된다!
한편 이 후에 INSTALLED_APPS에서 posts가 설치되었다는 것을 알려주어야 한다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'posts',
]
그렇지 않으면 python manage.py migrate
명령어를 실행했을 때 No change detected 가 출력된다. 즉, 장고에서 posts app의 존재를 알 수 있도록 해 주어야.
posts에서 models.py
에 모델을 생성해준다. model은 장고에서 class의 개념!
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
view_count = models.IntegerField(default=0)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
auto_now_add
: 자동으로 현재 시간이 입력됨auto_now
: 자동으로 생성 혹은 수정될 때의 현재 시간이 입력됨
INSTALLED_APPS
에 추가하고, python manage.py makemigrations
명령어를 실행하면
Migrations for 'posts':
posts/migrations/0001_initial.py
- Create model Post
-> posts를 위한 주문서가 ‘0001_initial.py’로 생성되었다!
해당 파일에 들어가 보면
# Generated by Django 2.2.4 on 2020-01-13 05:40
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Post',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=200)),
('content', models.TextField()),
('view_count', models.IntegerField(default=0)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
],
),
]
id
: autofield (자동으로 생성되는 필드), 기본키
그리고 python manage.py migrate
명령어를 터미널에 실행시키면 DB에 테이블 형태로 Post가 생성된다! 해당 테이블은 python shell에서 확인할 수 있다. 터미널에 python manage.py shell
을 입력하면 shell을 이용할 수 있다.
먼저 import를 해 줘야 한다.
In [1]: from posts.models import Post
In [2]: Post.objects.create(title="간장게장 담그는 법", content="알이 꽉 찬 꽃게를 간장에 담근다.")
Out[2]: <Post: Post object (1)>
- new object 생성
In [3]: Post.objects.all()
Out[3]: <QuerySet [<Post: Post object (1)>]>
Post.objects.all()
==Select * From Post
In [4]: post = Post.objects.get(id=1)
In [5]: post.title
Out[5]: '간장게장 담그는 법'
In [6]: post.content
Out[6]: '알이 꽉 찬 꽃게를 간장에 담근다.'
In [7]: post.view_count
Out[7]: 0
In [8]: post.created_at
Out[8]: datetime.datetime(2020, 1, 13, 5, 48, 3, 723162, tzinfo=<UTC>)
위와 같이 모든 attribute를 확인할 수 있다!
Comments