見出し画像

Djangoプロジェクト事始め

 note初投稿となります。手始めにDjangoプロジェクトを始める手順です。
ある程度Djangoの知識のある方が、手戻りの無いようにプロジェクトを開始できる為のヒントになれば良いですね。


プラットフォームはmac、DBはmysqlを使用。Python3系とmysqlはインストール済み。プログラムソースはgithubで管理する前提です。
仮にPMやPLがgithubのプロジェクトを作成するとして、「ココまでやっといてくれると!」みたいな所までを記事にしてます。

  1. github

  2. pipによるDjango関連パッケージのインストール

  3. Djangoプロジェクトの作成

  4. DB作成

  5. settings.pyの開発環境用設定

  6. githubにpush


1. github

 githubにリポジトリを作成し、cloneする所から始めます。本稿ではgithubの操作は割愛いたします。

(Tips)
githubでリポジトリを新規で作成する際は、同時にreadme.mdを作成し、mainブランチがある状態で始めるのが楽かと思います。

% 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
        :

(Tips)
 執筆時点でDjangoの最新バージョンは4.0.2です。今回は業務での利用を想定し、LTSバージョンである3.2の最新版を使用することにしました。
 この場合「pip install 'Django<3.3'」とすると自動的に3.2のLatestがインストールできます。他にも「pip install Django==」としダウンロード可能なバージョン一覧を調べたのち、「pip install Django==3.2.12」とバージョン指定してダウンロードする方法もあります。

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を作成します。

デフォルトのディレクトリ配置は、下記の通り変更しています。
templeteファイルはmyproj/templatesディレクトリ
staticファイルはmyproj/assetsディレクトリ

# 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

(Tips)
GitHubに空のディレクトリを上げる時は、その対象となるディレクトリに.gitkeep or .gitignoreファイルを作成しておきます。
(何もファイルが無いディレクトリはGitHubにアップされません。)
これは私の好みですが、プログラムから操作するテンポラリ用のディレクトリには.gitkeepを置いて、「ディレクトリだけ作ったので、ここにファイル置いてね」みたいな場合は.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

以上です。お疲れ様でした。

この記事が気に入ったらサポートをしてみませんか?