ホーム >  VPS >  ConoHaでDjangoのモデル作成


Posted:2018/03/05 9:00:41 AM|Category : VPS

ConoHaでDjangoのモデル作成

ConoHaVPSにセットアップしたDjangoのモデルをマイグレーションし、テーブルを作成します。

モデルを作成

前回は、Djangoのプロジェクトにアプリケーションを作成しました。今回は、モデルは、Djangoの”モデル”を使用し、テーブルを追加します。

モデルとは?

手持ちのデータに対する唯一の決定的なソースです。モデルには、自分が格納したいデータにとって、必要なフィールドと、そのデータの挙動を記載します。

作業の流れ

投票アプリを制作します。そのために、投票項目が格納されているQuestionテーブル(モデル)と、Questionの投票項目のテキストなどを格納するChoiceテーブル(モデル)を作成します。

  • モデル作成
  • settings.pyの編集
  • マイグレーション

モデル作成からマイグレーションスクリプト実行までの流れ

  • モデル作成(各アプリのmodels.py)
  • プロジェクトにアプリケーション読み込み(mysiteのsettings.pyのINSTALLED_APP)
  • モデルを元にマイグレーションスクリプトを作成(makemigrations)
  • マイグレーションスクリプトを実行(migrate)

準備

以下の準備を行います。

ConoHaVPSの準備

①ConoHaをレンタルします。

ConoHaVPSをレンタルしてみる

②ConoHaにroot以外のユーザを作ります。

ConoHaのroot以外のユーザを作る

③ConoHaにSSH接続するための設定を行います。

ConoHaのSSH接続

④ConoHaへのrootログインを禁止します。

rootからのログインを禁止

⑤ConoHaのportを22から変更します。

SSH接続するportを22から変更

⑥ConoHaVPSへApacheをインストールしてスタートページを表示します。

ConoHaのVPSにApacheインストール

Python・Djangoの準備

①ConoHaVPSへPython3をインストールします。

ConoHaのVPSにPython3環境を作る

②ConoHaVPSへPython3をインストールします。

ConoHaのVPSにPython3環境を作る

③ConoHaVPSへWSGIをインストールします。

ConoHaのVPSにApacheでPythonWebアプリを作る(WSGI)

④ConoHaVPSへDjangoをインストールします。

ConoHaのVPSにDjango環境を作る

⑤Djangoのデータベース接続・初期化します。

ConoHaでDjangoのデータベース接続・初期化

⑥Djangoのプロジェクトにアプリケーションを作成します。

ConoHaでDjangoのアプリケーション作成

必要なもの

レンタルサーバ ConoHaのVPSサーバ
独自ドメイン ムームードメインで、独自ドメインのみ取得。2年契約で(2,000〜3,000円)くらい?

ConoHaVPSの環境

アプリケーションサーバ OS CentOS7.4
Apache 2.4.6 (CentOS)
Python 3.6.4
mod-wsgi 4.5.24
Django 2.0.2
mysqlclient 1.3.12
PyMySQL 0.8.0

クライアントPC

操作開発用のクライアントPCを用意します。windowsでもmacでも可能ですが、今回はubuntuを利用します。

OS Ubuntu 16.04.1 LTS 64bit

モデル作成

すでにtest_djangoプロジェクトが作成済みとします。今回はtest_djangoプロジェクトに、pollsアプリケーションを作成します。

プロジェクト名 test_django
アプリケーション名 polls

①VPSにログインします。

前回作った仮想環境を起動します。

cd
. test_django/bin/activate

モデルを作成

①プロジェクトディレクトリへ移動します。

cd /var/www/cgi-bin/test_django/

test_djangoプロジェクト、pollsアプリケーションのディレクトリ構成は以下のようになります。赤文字は、追加・変更するファイルです。

  • /var/www/..省略../test_django/
  • db.sqlite3
  • manage.py
  • test_django/
  • __init__.py
  • __pycache__
  • settings.py
  • urls.py
  • wsgi.py
  • polls/
  • __init__.py
  • __pycache__
  • admin.py
  • apps.py
  • migrations
  • settings.py
  • models.py
  • tests.py
  • urls.py
  • views.py

②pollsディレクトリのmodels.pyを編集します。

sudo vi polls/models.py

以下のように編集します。

from django.db import models

# Create your models here.


class Question(models.Model):
    quesion_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

settings.pyの編集

前回も設定しましたが、モデルを有効にするため設定ファイルの変更を行います。使用するアプリケーションをDjango上で定義するためです。

①settings.pyの「Application definition」の最下部にpollsを追加します。

sudo vi test_django/settings.py

以下のように編集します。

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls.apps.PollsConfig',
]

マイグレーション

「INSTALLED_APPS」の追加ができたら、マイグレーションスクリプトを作成します。マイグレーションとは、Djangoがモデルの変更をディスク上のファイルに保存する方法です。

①以下のコマンドを実行し、マイグレーションスクリプトが作成します。

python manage.py makemigrations polls

makemigrationsを実行することで、Djangoのモデルに変更があった事を伝えます。そして変更をマイグレーションの形で保存できます。作成されたマイグレーションは、各アプリケーションのmigrationsディレクトリに番号で格納されます。

今回作成した、マイグレーションスクリプトは以下の様になります。

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Choice',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('choice_text', models.CharField(max_length=200)),
                ('votes', models.IntegerField(default=0)),
            ],
        ),
        migrations.CreateModel(
            name='Question',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('quesion_text', models.CharField(max_length=200)),
                ('pub_date', models.DateTimeField(verbose_name='date published')),
            ],
        ),
        migrations.AddField(
            model_name='choice',
            name='question',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='polls.Question'),
        ),
    ]

②モデルは作成できましたが、まだデータベースには反映されていません。マイグレーションスクリプトを実行します。

python manage.py migrate

また、マイグレーションスクリプトを指定して、どの様なSQLが発行されるかを確認する事も可能です。

python manage.py sqlmigrate polls 0001

以下のような結果が出ます。

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
  Applying polls.0001_initial... OK

次回

次回は、Djangoに静的ファイルの設定をします。

ConoHaVPSに設置したDjangoの管理画面にCSSを適用


トラックバック用のURL
プロフィール

名前:イワサキ ユウタ 職業:システムエンジニア、ウェブマスター、フロントエンドエンジニア 誕生:1986年生まれ 出身:静岡県 特技:ウッドベース 略歴 20

最近の投稿
人気記事
カテゴリー
広告