Django Python 技術ログ

毎日Python_14日目 / Djangoで「Hello World!」を表示

2020年10月5日

【ページ更新日: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の基本的な開発手順は、以下のとおりです。

  1. プロジェクトを作成する
  2. その中にアプリケーションを複数作成する(Next)
  3. 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ファイルにインポートしてください』
という意味です。

django.urlsについて

便利な関数がたくさん格納されている倉庫的なファイルです。

この倉庫から、使いたい関数をインポートして持ってきておくことで、使用できるようになります。

  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!」が表示されたら成功です。

  • この記事を書いた人
  • 最新記事

Maita Tomoya / yone

2020.4~Webアプリケーションエンジニアとして都内の企業で働き、空いている時間でブログを運営している29歳男です。本ブログは情報の整理をするため、文章を書く機会を作るために始めました。1記事でも多く「誰かのためになる記事」を書けるように頑張ります!転職前は地方の高校で働いていました。教育関係の記事も定期的に書いていきたいと思います。

-Django, Python, 技術ログ