DjangoでHello Worldを表示する

# 1. はじめに
PythonのWeb開発フレームワークとして人気のDjango(ジャンゴ)で「Hello World」を表示していきます。  
開発環境はWindows上に仮想環境を構築し、仮想マシン(Ubuntu)で行います。  

# 2. 開発環境
OS: Windows 10 Pro  
VirtualBox: 6.1  
Vagrant: 2.2.19  
仮想マシン: Ubuntu 20.04.4 LTS  
Python: 3.10.4  
Django: 4.0.4  

# 3. Djangoとは
DjangoはPythonで実装されたWebアプリケーションのフレームワークの一つです。  
Instagramやmozillaなどの有名なサイトでDjangoが使われています。  
オープンソースで多数の機能が含まれおり、効率的に開発を進めることができます。  

# 4. 環境構築
まずはWindows上に仮想環境を構築し、仮想マシン(Ubuntu)にPythonとDjangoをインストールします。

## 4.1. VirtualBoxインストール
VirtualBoxの公式サイトからインストーラーをダウンロードし、インストールします。  
https://www.virtualbox.org/

## 4.2. Vagrantインストール
Vagrantの公式サイトからインストーラーをダウンロードし、インストールします。  
https://www.vagrantup.com/downloads

インストール後はPCの再起動が必要になります。  

## 4.3. 仮想マシン作成
### 4.3.1. UbuntuのBoxをVagrantに追加
コマンドプロンプトから下記のコマンドでUbuntuのBoxを追加します。  

```
>vagrant box add bento/ubuntu-20.04
```

### 4.3.2. Vagrantfileを作成
コマンドプロンプトから作業用のディレクトリに移動し、下記のコマンドでVagrantfileを作成します。  

```
>vagrant init
```

下記のサイトを参考にVagrantfileを編集します。  
https://app.vagrantup.com/bento/boxes/ubuntu-20.04

```
Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-20.04"
  config.vm.synced_folder "./work", "/home/vagrant/work"
  config.vm.network "forwarded_port", guest: 8000, host: 8000
end
```

### 4.3.3. 仮想マシンを立ち上げ
下記のコマンドで作業フォルダを作成し、仮想マシンを立ち上げます。  

```
>mkdir work
>vagrant up
```

### 4.3.4. 動作確認
下記のコマンドで仮想マシンにssh接続します。  

```
>vagrant ssh
```

仮想マシンにssh接続後、OSのバージョンを表示して動作確認します。  

```bash
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
```

## 4.4. Djangoのインストール
### 4.4.1. Djangoのインストール
下記のコマンドでDjangoをインストールします。  

```bash
$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt install -y python3-pip
$ pip install Django
```

### 4.4.2. 動作確認
Djangoのバージョンを表示して動作確認します。  

```bash
$ python3 -m django --version
4.0.4
```

環境構築は以上になります。

# 5. Django
ここからはDjangoを使ってWebアプリケーションを作成していきます。

## 5.1. プロジェクトの作成
下記のコマンドでプロジェクトを自動作成します。  

```bash
cd /home/vagrant/work
python3 -m django startproject mysite
```

下記のような構成で自動作成されます。DBのデフォルトはSQLiteになっています。  

```
mysite/
├── db.sqlite3
├── manage.py
├── mysite
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
```

## 5.2. 開発サーバーで動作確認
デフォルトで127.0.0.1:8000 が立ち上がります。  
ローカルPC上での開発であれば問題ありませんが、仮想環境上であれば仮想環境内だけで環境が閉じてしまうことになります。  
そのためコマンドの末尾に「0.0.0.0:8000」を追加し、ローカルPCのブラウザからアクセスできるようにします。  

```
python3 manage.py runserver 0.0.0.0:8000
```

上記のコマンドの実行後、ローカルPCのブラウザから下記のアドレスにアクセスし、Djangoのロケットが打ち上げられている画面が表示されれば成功です。  
http://127.0.0.1:8000/
![it_works.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641338/f5bed7d7-2d8d-e881-63f0-3968e6e90acc.png)


## 5.3. アプリケーションの作成
### 5.3.1. 自動生成
下記のコマンドでアプリケーションを自動作成します。  

```
python3 manage.py startapp hello
```

下記のような構成で自動作成されます。  

```
hello/
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│   └── __init__.py
├── models.py
├── tests.py
└── views.py
```

### 5.3.2. Viewの編集
hello/view.pyを下記の編集します。  

```python
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world.")
```

### 5.3.3. URLの対応付け
URLを対応付けするにはURLconfが必要になります。  
helloディレクトリにURLconf を作るにはurls.pyというファイルを作ります。  


```python
from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]
```

次はルートのURLconfにhello.urlsモジュールの記述を反映させる必要があります。  
mysite/urls.pyにdjango.urls.includeのimportを追加し、urlpatternsのリストに include() を挿入します。  

```python
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('hello/', include('hello.urls')),
    path('admin/', admin.site.urls),
]
```

## 5.4. 動作確認
下記のコマンドで開発サーバーを立ち上げます。  

```bash
python3 manage.py runserver 0.0.0.0:8000
```

ローカルPCのブラウザから下記のアドレスにアクセスすると「Hello World」と表示されることが確認できます。  
http://127.0.0.1:8000/hello/

# 6. おわりに
環境構築からDjango(ジャンゴ)で「Hello World」を表示するまでやってみました。  
今後はDjangoの機能を紹介し、最終的にWebアプリを公開するまでを目標にしていきたいと思います。