Djangoプロジェクト事始め
note初投稿となります。手始めにDjangoプロジェクトを始める手順です。
ある程度Djangoの知識のある方が、手戻りの無いようにプロジェクトを開始できる為のヒントになれば良いですね。
プラットフォームはmac、DBはmysqlを使用。Python3系とmysqlはインストール済み。プログラムソースはgithubで管理する前提です。
仮にPMやPLがgithubのプロジェクトを作成するとして、「ココまでやっといてくれると!」みたいな所までを記事にしてます。
github
pipによるDjango関連パッケージのインストール
Djangoプロジェクトの作成
DB作成
settings.pyの開発環境用設定
githubにpush
1. github
githubにリポジトリを作成し、cloneする所から始めます。本稿ではgithubの操作は割愛いたします。
% git clone git@github.com:xxxxxxxx/myproj.git
% ls
myproj
gitignoreファイルの作成
gitignore.io等で、環境に合わせたファイルを作成します。
2. pipによるDjango関連パッケージのインストール
venvで仮想環境を作成し、Djangoをインストールします。DBは本稿では
① 仮想環境の作成
② pipを最新にアップデート
③ Djangoは執筆時点のLTSである3.2系の最新バージョンをインストール
④ mysqlclientをインスール
% cd myproj
myproj % python -m venv venv
myproj % source venv/bin/activate
(venv) myproj % pip install -U pip
(venv) myproj % pip install 'Django<3.3'
Collecting Django<3.3
Using cached Django-3.2.12-py3-none-any.whl (7.9 MB)
:
(venv) myproj % pip install mysqlclient
:
3. Djangoプロジェクトの作成
Djangoプロジェクトを作成します。
(venv) myproj % django-admin startproject config .
(venv) myproj %
「django-admin startproject」のパラメータとして、settings.pyの作成ディレクトリを「config」とし、現在のディレクトリ「.」にプロジェクトを作成するようにしています。こうする事でディレクトリが1階層深くならず、settings.pyの位置がconfigディレクトリの中に収まるので(きっと)わかり良いディレクトリツリーになりますね。
(venv) myproj % tree
.
├── manage.py
├── config
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── readme.md
:
4.DB作成
mysqlにDBを作成します。
DB名:testdb
ユーザ名:test
パスワード:PASSWD
文字コード:utf8mb4
% sudo mysql -u root
mysql> create database testdb character set utf8mb4;
mysql> set global validate_password_length=6;
mysql> set global validate_password_policy=LOW;
mysql> create user 'test'@'localhost' identified by 'PASSWD';
mysql> grant all privileges on testdb.* to 'test'@'localhost';
mysql> flush privileges;
5. settings.pyの開発環境用設定
settings.pyの開発環境用設定を作成します。
将来的に本番環境いデプロイする想定で、DBのパスワード、DjangoのSECRET_KEYはgit管理外にするのが良いでしょう。
本番用の設定は後日作成するとして、開発環境と本番環境の共通部分を分離し、開発環境用の設定を作成します。
(venv) myproj % cd config
(venv) config % mkdir settings
(venv) config % cp settings.py settings/base.py
(venv) config % mv settings.py settings/develop.py
(venv) config % touch settings/__init__.py
startprojectで作成したsettings.pyをベースとして、base.pyとdevelop.pyを作成します。
# base.py
from pathlib import Path
import os
BASE_DIR = Path(__file__).resolve().parent.parent.parent
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'config.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'config.wsgi.application'
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "assets")
]
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'static'
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
# develop.py
from .base import *
SECRET_KEY = 'django-insecure-)sz2%dv3rj)k4wx5bb=nl3(@++t=rm@!d46k39=4n16i_a4fe5'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ['*']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdb',
'USER': 'test',
'PASSWORD': 'PASSWD',
'OPTIONS': {
'charset': 'utf8mb4',
},
}
}
develop.pyを設定として読むよう、__init__.pyに記述します。(環境変数に設定した方がよいですが、わかりやすくとりあえずコレで。)
# __init__.py
from .develop import *
templatesとassetsディレクトリを作成しておきます。
(venv) myproj % mkdir templates
(venv) myproj % mkdir assets
(venv) myproj % touch templates/.gitignore
(venv) myproj % touch assets/.gitignore
Djangoからmigrateします。エラー無く作成したDBにDjango関連のテーブルが作成されればOKです。runserver可能かも確認します。
(venv) myproj % python manage.py migrate
:
(venv) myproj % python manage.py runserver
:
(CTRL+C)
6. githubにpush
これでプロジェクトメンバーにプログラミングをお願いする土台が大体できたと思います。「readme.md」にDBの作成方法等環境構築に必要な情報を、記入してcommitしましょう。
(venv) myproj % git add .
(venv) myproj % git commit -m 'add:Django project create'
(venv) myproj % git push
mainブランチはリリース用とし、メンバーにはdevelopブランチで開発(正確にはdevelopから機能毎にブランチを切って開発)してもらう為、developブランチを作成してpushしています。
(venv) myproj % git branch develop
(venv) myproj % git checkout develop
(venv) myproj % git push origin develop
以上です。お疲れ様でした。
この記事が気に入ったらサポートをしてみませんか?