0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DjangoでAPIを実装する(前半)

Posted at

はじめに

この記事は、DjangoでAPIを実装する手順について記載します
My備忘録を兼ねています

目次

  1. 仮想環境の作成
  2. Djangoでアプリ作成
  3. MySQLへの接続切替
  4. 環境変数を別ファイルで管理

実装手順

1. 仮想環境の作成

ルートディレクトリに仮想環境を作成するため、以下のコマンドを実行

% python3 -m venv venv

作成した仮想環境には以下のコマンドで入ることができます

% source venv/bin/activate
↑ 開発PCがUNIX系の場合

% venv\Scripts\activate
↑ 開発PCがWindowsの場合

仮想環境から出るときは以下のコマンドを実行

(venv) % deactivate

(注意)pip installでパッケージをインストールするときは仮想環境に入って実行しましょう

2. Djangoでアプリ作成

仮想環境に入ります

% source venv/bin/activate
↑ 開発PCがUNIX系の場合

% venv\Scripts\activate
↑ 開発PCがWindowsの場合

仮想環境でdjangoパッケージをインストール

(venv) % pip install django

以下のコマンドを実行して、Djangoプロジェクトを作成します

(venv) % django-admin startproject config .

apiアプリケーションを追加します

(venv) % python manage.py startapp api

ここまで完了したら、正常に作成されたか確認します
以下のコマンドを実行してhttp://127.0.0.1:8000/にアクセス

(venv) % python manage.py runserver

image.png

画面が表示されたら、正常にプロジェクトが作成されていることになります

3. MySQLへの接続切替

DjangoはデフォルトでSQLiteに接続されているので、ローカルのMySQLに切り替えます
事前に下記の準備をしてください(詳細については割愛します)

  • 接続先のデータベースを作成
  • 接続用のユーザを作成
  • 作成ユーザの権限設定

MySQLに接続するため、MySQLクライアントパッケージをインストールします

(venv) % pip install mysqlclient

データベースへの接続情報は/config/settings.pyに記載されています
この設定ファイルを修正します

/config/settings.py
DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': BASE_DIR / 'db.sqlite3',
        'ENGINE': 'django.db.backends.mysql', # MySQLに接続
        'NAME': 'db',                         # 作成したデータベース名
        'USER': 'user',                       # 作成した接続用のユーザ名
        'PASSWORD': 'password',               # ユーザのパスワード
    }
}

接続先をMySQLに変更したら、Djangoの機能でデータベースを構築します

(venv) % python manage.py makemigrations
(venv) % python manage.py migrate

SQLiteは使用しないので、デフォルトで作成されているルートディレクトリのdb.sqlite3は削除してください

最後に正常に起動するか確認します

(venv) % python manage.py runserver

4. 環境変数を別ファイルで管理

データベースへの接続情報など公開したくない情報があると思います
このような情報は別ファイル(以後、環境ファイル)で管理して公開しないようにします

まずは必要なパッケージをインストールします

(venv) % pip install django-environ

ルートディレクトリに.env(環境ファイル)を作成します
作成したら以下のように記載してください(値は必要に応じて変更してください)

.env
SECRET_KEY='xxxx'

DEBUG=TRUE

DB_ENGINE='django.db.backends.mysql'
DB_NAME='db'
DB_USER='user'
DB_PASSWORD='password'

SECRET_KEYのxxxxには、/config/settings.pyのSECRET_KEYの値を入力します
このSECRET_KEYも公開してはいけない情報なので、環境ファイルで管理します

DEBUGは開発・本番環境で切り替えることが多いです
ですので、DEBUGのオンオフも環境ファイルで管理します

また、データベースの接続情報も環境ファイルで管理します

(注意)環境ファイルにスペースが入るとエラーの元になるので、スペースは入れないようにしてください

次に/config/settings.pyを編集します

/config/settings.py
import environ # 追加
import os      # 追加

~(省略)~

# 環境ファイルの読み込み
env = environ.Env()                           # 追加
env.read_env(os.path.join(BASE_DIR, '.env'))  # 追加

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env('SECRET_KEY') # 変更

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = env.bool('DEBUG')      # 変更

~(省略)~

# Database
# https://docs.djangoproject.com/en/5.0/ref/settings/#databases

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': BASE_DIR / 'db.sqlite3',
        'ENGINE': env('DB_ENGINE'),     # 変更
        'NAME': env('DB_NAME'),         # 変更
        'USER': env('DB_USER'),         # 変更
        'PASSWORD': env('DB_PASSWORD'), # 変更
    }
}

作成した環境ファイルと読み込んで、env('環境変数')で読み出すことができます

ここまで完了したら正常に起動するか確認します

(venv) % python manage.py runserver

最後に.gitignoreでプッシュ対象外を記載して完了です

.gitignore
.env
venv

これで環境ファイルがGitHubにプッシュされることはなくなりました
また、venvもプッシュする必要がないので対象外にします

最後に

ここまででDjangoでAPIを実装する準備は整いました
次回から本格的にAPIの実装部分を記載します
(次回は未作成です。作成次第リンク張ります)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?