はじめに
競馬予測のAIや高配当を探すプログラムなどをPythonで作成しています。多くの人に使って頂きたいので、アプリケーション化することにしました。インターネット経由でアクセスできるようにしたいので、Webアプリケーションを作成することにしました。
Webアプリケーションの作成する際に使用するフレームワークは、djangoを用いることにしました。djangoを初めて使用するので、学んだことを記憶に定着させるために、ブログに学んだことをまとめることにしました。
最終的にはdjangoでTodoアプリを作成する予定です。
今回は下記について記載しています。
- djangoの基本
 - djangoによる開発環境の作成
 - djangoプロジェクトの作成
 
djangoを用いて下記のTodoアプリを作成します。
djangoの基本
djangoの主要ファイル
djangoでプロジェクトを作成すると、いくつかのファイルが自動で生成されます。主要ファイルとなる「urls.py」「views.py」「models.py」の役割は大まかに表現すると下記となります。
| urls.py | リクエストの内容を解析し、解析した内容でviews.pyを実行する | 
| views.py | urls.pyからウェブリクエストを受け取り、必要な処理を行ってレスポンスを返す | 
| models.py | views.pyからのクエリ要求を処理し、クエリ結果を返す | 
djangoの動作フロー
djangoがユーザからのリクエストを受けて、レスポンスを返すまでの大まかな流れをまとめました。
- ユーザが、ブラウザからWebページにアクセスする
 - Webサーバが、urls.pyにユーザからのリクエストを転送する
 - urls.pyは、リクエストを処理し、views.py内の関数あるいはクラスにルーティングする
 - views.pyは、リクエストに応じてmodels.pyにデータ取得を要求する
 - models.pyは、views.pyの要求に応じてデータベースにクエリを発行する
 - データベースは、views.pyのクエリ要求に応答する
 - models.pyは、データベースからのクエリ応答をviews.pyに返す
 - views.pyは、HMLTページを組み立てるためにbase.htmlを要求する
 - views.pyは、base.htmlを取得する
 - views.pyは、HMLTページを組み立てるためにtemplate1.htmlを要求する
 - views.pyは、template1.htmlを取得する
 - views.pyは、htmlとデータを組み合わせてHTMLページを組み立ててレスポンスを返す
 - Webサーバはブラウザにレスポンスを返す
 
base.htmlとtemplate1.html、template2.htmlについて
base.html、template1.html、template2.htmlのファイル名は任意に設定することができます。
- base.htmlでブロック(枠)を定義する
 - ブロック(枠)内の内容をtemplate1.html、template2.htmlで設定する
 - template1.html、template2.htmlの内容はmodels.pyでデータベースから取得することができる
 
ニュースサイトのニュースリストとニュース記事のページを生成するときを例に、base.htmlとtemplate1.htmlとtemplate2.htmlを用いた時のイメージを下記にまとました。
<ニュースサイトのニュースリストの作成>
<ニュースサイトのニュース記事の作成>
djangoによる開発環境の作成
作成するDjangoによる開発環境は下記となります。
WSL(Windows Subsystem for Linux)を利用することでUbuntu上でDjangoを用いたWebアプリケーションを作成します。
| OS | Windows10 pro | 
| Visual Studio Code | 1.84.0 | 
| WSL | 2 | 
| Ubuntu | 22.04.3 LTS | 
| Python | 3.10.12 | 
| django | 4.2.6 | 
WSL(Windows Subsystem for Linux)のインストール
Windows上でLinuxを動作させるために、WSLをインストールします。
- 管理者でWindowsにログインする
 - 「Winキー」+「r」で「ファイル名を指定して実行」を起動する
 - 「OptionalFeatures.exe」を入力して「OK」をクリックする
 - 「Windowsの機能」で下記を選択して「OK」をクリックする
・Linux用Windowsサブシステム
・仮想マシン プラットフォーム
 - 再起動する
 - コマンドプロンプトで「wsl」を実行して下記のように表示されることを確認する
 
以上でwslのインストールは完了です。
Ubuntuのインストール
Windows上にUbuntuをインストールします。
- 「Microsoft Store」を起動します。
 - 検索バーに「ubuntu」を入力して検索する
 - 「ubuntu」を選択して「入手」をクリックする
ダウンロードが完了するまで待つ
 - ダウンロードが完了したら「開く」をクリックする
 - ubuntuのインストール処理が始まるのでしらばらく待つ
 - インストール処理が終わるとユーザ作成の処理になるので、ユーザ名とパスワードを入力してユーザを作成する
 
以上でubuntuのインストールは完了です。
WSLをWSL2に更新
WSLをWSL2に更新します。
WSLのままでも動作しますが、WSL2にすることでパフォーマンスの向上とDockerのサポートが含まれているので、WSL2に更新します。
- コマンドプロンプトを起動する
 - 「wsl -l -v」を実行し、インストールしたUbuntuの名前とWSLのバージョンを確認する。下記の場合、名前は「Ubuntu」でWSLのバージョンは「1」となる
WSLのバージョンが「2」と表示されていたら以降の作業は不要です - 「wsl –update」を実行し、でWSLのアップデートを実行する
 - 「wsl –set-version Ubuntu 2」を実行し、WSLのバージョンを「2」に設定する
 - 「wsl -l -v」を実行し、インストールしたUbuntuのWSLのバージョンを確認する。
下記の場合、WSLのバージョンは「2」となる
 
以上でWSLをWSL2に更新する作業は完了です。
Visual Studio CodeにWSL(拡張機能)を追加
Visual Studio CodeからWSLに接続するために拡張機能を追加します。
- WSLをインストールしたあとに、Visual Studio Codeを起動する
 - Visual Studio Codeを起動するとアプリの右下に「拡張機能のインストール」ダイアログが表示されるので、「インストール」をクリックする
 - 「拡張機能: WSL」が表示されるのを待つ
 - WSLのUbuntuに接続するために、画面右下の下記のアイコンをクリックする
 - 「WSLへの接続」をクリックする
 - 画面右下で「WSL: Ubuntu」と表示されていることを確認する
 - ターミナルを起動するために「表示」>「ターミナル」をクリックする
 - ターミナルで「cat /etc/lsb-release」を実行してUbuntuのバージョンを確認する
 
以上でVisual Studio CodeにWSL(拡張機能)を追加する作業は完了です。
Pythonの実行環境を構築
Pythonの実行環境をvenvで作成します。
- ターミナルで下記のコマンドを実行し、venvをインストールする
$ sudo apt update $ sudo apt upgrade $ sudo apt install python3.10-venv - ターミナルで下記のコマンドを実行し、仮想環境を作成する
$ python3 -m venv venv - ターミナルで下記のコマンドを実行し、仮想環境を起動する
$ source venv/bin/activate (venv)$ - ターミナルで「(venv)」が表示されていることを確認する
 
以上でPythonの実行環境を構築作業は完了です。
djangoのインストール
djangoのバージョン4.2.6をインストールします。
- Pythonの実行環境を起動させた状態で、pipコマンドでインストールする
(venv)$ pip install django==4.2.6 
djangoプロジェクトの作成
プロジェクトはdjangoのコマンドで作成します。djangoを構成するファイルを自動で作成してくれます。
- ターミナルで下記のコマンドを実行し、プロジェクトを作成する
ここでは「todoproject」を作成する。コマンドの最後に「.」を付ける(venv)$ django-admin startproject todoproject . - Webサーバを起動してWebアプリケーションを利用可能な状態にする
(venv)$ python3 manage.py runserver - Webブラウザで「https://127.0.0.1:8000」にアクセスすると下記が表示される
 
以上でプロジェクトの作成は完了です。
  
  
  
  


コメント