초보자를 위한 장고 뿌시기 3 Django로 모델링하기

|

goormedu의 초보자를 위한 장고 뿌시기를 보고 공부한 것을 정리합니다.

처음으로 프로젝트를 생성하면 아래와 같은 파일 구조가 만들어진다. 프로젝트명은 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

의 명령어가 실행된다.

장고에서의 모델링

  1. models.py에서 모델링
  2. python manage.py makemigrations로 주문서를 만든다 : migration은 생성될 테이블 정보를 담은 주문서 cf) 테이블 : 모델의 설계를 그대로 데이터베이스에 저장한 형태
  3. python manage.py migrate로 주문서 내역대로 테이블 생성 (실제 데이터베이스에)
  4. 서버는 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