Django Setup 專案初始化
假設我們想要建立一個django專案(1.9版本,linux為例),命名為mysite,並且不想要將特定的設定上傳,可以如何做:
clone你的倉庫(myrepo)至本地
建立虛擬環境
可以透過指令或IDE,我習慣會將環境命名為venv,然後放在專案目錄下
1 2 3 |
~/myrepo$ python3 -m venv venv ~/myrepo$ source venv/bin/activate |
1 2 3 |
myrepo └── venv |
安裝django並開始一個專案
1 2 |
(venv)~/myrepo$ pip install django==1.9 |
初始化django專案
1 2 |
(venv) ~/myrepo$ django-admin.py startproject mysite . |
別忘了把你安裝的套件加到mysite/requirements.txt
1 2 |
Django==1.9 |
這時候你的tree應該長這樣
1 2 3 4 5 6 7 8 9 10 |
myrepo ├── manage.py ├── mysite │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ ├── wsgi.py │ └── requirements.txt └── venv |
客製化設定檔
共同協作的時候,根據每個人習慣會有不同的設定:如資料庫、語言等,而且設定檔裡會有一些不該公開的資訊,如email密碼跟專案的key等,
這時候我們會需要將設定檔分成多個檔案,並透過.gitignore來忽略不想上傳的設定
1 2 3 4 5 6 |
settings ├── __init__.py ├── base.py ├── local.py └── production.py |
你會需要透過__init__.py
來控制setting module
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# __init__.py from .base import * try: from .local import * except: pass try: from .production import * except: pass |
將不想公開(共用)的設定移到local.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# local.py import os # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '48s6l1_m3g=z8vq98lf#%l8f!s$s#qu-hmv--n8svqu$gm!+21' # Postgres DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mysite', 'USER': 'postres', 'PASSWORD': '*****', 'HOST': 'localhost', 'PORT': '5432', } } |
別忘了在myrepo/.gitignore加入這些檔案
1 2 3 4 |
# .gitignore mysite/settings/local.py mysite/settings/production.py |
新增一個後台administrator
1 2 |
(venv) ~/myrepo/mysite$ python manage.py createsuperuser |
開啟web server
1 2 |
(venv) ~/myrepo/mysite$ python manage.py runserver |
註記
這個時候你就可以放心將你的專案push出去了,完成後你的tree會是這個樣子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
myrepo ├── manage.py ├── mysite # 我會習慣將project重新命名為src │ ├── __init__.py │ ├── settings │ │ ├── base.py │ │ ├── __init__.py │ │ ├── local.py │ │ └── production.py │ ├── urls.py │ ├── requirements.txt │ └── wsgi.py └── venv |
如果你的專案很肥的話,設定的參數超過上百行,你會需要找個更好的方式來管理你的設定檔,例如:Django Split Settings
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from split_settings.tools import optional, include include( 'components/base.py', 'components/database.py', 'components/*.py', # the project different envs settings optional('envs/devel/*.py'), optional('envs/production/*.py'), optional('envs/staging/*.py'), # for any local settings optional(‘local_settings.py'), ) |
至於後續的app的新增等,可以參考這些文章: