0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google ColaboratoryでDjangoを動かそうと思ったらできなかった件

0
Posted at

はじめに

ポートフォリオの作成にあたり、Djangoの利用を検討しているため、Djangoってどういうものなのか?という点をまとめてみます。
プロジェクトの作成から、サーバー起動までを行うテスト運行の予定です。
参考にしている書籍等よりサンプルコードを用いて作成をしていますので、詳細については書籍についてもご確認いただければと思います。
VScodeよりも手軽に、GoogleColaboratoryで、お試し運用をしてみようと思います。

Django(ジャンゴ)とは

2005年にOSSとして公開されたWebアプリケーションフレームワークの一つで、PythonによるWebアプリケーション構築を手軽かつ効率よく進められるものです。

提供機能

  • MVCモデル:MVTアーキテクチャを採用しています。
  • ユーザー認証
  • Webフォームの送受信
  • DB連携:対応しているDBは、PostgreSQL/MySQL/SQLite/Oracle Databaseですが、他DBについても処理を行えば使用可能です。
  • 管理用サイト
  • セキュリティ
  • 国際化

Djangoが採用されているアプリの例

  • Instagram
  • Pinterest

Webアプリケーションの開発手順

  1. Djangoプロジェクトの作成
  2. 設定ファイルの修正
  3. Webアプリケーションの作成とDjangoプロジェクトへの登録
  4. Viewの定義
  5. URLディスパッチャーの作成
  6. 開発サーバーの起動
  7. 動作確認

実際にやってみた

環境:Google colaboratory

1. Djangoプロジェクトの作成

Djangoプロジェクトは、あるWebサイト向けに設定ファイルやWebアプリケーションを集めたものです。
1つのプロジェクトには複数のWebアプリケーションの登録でき、管理可能です。

code
# Djangoのインストール
pip install django

# importされたDjangoのバージョン確認
import django
django.get_version() #今回は'5.2.7'でした

# Djangoプロジェクトの作成
!django-admin startproject test_pr #test_pr:テスト用プロジェクト名

シェルコマンドの使用
! django-admin startproject test_pr
上記プロジェクトの作成部分のコードについては、colaboの環境がjupyter notebookをベースとしているため、シェルコマンドで記載をしないと下記エラーとなります。

image.png

ちなみに、2回目の !django-admin startproject test_pr を実行した場合は、下記のように怒られるので、気をつけてください。

CommandError: '/content/test_pr' already exists

プロジェクトの作成をすると、ファイル欄に下記の画像のようにディレクトリが作成されています。
image.png

ファイル名と、ファイル内に内包されているものについて、表を作成しています。

ファイル名 内包されているもの
test_pr(上位) プロジェクトのルートフォルダ。
test_pr(下位) Pythonのパッケージフォルダ。ここのファイル名でimportされる。
_init_.py パッケージとして使うために必要な空ファイル。
asgi.py ASGIのためのファイル。
settings.py プロジェクトの設定ファイル。
urls.py URL定義ファイル。サイトの目次に相当し、5.URLディスパッチャーの作成時に使用する。
wsgi.py WSGI互換Webサーバーエントリーポイントに使用。プロジェクトをWebサービスとして公開するのに必要ばファイル。
manage.py プロジェクトに対して、様々な操作を行うためのコマンドラインユーティリティ

気になる用語がでてきたので、<WSGI・ASGIについて>簡単にまとめます。
WSGI(Web Server Gateway Interface)(2003~):
HTTP1.1をサポートしている。
Webサーバー→アプリケーションフレームワークの部分のインターフェースを担当していて、単一の動機呼び出しを行う。(要求を受け取る ⇔ 応答を返す)

:grey_question::question: なぜ登場したのか :grey_question::question:
当時、フレームワークとサーバーが密に結合したものが多くなり、サーバー・フレームワークの選択が自由に選べなくなった:frowning2:

WSGIの登場

サーバー・フレームワークがそれぞれWSGIに対応をするようになった

サーバー・フレームワークの選択がより自由にできるようになった:relaxed:

----async\await が登場----

ASGI(Asynchronous Server Gateway Interface)(2016~):
WSGIの後継として登場した、非同期サーバーゲートウェイインターフェースのことで、HTTP1.1~WebSocket,HTTP/2をサポートしている。単一の非同期呼び出しができる。

WSGI/ASGIについて、自分なりのまとめ
サーバー・フレームワークが増えてきたので、一定の基準を設けて、各サーバー・各フレームワークが自由に選べるような対応基準であり、サーバー=フレームワーク間をつなぐもの。

2. 設定ファイル(settings.py)の修正

settings.pyの編集については、メモ帳などのOS標準のテキストエディタの使用が必須です。
settings.pyには、言語ゾーンやタイムゾーンの設定を書きます。DB利用の場合は、DB連携に必要な設定も書きます。

settings.py(100行目あたり)
image.png

settings.py
# 変更前:
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'

#変更後:
LANGUAGE_CODE = 'ja' # エラーメッセージなどが日本語化される
TIME_ZONE = 'Asia/Tokyo' #日本標準時

colabの場合は、ランタイムの接続が切れてしまうと最初からなので、気をつけてください。。。

3. Webアプリケーションの作成とDjangoプロジェクトへの登録

#test_pr(下位)に入ります
cd test_pr

#「startapp (Webアプリ名)」を指定
!python manage.py startapp myapp

ここもシェルコマンドでないとsyntax errorになるので気をつけてください。

作成したmy.appの中身については、下記のとおりです。
image.png

このアプリをプロジェクトに組み込むために、settings.pyへ一行足します。

settings.py
# 大体40行目くらいにあります
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp', # <=ここを追加しました
]

4. Viewの定義

views.pyで、表示したいコンテンツや、条件を定義します。
my.appのviews.pyをテキストエディタで開き、追加します。

views.py
from django.shortcuts import render
from django.http import HttpResponse # <=追加

# Create your views here.
# ここから追加
def index(request):
  html = "<h1> myappのウェルカムページです </h1>"
  return HttpResponse

def foo(request):
  html = "<h1> fooが指定されたときのページです </h1>"
  return HttpResponse
# ここまで

5. URLディスパッチャーの作成

ディスパッチ(dispatch) とは
複数のタスクを同時に実行するマルチタスク(マルチプログラミング)に対応したOSの制御機能のひとつで、実行可能状態のタスクの中から次に実行すべきタスクを選択してCPUの使用権を割り当てること。(引用:ITをわかりやすく解説)

ディスパッチャーで検索をすると、運行管理者の職業紹介のWebページがたくさん出てきました。
映画などでよくみる、空港の管制室にいるヘッドフォンを付けた方々のことでした。
説明とイメージを確認してみて、PC内で適切な行動処理ができるように指示サポートを行う機能というイメージが近いのではと感じています。

ここでは、Webブラウザ上で指定URLへのアクセスの際に、4.viewの定義で記載した index関数 の呼び出しを行えるようにします。

作業場所は、myapp/urls.py(アプリ分) + test_pr/urls.py(サイト分) の2か所です。
test_pr側のurls.pyについては、プロジェクト作成時にファイル作成ができていますが、アプリ側のurls.pyは新規作成が必要なので、注意してください。

urls.py(test_pr)
"""
URL configuration for test_pr project.

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/5.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path,include #<=,includeを追加

urlpatterns = [
    path('admin/', admin.site.urls),
    path('myapp/', include('my_app.urls')), # ここの修正
]

urls.py(myapp.py)
# 以下のコードで、index関数、foo関数を呼び出せるようにする
from django.urls import path
from . import views

urlpatterns = [
  path("", views.index, name = "index"),
  path("", views.foo, name = "foo"),
]

二つのファイルをそれぞれ中身を修正していきます。

ここまでやったけど、GoogleColaboratoryでは無理でした:sob:

理由:6.開発サーバー起動を試しても、実行はできるが、リンク先を開くことができませんでした。

!python manage.py runserver 8080

>>># 以下、エラーメッセージ
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
October 24, 2025 - 16:17:05
Django version 5.2.7, using settings 'test_pr.settings'
Starting development server at http://127.0.0.1:8080/
Quit the server with CONTROL-C.

WARNING: This is a development server. Do not use it in a production setting. Use a production WSGI or ASGI server instead.
For more information on production servers see: https://docs.djangoproject.com/en/5.2/howto/deployment/

ポート番号については、8000/8080の両方で試してみましたが、ページ遷移はするも、画面表示はなしという結果になりました。

Colaboは自分のPC環境(同一localhost)内にないため、そこからcolabo内のDjangoの出力にアクセスしようとしてもできなかったということです。
平たく言えば、Google内部の方に扉を開けてもらわないと、扉は開けてもらえないので、外に立ち尽くしているしかない状況です。

image.png
図:Google Colaboratory環境状況について

残りの手順については、環境変更の必要性とサーバー起動の確認のみのため、今回は記事にしていません。
図の通りであれば、おそらくJupyter Notebookであれば、環境内に入れているもののため、おそらく動作するのではないかと思います。

おわりに

環境選びは見事に失敗してしまいましたが、おかげでネットワークの仕組みについて細かく考えることができました。
次の記事に掲載するものについては、同じ失敗をしないように環境の見直しを必ずしようと思います。

参考文献・サイト

★Django

★『これからはじめるPython入門講座』初版(2023.01) 著:鶴長鎮一

★ASGI(非同期サーバゲートウェイインターフェース)の概要 (Junya Fukuda) [PyCon JP 2020](PyconJP)

★ITをわかりやすく解説

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?