$ conda create -n django python=3.8
: 'django' 라는 이름을 가진 가상환경 생성
$ conda env list
: 'django' 가상환경이 있는지 확인
$ conda activate django
: 'django' 가상 환경에 접속
$ python3 -m pip install --upgrade pip
: 가상환경에 pip 설치
$ pip install django~=2.0.0
: 장고 설치
$ mkdir je_django
$ cd je_django
$ django-admin startproject django_project .
: 'django_project' 위치에 프로젝트 이름을 입력 후 정상적으로 생성되었는지 확인
- 프로젝트 생성 결과
je_django
ㄴ manage.py
ㄴ django_project
ㄴ init.py
ㄴ settings.py
ㄴ urls.py
ㄴ wsgi.py
🖥 settings.py 변경
# 해당 시간대로 변경
TIME_ZONE = 'Asia/Seoul'
# 정적파일 경로 추가
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# 호스트 설정
# '*' : 모든 곳으로부터 접속 허용
# '127.0.0.1' : http://127.0.0.1:8000/ 로 접속시 접속 허용
ALLOWED_HOSTS = ['*']
$ python manage.py startapp firstapp
: 프로젝트 내부에 별도의 애플리케이션 생성
- app 생성 결과
je_django/
ㄴ manage.py
ㄴ django_project/
ㄴfirstapp/
ㄴ init.py
ㄴ admin.py
ㄴ apps.py
ㄴ migrations
ㄴ models.py
ㄴ tests.py
ㄴ views.py
🖥 settings.py에 app 추가
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'firstapp'
]
🖥 urls.py에서 firstapp 애플리케이션 url 추가
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('firstapp.urls'))
]
$ vi firstapp/urls.py
: 애플리케이션에도 url 파일 생성
🖥 firstapp/urls.py에서 첫 번째 url 패턴 추가
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
]
🖥 models.py에 model 추가
from django.db import models
from django.utils import timezone
from django.conf import settings
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(
default=timezone.now)
published_date = models.DateTimeField(
blank=True, null=True)
def __str__(self):
return self.title
🖥 views.py
from django.shortcuts import render
def post_list(request):
return render(request, 'firstapp/post_list.html', {})
템플릿은 firstapp/templates/firstapp 디렉토리 생성
$ mkdir firstapp/templates
$ mkdir firstapp/templates/firstapp
$ vi post_list.html
$ python manage.py runserver
: post_list.html의 빈화면 생성된 것을 확인 가능
🖥 post_list.html (임의의 html file)
<html>
<head>
<title>Django Simple Project</title>
</head>
<body>
<p>Hi!</p>
<p>It works!</p>
</body>
</html>
새로운 모델(Post 모델)을 데이터베이스에 추가
$ python manage.py makemigrations firstapp
: django가 데이터베이스에 지금 반영할 수 있도록 마이그레이션 파일 준비
$ python manage.py migrate firstapp
: 실제 데이터베이스에 모델 추가
모든 권한을 갖고 있는 superuser 생성
$ python manage.py migrate
: admin, auth, contenttypes, session migrate
$ python manage.py createsuperuser
: 모든 권한을 가지는 슈퍼 사용자 생성
🖥 admin.py
from django.contrib import admin
from .models import Post
admin.site.register(Post)
$ python manage.py runserver
: Post 모델을 보기 위해 웹 서버 실행
http://127.0.0.1:8000/admin/
url로 접속하면 로그인 페이지 확인 가능
ps. 참고자료
https://tutorial.djangogirls.org/ko/django_start_project/
에러명 : django.db.migrations.exceptions.NodeNotFoundError
해결 방법 : migration 초기화
1) 프로젝트에 있는 모든 마이그레이션 파일 삭제
find . -path "/migrations/.py" -not -name "init.py" -delete
find . -path "/migrations/.pyc" -delete
2) 첫 마이그레이션을 생성한 뒤 데이터베이스 스키마 생성
python manage.py makemigrations
python manage.py migrate
3) 실행
python manage.py runserver
에러명 : 사이트에 연결할 수 없음
환경 : VM에서 django를 runserver 할 때 발생하는 문제
해결 방법 : python manage.py runserer 0:8000으로 실행 후, url은 ip:8000으로 접속