Django 2.1 시작 – project, app 만들기.
환경: Python 3.7, Django 2.1, MacOS
1. virtual env 생성
virtual env는 선택사항이지만, 프로젝트별로 설치되는 모듈이 다르므로 사용하면 여러가지 장점이 있다.
원하는 디렉토리로 이동하고 아래 명령어를 실행하면 Django 디렉토리가 생성되며 가상환경을 만들어준다.
$ virtualenv Django
Using base prefix '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7'
New python executable in /Users/snowfox/Documents/Django/bin/python3.7
Also creating executable in /Users/snowfox/Documents/Django/bin/python
Installing setuptools, pip, wheel...done.
이제, 가상환경을 활성화한다. 활성화되면 프롬프트 앞쪽에 가상환경의 이름이 ()와 함께 추가된다.
$ . bin/activate
(Django) $
이제, django 프레임워크를 설치해야 한다. pip 명령어로 설치한다.
$ pip install django
Collecting django
Downloading https://files.pythonhosted.org/packages/54/85/0bef63668fb170888c1a2970ec897d4528d6072f32dee27653381a332642/Django-2.2-py3-none-any.whl (7.4MB)
100% |████████████████████████████████| 7.5MB 1.5MB/s
Collecting pytz (from django)
Using cached https://files.pythonhosted.org/packages/61/28/1d3920e4d1d50b19bc5d24398a7cd85cc7b9a75a490570d5a30c57622d34/pytz-2018.9-py2.py3-none-any.whl
Collecting sqlparse (from django)
Downloading https://files.pythonhosted.org/packages/ef/53/900f7d2a54557c6a37886585a91336520e5539e3ae2423ff1102daf4f3a7/sqlparse-0.3.0-py2.py3-none-any.whl
Installing collected packages: pytz, sqlparse, django
Successfully installed django-2.2 pytz-2018.9 sqlparse-0.3.0
이제 Django를 사용할 준비가 끝났다.
2. project와 app
Django에서는 project와 app이라는 개념이 존재한다. project는 한개 이상의 app으로 구성되는데, 쇼핑몰 사이트를 예로 들면, 쇼핑몰이라는 project 안에, 관리자 app, 상품등록 app, 사용자 등록/관리 app, 커뮤니티 app 등의 app으로 구성할 수 있다. 물론, 하나의 project가 단 하나의 app으로만 만들어 질 수도 있다.
Django project는 아래와 같이 만들 수 있다.
$ django-admin startproject projectZ
이제, projectZ라는 디렉토리가 만들어지고, 그 아래 django 기본 화일들이 생성된다.
(Django) $ tree
.
├── manage.py
└── projectZ
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
1 directory, 5 files
이제, 내장 웹 서버를 실행하면, django 시작 페이지를 볼 수있다. 내장 웹서버는 아래 명령어로 실행한다.
(Django) $ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
April 02, 2019 - 12:25:47
Django version 2.2, using settings 'projectZ.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
웹브라우저를 실행하고 http://localhost:8000 을 입력하면 아래와 같은 화면을 볼 수있다.(정상작동한다면)
이제, manage.py 를 실행하여 app을 만든다.
(Django) $ python manage.py startapp first
(Django) $ tree
.
├── db.sqlite3
├── first
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
└── projectZ
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
3 directories, 13 files
app 이름인 first디렉토리와 그 아래 몇가지 화일들이 생성된 것을 볼 수 있다.
admin.py : Django 내장 관리자 app
apps.py : app 자체 설정 파일
migrations : models.py에 설정된 데이타베이스를 위한 디렉토리로 models.py의 변경내용이 기록된다.
models.py : Django ORM으로 데이타베이스를 정의한다.
tests.py : 테스트를 위한 코드를 작성.
views.py : app의 response/request를 처리하는 코드가 위치하는 파일
3. 이제, 간단한 페이지를 만들어 보자.
먼저, 프로젝트의 settings.py 파일에 first app을 등록한다.
projectZ/settings.py
...
INSTALLED_APPS = [
'first.apps.FirstConfig', #이줄 추가한다.first/apps.py 에클래스 FirstConfig가 있다.
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
...
first app의 views.py에 아래 함수를 작성한다.
first/views.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def firstpageview(request):
return HttpResponse('This is First Django App.')
first app 디렉토리에 urls.py 파일을 생성하고(urls.py 파일은 기본적으로 존재하지 않는다), url을 등록한다.
아래 코드에서, url 이름이 ‘index’이다.
first/urls.py
from django.urls import path
from .views import firstpageview
urlpatterns = [
path('', firstpageview, name='index'),
]
이제, project에 app의 url을 등록해준다.
projectZ/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('', include('first.urls')), # first app의 url등록
path('admin/', admin.site.urls),
]
이제, 다시 django 내장 웹서버를 실행시키고 localhost:8000 을 입력하면, 지금까지 작성한 페이지를 볼 수 있다.