일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- PYTHON
- form
- 알고리즘 풀이
- Algorithm
- 알고리즘 문제
- javascript
- js
- django rest framework
- 파이썬
- 파이썬 알고리즘
- HTML
- java
- 백준
- Git
- DRF
- 알고리즘
- Baekjoon
- CSS
- web
- django widget
- react
- 장고
- MAC
- es6
- Django
- c++
- AWS
- django ORM
- 알고리즘 연습
- API
- Today
- Total
수학과의 좌충우돌 프로그래밍
[Django] 기본세팅하기 본문
기본 세팅하기
기존에 django 를 이용하여 Hello World
를 출력해보는 기초를 알아보았습니다.
이번에는 좀 더 나아가서 기본세팅을 정형화 해보도록 하겠습니다.
-
프로젝트의 이름
프로젝트 이름은
project
로 , 그 하위 폴더는config
로, 중심이 되는 app은core
로 하도록 하겠습니다. 다만 프로젝트와 그 하위 폴더의 이름은 자동으로 같게 되기 때문에 프로젝트의 이름을config
로 생성 후 최상단 디렉토리를project
로 바꿔줍니다. -
settings 파일
장고 프로젝트를 생성하면 기본적으로
setting.py
가 생성된다. 여기서 여러 설정을 해줄 수 있는데 우리는 개발할 경우, 배포할 경우에 따라 설정이 달라야 합니다. 그래서setting.py
대신settings
라 디렉토리를 만들어 그 안에 다음과 같이 python 파일들을 만들어주었습니다.-
common.py
- 기본 setting.py와 같은 내용입니다.
-
dev.py
-
개발환경으로서 common.py를 상속받은 후에 개발 환경에서 원하는 세팅들을 추가해줍니다. 다음은 하나의 예로서 개발 시에는 개발자가 debug toolbar 를 사용하는 방법입니다.
pip install django-debug-toolbar
from .common import * INSTALLED_APPS += ["debug_toolbar"] MIDDLEWARE += ["debug_toolbar.middleware.DebugToolbarMiddleware"] INTERNAL_IPS = ["127.0.0.1"] # 해당 아이피에서만 툴바가 보입니다. ```
또한 config의
urls.py
도 다음 내용을 추가해줍니다.from django.contrib import admin from django.urls import path, include from django.conf import settings from django.conf.urls.static import static urlpatterns = [ path('admin/', admin.site.urls), path('', include('core.urls')), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # DEBUG == ture 일 때만 보인다. if settings.DEBUG: import debug_toolbar urlpatterns += [ path('debug', include(debug_toolbar.urls)), ]
- pip로 설치 후 dev.py 에 아래 코드를 추가해줍니다.
-
wsgi.py 와 manage.py 를 다음과 같이 변경해주어야 합니다.
# 기존 코드 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.dev')
그 후에 다시 migrate 를 헤줘야하는데 이 때 db 가 전부 날라가므로 조심하셔야 합니다.
-
prod.py
배포시 설정할 setting 입니다. DEBUG 를 꺼주고 배포 상황에 따라 추가적인 설정을 해줍니다.
from .common import * DEBUG = False ALLOWED_HOSTS = []
-
-
-
secret key
환경변수를 이용하는 방법도 있지만 좀 더 쉬운 json 파일을 이용하였습니다.
manage.py
와 같은 경로에secrets.json
파일을 만들고 그 안에 key 값을 적어주었습니다.{ "SECRET_KEY": "c_o2tp33=1o434-ec*y$2avd#m9-p5)7nij=x#^ 이하 생략" }
이 외에도 소셜 로그인을 위한 OAuth 키 값들을 넣어줄 수 있으며 key 값은 타인이 봐서는 안되기 때문에 뒤에서 다룰 .gitignore에 추가해줘야 합니다.
그 후 settings, 위에서 새로 바꾼 common.py 에서 다음과 같이 불러올 수 있습니다.
import json from django.core.exceptions import ImproperlyConfigured secret_file = join(BASE_DIR, './secrets.json') # secrets.json 파일 위치를 명시 with open(secret_file) as f: secrets = json.loads(f.read()) def get_secret(setting, secrets=secrets): """비밀 변수를 가져오거나 명시적 예외를 반환한다.""" try: return secrets[setting] except KeyError: error_msg = "Set the {} environment variable".format(setting) raise ImproperlyConfigured(error_msg) SECRET_KEY = get_secret("SECRET_KEY")
-
static 폴더
static 폴더는 config 아래와 core 아래에 각각 만들어주어야 합니다. 자세한 이유는 아래 링크에 나와있습니다.
# settings.py 아래 추가할 내용 import os from os.path import abspath, dirname, join # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = dirname(dirname(dirname(abspath(__file__)))) STATIC_URL = '/static/' STATICFILES_DIRS = [ join(BASE_DIR, 'config', 'static') ] STATIC_ROOT = join(BASE_DIR, '..', 'static') MEDIA_URL = '/media/' MEDIA_ROOT = join(BASE_DIR, '..', 'media')
-
views 세분화
기존의
views.py
에는 장고에서 controller 를 담당하며 기능을 수행하는 함수들이 위치합니다. 따라서 기능에 따라 함수를 세분화하여 표현하고자, views 라는 디렉토리를 만들고 이 안에 기능별로 파일을 만들어줍니다. 조심해야할 점은views.py
의 경로가 바꿔었으므로url.py
등에서 import 할 때 조심해야 합니다.views 디렉토리안에 views.py를 import 하기 위해서는 다음과 같이 해줘야합니다.
# core/views.py from .views import views
-
requirements.txt
-
.gitignore
.gitignore는 git이 변경사항을 캐치하지 못하게 막아줍니다.
https://gitignore.io/
에 접속하면 어떤 걸 ignore 해야하는지 알 수 있습니다. 추가적으로 위에서 만든 requirements.txt 와 secrets.json 도 작성해줍니다.
'웹프로그래밍 > Django' 카테고리의 다른 글
[Django] OneToOne 방법으로 User Model 확장 (7) | 2019.05.04 |
---|---|
[Django] 효율적인 url 관리 (2) (0) | 2019.05.04 |
[Django]투표 기능 구현하기 (0) | 2019.04.06 |
[django] 글 수정 시 기존의 내용 불러오기 (0) | 2019.04.04 |
[Django] 17. 글 삭제 및 수정 구현하기 (4) | 2019.03.24 |