メモ:django
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
メモ:django [2019/05/29 14:34] – [テスト用の内部サーバ起動] Wiki Editor | メモ:django [2019/06/05 17:30] (現在) – [app01/app01/urls.py] Wiki Editor | ||
---|---|---|---|
行 44: | 行 44: | ||
起動コマンドでIPアドレスにアサインすることと、設定ファイルの接続許可が両方正しく設定されて、初めて外部から接続できる。うまく起動できれば、http:// | 起動コマンドでIPアドレスにアサインすることと、設定ファイルの接続許可が両方正しく設定されて、初めて外部から接続できる。うまく起動できれば、http:// | ||
+ | ===== その他の基本設定 ===== | ||
+ | app01/ | ||
+ | |||
+ | 言語やタイムゾーンを設定 | ||
+ | |||
+ | LANGUAGE_CODE = ' | ||
+ | TIME_ZONE = ' | ||
===== アプリケーションの作成 ===== | ===== アプリケーションの作成 ===== | ||
行 67: | 行 74: | ||
return HttpResponse(" | return HttpResponse(" | ||
- | === app01/ | + | ==== app01/ |
URLのディスパッチ設定。アプリケーションレベルのURLはここでディスパッチする。このファイルは、プロジェクトレベルのURLディスパッチにインクルードして使う。アプリケーション作成時には自動作成されない。 | URLのディスパッチ設定。アプリケーションレベルのURLはここでディスパッチする。このファイルは、プロジェクトレベルのURLディスパッチにインクルードして使う。アプリケーション作成時には自動作成されない。 | ||
- | urlpatternsにURLとViewの対応を設定する。ここでは「'' | + | urlpatternsにURLとViewの対応を設定する。ここでは「%%'' |
from django.urls import path | from django.urls import path | ||
from . import views | from . import views | ||
行 78: | 行 86: | ||
] | ] | ||
- | === app01/ | + | ==== app01/ |
プロジェクトレベルのURLディスパッチ | プロジェクトレベルのURLディスパッチ | ||
行 93: | 行 101: | ||
- | 以上を設定すると、http:// | + | 以上を設定すると、%%http://[IP Address]: |
+ | |||
+ | |||
+ | ===== Model ===== | ||
+ | データベースからデータを呼び出したり保存したりする。直接クエリを発行するのではなく、オブジェクトを介して操作。 | ||
+ | |||
+ | ==== データベース ==== | ||
+ | 開発途中は取りあえずSQLiteを利用する。本番環境ではPostgreSQLなりMySQLに切り替える。データベースの定義はDjangoが自動的に生成してくれるので、バックエンドはあまり意識する必要はない。とりあえず、設定ファイルだけ確認しておく。 | ||
+ | |||
+ | app01/ | ||
+ | DATABASES = { | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | } | ||
+ | } | ||
+ | |||
+ | 標準ではSQLiteが使われる。 | ||
+ | |||
+ | Djangoのフレームワークとして必要なテーブルを作成し準備を整える。 | ||
+ | |||
+ | $ python manage.py migrate | ||
+ | |||
+ | 設定ファイルを参照し、必要なテーブルをデータベースに生成する。 | ||
+ | |||
+ | 初期に必要なテーブルは、settings.pyのINSTALLED_APPに列挙されているフレームワークの組み込みアプリケーションを中心に生成される。自分で作成したアプリケーションでモデルを作成すると、migrateによって必要なテーブルが作成される。 | ||
+ | |||
+ | ==== Modelの作成 ==== | ||
+ | モデルの定義を作成する。 | ||
+ | |||
+ | app01/ | ||
+ | |||
+ | from django.db import models | ||
+ | |||
+ | class Choice(models.Model): | ||
+ | categ_code = models.CharField(max_length=10) | ||
+ | categ = models.CharField(max_length=200) | ||
+ | hs_code = models.CharField(max_length=10) | ||
+ | hs = models.CharField(max_length=200) | ||
+ | |||
+ | def __str__(self): | ||
+ | return self.categ + self.hs | ||
+ | |||
+ | class Report: | ||
+ | hs_code = models.ForeignKey(Choice, | ||
+ | report_field01 = models.CharField(max_length=1000) | ||
+ | report_field02 = models.CharField(max_length=1000) | ||
+ | report_field03 = models.CharField(max_length=1000) | ||
+ | |||
+ | def __str__(self): | ||
+ | return str(hs_code) + self.report_field01 | ||
+ | |||
+ | |||
+ | 1つのテーブルは1つのクラスとして定義される。クラスのサブクラスや変数で様々な挙動が設定できる。最も基本的な設定として、クラスの変数がデータベースに対応する。変数にデータの型や外部キーなどを設定していく。 | ||
+ | |||
+ | クラス内の「__str__」関数は、モデルのオブジェクト表現となる。管理画面で一覧表示するときなどに使われる文字列を定義できる。 | ||
+ | ==== Modelをフレームワークに認識させる ==== | ||
+ | migrationでテーブルを管理するために、フレームワークに作成したアプリケーションを認識させる必要がある。先に示したsettings.pyのINSTALLED_APPに列挙すればよい。 | ||
+ | |||
+ | |||
+ | app01/ | ||
+ | |||
+ | INSTALLED_APPS = [ | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ] | ||
+ | |||
+ | ここで記述するのはアプリケーションのクラス名となる。プロジェクトディレクトリからクラスをたどって記述する。ここでは、reportアプリケーションのapps.pyファイルに定義されているReportConfigクラスとなる。このクラスはstartappでアプリケーションを作成した際に自動的に生成される。 | ||
+ | |||
+ | ===== データベースへの反映 ===== | ||
+ | 定義したモデルに対応してバックエンドのデータベースを作成する。 | ||
+ | $ python manage.py makemigrations report | ||
+ | makemigrationsコマンドでモデルの変更を検出し、migrationの定義ファイルを生成する。ポイントは、この時点でデータベースへの変更は一切行われていない点である。migrationの定義内容は、report/ | ||
+ | migrationで実行される具体的なSQLを確認する。 | ||
+ | $ python manage.py sqlmigrate report 0001 | ||
+ | 最後の引数はmigrationの定義ファイルのファイル名に対応する。何度もモデルを変更すると、そのたびにmigrationが生成され、履歴が残るようになっているようだ。対象となるファイルのmigration内容を確認するために、ファイルの番号を指定する。 | ||
+ | 必要なテールが意図通りに作成されることが確認できれば、再度migrationを行いバックエンドのデータベースに反映させる。 | ||
+ | $ python manage.py migrate | ||
メモ/django.txt · 最終更新: 2019/06/05 17:30 by Wiki Editor