Web Programming/Django

[Django] Django 설치 및 튜토리얼 뽀개기! - 1편

uding9 2023. 3. 1. 17:31
반응형

[Django 설치 및 프로젝트 생성]

1. Django 설치 방법

python -m pip install Django

 

2. 'mysite'라는 프로젝트 만들기

django-admin startproject mysite

현재 디렉토리 안에 'mysite'라는 디렉토리가 생성되며 구조는 다음과 같음 (디렉토리 구조 보는 명령어: tree /a /f )

 

3. 프로젝트가 잘 돌아가는지 확인

manage.py 가 있는 디렉토리에서 아래 명령어 실행

python manage.py runserver _____ (포트 혹은 서버 IP 바꾸려면 빈칸에 추가하면 됨)

http://127.0.0.1:8000/ 에 접속하면 아래와 같은 화면이 뜸 => 성공!

 

[설문조사 앱(App) 만들기]

manage.py 가 있는 디렉토리에서 아래 명령어 입력해서 설문조사 앱 만들기

python manage.py startapp polls

polls 앱이 생성되고 디렉토리 구조는 다음과 같음

 

mysite/polls/ 안의 views.py에 아래와 같은 코드를 작성

from django.http import HttpResponse

def indes(request):
    return HttpResponse("Hello, world.")

 

이 코드를 실행하기 위해서는 mysite/polls/ 안에 urls.py 파일을 생성해야 함

그리고 아래와 같은 코드 작성

urls.py 역할은 views.py 내의 함수와 url을 연결해줌

from django.urls import path

from . import views
urlpatterns = [
    path('', views.index, name='index')
]

 

mysite/mysite/urls.py을 아래와 같이 추가하여 mysite/polls/urls.py 의 path들이 연결되도록 함

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

 

Terminal 창에서 아래 명령어를 입력해 서버 실행

python manage.py runserver

이후 http://localhost:8000/polls/ 에 접속하면 views.py의 index 함수가 실행된 것을 볼 수 있음

 

[모델 만들고 활성화]

데이터베이스 테이블 생성

python manage.py migrate

 

mysite/polls/models.py 에 Question, Choice 두 개의 모델 생성

Django에서 모델은 데이터베이스 구조로 생각하면 됨

from django.db import models

# Create your models here.
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

 

프로젝트에 polls 앱이 있다는 것을 알려야 함

mysite/mysite/settings.py 의 INSTALLED_APPS 에 다음과 같이 polls.apps.PollsConfig 추가

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

 

아래 명령어를 통해 모델 변경사항을 저장

 

모델과 관련된 테이블 생성

python manage.py migrate

 

* 모델을 변경 or 추가하는 단계

  • (models.py 에서) 모델을 변경
  • python manage.py makemigrations => 변경사항에 대한 마이그레이션 생성
  • python manage.py migrate => 변경사항을 데이터베이스에 적용

 

아래는 좀 더 추가한 mysite/polls/models.py

import datetime

from django.db import models
from django.utils import timezone

# Create your models here.
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

 

[Django 관리자]

관리자 생성

python manage.py createsuperuser

 

관리자 사이트에서 Question 을 관리하도록 하려면 mysite/polls/admin.py 에 아래 코드 추가

from django.contrib import admin
from .models import Question

admin.site.register(Question)

 

반응형