目次
ゴールの確認
以下は最終的なディレクトリ構造です。
.
├── config
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── core
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models
│ │ ├── __init__.py
│ │ └── user.py
│ ├── serializers
│ │ ├── __init__.py
│ │ └── userSerializer.py
│ ├── tests
│ │ └── __init__.py
│ └── views
│ ├── __init__.py
│ └── userView.py
├── Pipfile
├── Pipfile.lock
└── manage.py
準備とプロジェクト作成
必要なファイルを作成
.gitignore
次にgitの管理対象から外すファイル・フォルダを指定します。
$ touch .gitignore
$ echo -e ‘.venv\n.env\nPipfile.lock’ >> .gitignore
.env
$ touch .env
仮想環境にライブラリをインストール
まずは、pipenvを用いて仮想環境を構築していきます。構築した仮想環境内に開発で使うライブラリをインストールします。
$ pipenv --python 3.7
Pipfileが生成されたと思うので、下記の様に編集してください。
Pipfileの[scripts]に以下のように定義することで、短いコマンドを指定できます。
[dev-packages]
pylint = "*"
[packages]
django = "==2.2"
djangorestframework = "*"
gunicorn = "*"
mysqlclient = "*"
[scripts]
server = "python manage.py runserver"
shell = "python manage.py shell"
makemigrations = "python manage.py makemigrations"
sqlmigrate = "python manage.py sqlmigrate"
migrate = "python manage.py migrate"
showmigrations = "python manage.py showmigrations"
check = "python manage.py check"
createsuperuser = "python manage.py createsuperuser"
wsgi = "gunicorn config.wsgi:application"
$ pipenv install
プロジェクトを作成
$ pipenv run django-admin startproject config .
アプリケーションを作成(core)
$ pipenv run django-admin startapp core
アプリケーションの読み込みと設定変更
INSTALLED_APPS = [
・・・
'rest_framework', # 追加
'core.apps.CoreConfig', # 追加
]
ALLOWED_HOSTS = ['*'] # 変更
LANGUAGE_CODE = 'ja' # 変更
TIME_ZONE = 'Asia/Tokyo' # 変更
Modelを作成
__init__.py
from .user import User
user.py
from django.db import models
class User(models.Model):
class Meta:
db_table = 'users'
name = models.CharField(max_length=50)
email = models.CharField(max_length=254)
password = models.CharField(max_length=128)
address = models.CharField(max_length=50, null=True)
last_login = models.DateTimeField(null=True)
is_active = models.BooleanField()
def __str__(self):
return self.name
本来はカスタムユーザーを作成します。カスタムユーザーについては、以下を参考にしてください。
カスタムユーザーサンプル
データベースとの接続
MySQL内にデータベースを作成
$ mysql -u root
> create database [データベース名];
接続情報の編集
.env
DB_NAME=[データベース名]
DB_HOST=[ホスト名]
DB_PORT=[ポート番号]
DB_USERNAME=root
DB_PASSWORD=
config/settings.py
接続するデータベースをMySQLに変更し、
import os
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': os.environ['DB_HOST'],
'PORT': os.environ['DB_PORT'],
'NAME': os.environ['DB_NAME'],
'USER': os.environ['DB_USERNAME'],
'PASSWORD': os.environ['DB_PASSWORD']
}
}
テーブルを作成(migrateを実行)
$ pipenv run python manage.py migrate
Serializerを作成
__init__.py
from .userSerializer import UserSerializer
userSerializer.py
from rest_framework import serializers
from core.models import User
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ['id', 'name', 'email']
Viewを作成
__init__.py
from .userView import UserViewSet
userView.py
from django.http import HttpResponse
from rest_framework import viewsets
from core.models import User
from core.serializers import UserSerializer
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
urls.pyを作成
urls.py
from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from core.views import UserViewSet
router = routers.DefaultRouter()
router.register('users', UserViewSet) # 'api/users/'
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include(router.urls)),
]