【ページ更新日:2020年10月5日】
毎日Pythonでは、毎日簡単なPythonのプログラムコードを紹介していきます。
PythonのフレームワークであるDjangoの説明をしていきたいと思います。
本ページは、以下のページの続きの内容となります。
>>> 毎日Python_13日目「Djangoのプロジェクト作成」
今日は、Djangoで「Hello World!」をブラウザ上に表示させる方法を説明します。
プロジェクトフォルダの説明
昨日、作成したプロジェクトフォルダ「first」を使用します。
Djangoプロジェクトの中身
Djangoプロジェクトを作成したときに生成された、各ファイルの紹介をします。
cdコマンドでプロジェクトフォルダに移動し、中身の確認を行います。
$ ls
このように、プロジェクトフォルダ「first」の中には3つのフォルダ/ファイルが入っています。
- db.sqlite3
- first
- manage.py
※これは、アプリケーションフォルダを作成する前の段階です
manage.py
このファイルは、Djangonoを管理するためのファイルです。
「開発用サーバーの起動」や「データベースの処理」などについて書かれています。
db.sqlite3
このファイルはデータベースに書き込みを行うときに使用されます。
このファイルを、データベースそのものだと思ってOKです。
Djangoではデフォルト(標準設定)でSQLiteが使用されるため、ファイル名に"sqlite"が入っています。
このファイルはプロジェクト作成時にはありませんでした。
開発用サーバーを初めて立ち上げたときや、migrateを行ったときに作成されます。
↓開発用サーバー立ち上げ前
↓開発用サーバー立ち上げ後
first
プロジェクトフォルダfirstの中に、さらにfirstというフォルダが作成されています。
中身は、次のとおりです。
- __pycache__:pythoで使うフォルダ
- __init__.py:初期化用のファイル
- settings.py:Djangoプロジェクト全体の設定を定義するファイル
- urls.py:URLに対応した処理を定義するファイル
- wsgi.py:本物のWebサーバーを使用する時に使うファイル
基本的な初期設定
基本的な初期設定として以下の設定を行います。
- 言語設定の変更
- タイムゾーンの変更
言語設定とタイムゾーンの変更
first / first / settings.pyを開き次のように書き換えてください。
↓変更前
# Internationalization # https://docs.djangoproject.com/en/3.1/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True
107行目の「en-us」を「ja」変更します。
109行目の「UTC」を「Asia/Tokyo」に変更します。
↓変更後
# Internationalization # https://docs.djangoproject.com/en/3.1/topics/i18n/ LANGUAGE_CODE = 'ja' TIME_ZONE = 'Asia/Tokyo' USE_I18N = True USE_L10N = True USE_TZ = True
アプリケーションフォルダの作成と内容
Djangoの基本的な開発手順は、以下のとおりです。
- プロジェクトを作成する
- その中にアプリケーションを複数作成する(Next)
- Djangoにアプリケーションを読み込ませていく
アプリケーションフォルダの作成
プロジェクトフォルダ内にアプリケーションフォルダを作成していきます。
プロジェクトフォルダに移動して、ターミナル上で次のコマンドを実行します。
これは、「initial_app」という名前のアプリケーションフォルダを作成するコマンドです。
名前は自由に設定できます。
↓macの場合
$ python3 manage.py startapp initial_app
↓windowsの場合
$ py manage.py startapp initial_app
このように、プロジェクトフォルダ内にアプリケーションフォルダ「initial_app」が作成されていればOKです。
アプリケーションフォルダの説明
先ほど作成したアプリケーションフォルダの中は次のとおりです。
- migrations:データベース関連のフォルダ(触れない)
- __init__.py:初期化用のファイル
- admin.py:管理画面の設定をするファイル
- apps.py:Djangoアプリケーションの設定をするファイル
- models.py:データの読み込み・書き込みを設定するファイル
- tests.py:Djangoアプリケーションのテストを書くファイル
- views.py:呼び出される処理を書いていく(1番いじる)
Hello World!を表示する
それでは、シンプルなページを作成し「Hello World!」を表示します。
アプリケーションを登録する
first / first / settings.pyに作成したアプリケーションを登録します。
※「first / first / settings.py」は「firstフォルダ内のfirstフォルダ内のsettings.py」という意味です。
first / first / settings.pyを開き、コードを追加します。
↓追加前
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
33行目の「INSTALLED_APPS」にアプリを追加します。
34行目に次のコードを追加します。
'initial_app.apps.InitialAppConfig',
※リストの要素として追加しているので、最後の「,」を忘れないように。
このコードは、
『initial_appアプリケーションのパッケージのappsモジュールのInitialAppConfigクラス』
を指定しているコードです。
↓追加後
INSTALLED_APPS = [ 'initial_app.apps.InitialAppConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
ここで、『initial_appアプリケーションのパッケージのappsモジュールのInitialAppConfigクラス』があるか確認してみましょう。
first / initial_app / apps.py を開きます。
from django.apps import AppConfig class InitialAppConfig(AppConfig): name = 'initial_app'
このように、『initial_appアプリケーションのパッケージのappsモジュールのInitialAppConfigクラス』があることが確認できます。
「initial_appアプリケーションのパッケージ」は「initial_app」フォルダのことです。
「appsモジュール」は「apps.py」ファイルのことです。
この「InitialAppConfigクラス」は、アプリケーションフォルダを作成したときに自動で生成されています。
クラス名の付き方
- アプリケーション名を参考に付けられる
- 頭文字を大文字になる
- アンダースコア( _ )は省略される
- アンダースコアのあとは大文字になる
- 最後に「Config」が付く
firstフォルダ内のurls.pyを編集する
first / first / urls.py を編集します。
↓変更前
from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ]
17行目のimportするものに、「include」を追加します。
21行目に新しいpathを追加します。
↓変更後
from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('initial_app/', include('initial_app.urls')) ]
追加部分の説明をします。
from django.urls import path,include
この1行は、
『django.urlsファイルから、「path関数」と「include関数」を使えるように、このurls.pyファイルにインポートしてください』
という意味です。
便利な関数がたくさん格納されている倉庫的なファイルです。
この倉庫から、使いたい関数をインポートして持ってきておくことで、使用できるようになります。
path('initial_app/', include('initial_app.urls'))
この1行には、先ほどインポートした「path関数」と「include」関数が使われています。
↑読みにくいメモですみません。
このpath関数には、カッコの中にカンマで区切られた2つの入力スペースがあります。
path( ココと , ココ!)
このようなスペースを「引数(ひきすう)」といいます。
引数とは、「関数に渡す値」のことです。
一方で、「関数から返ってくる値」を、「返り値」または「戻り値」といいます。
数学の関数 f(x)=2x で説明します。
この関数 f に、x = 5 を渡すと、10になります。
このとき、5を「引数」、10を「返り値」といいます。
add(x, y) = x + y について
この関数 addに、 x = 4 , y = 7 を渡す
そうすると、11が返ってきました。
このとき、関数 add の引数は4と7で、返り値は10です。
つまり、path関数の引数は2つあります。
それぞれ、なにが入っているか確認します。
- 1つ目の引数:'initial_app/'
- 2つ目の引数:include('initial_app.urls')
path関数の1つ目の引数には「パス名」を入れます。
これによって「http://127.0.0.1:8000/initial_app」というURLにアクセスがあったときの処理を決めることができます。
path関数の2つ目の引数には「その処理」を入れます。
include('initial_app.urls')
これは、「initial_appフォルダのurls.pyファイルを読み込め」という意味です。
この「 . 」は拡張子を表すものではありません。
フォルダとファイルを区切る役割を持っています。
include('フォルダ名 . ファイル名')
まとめると、
path('initial_app/', include('initial_app.urls'))
は、『URL「http://127.0.0.1:8000/initial_app」にアクセスがあったら、initial_appフォルダのurls.pyファイルを読み込め』という意味になります。
ここで、読み込むファイルを確認してみましょう。
これはVSCodeのサイバーですが、みなさんもinitial_appフォルダの中身を確認してみてください。
initial_appフォルダの中には、urls.pyファイルは存在しません!
(※firstフォルダにはurls.pyが存在するが、別物なので注意!)
そのため、initial_appフォルダに、urls.pyファイルを作成していきます。
アプリフォルダ内のurls.pyを作成する
アプリケーションフォルダ(initial_app)の中に、urls.pyファイルを作成していきます。
initial_appフォルダを選択し、右クリックを押して新しいファイルを作成します。
ファイル名は「urls.py」です。
そして、作成したurls.pyの中身を次のように書きます。
※このurls.pyはアプリケーションフォルダ内のurls.pyです。
※urls.pyはたくさん作られる可能性があるので、どのフォルダのものか確認するようにしましょう。
from django.urls import path from . import views app_name = 'initial_app' urlpatterns = [ path('', views.index, name = 'index') ]
views.pyを作成する
上記のfirst / initial_app / urls.py で呼び出される「views.py」というファイルを編集していきます。
first / initial_app / views.py ファイルを開き、中身を次のように変更します。(全部消して、書き直してOKです)
from django.http import HttpResponse def index(request): return HttpResponse("Hello, World!")
サーバーを起動してHello World!を確認する
それでは、開発用サーバーを起動してブラウザ上で「Hello World!」が表示されるか確認してみましょう。
まず、2つ目のターミナルをサーバー用に準備します。
ターミナルを新規ウィンドウで表示してください。
cdコマンドでプロジェクトファイルに移動したら、ターミナル上で次のコマンドを実行し、開発用サーバーを起動させます。
$ python3 manage.py runserver
このように表示されたら成功です。
次に、Google Chromeなどのブラウザ上部に、以下のURLを入力してください。
http://127.0.0.1:8000/initial_app/
このように、ブラウザ上に「Hello World!」が表示されたら成功です。