Djangoで初めてのHello World

Djangoを勉強し始めて2ヶ月目の駆け出しエンジニアです。
初めての投稿なので、Djangoでブラウザに「Hello World」を出力するまでを記録していきます。

##環境

- Macで開発
- Python 3.7.5
- Django 2.2.6


##Djangoをインストール

```
pip install django==2.2.6
```

まずは上記のコマンドで Django をインストールします。今回は Django 2.2.6 を使用しますので django の後ろに ==2.2.6 をつけてバージョンを指定します。

念のために、実際にインストールされているかを下記のコマンドで確認してください。

```
$ python -m django --version
2.2.6
```


##プロジェクトを作成

インストールができましたら、次はプロジェクトを作成します。
まず、下記のコマンドで myapp というディレクトリーを作成します。

```
$ mkdir myapp 
```
その後、

```
$ cd myapp 
```
上記のコマンドで myapp ディレクトリーに移動し、下のコマンドを実行してプロジェクトを作成します。

```dir:myapp
$ django-admin startproject conf . 
```

conf というプロジェクトが作成されたか次のコマンドで確認してください。

```dir:myapp
$ ls 
conf  manage.py 
```
conf と mange.py が作成されていればオッケーです。
全体のディレクトリー構成図は以下のようになっているはずです。


```
myapp
|
├── manage.py
|
└── conf
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
```

##アプリケーションを作成

Djangoでは、プロジェクトの中で、複数のアプリケーションを作成できます。
今回は、helloというアプリケーションを作成します。

```dir:myapp
$ python manage.py startapp hello 
```
以下のディレクトリー構成図になっているはずです。

```
myapp
|
├── manage.py
|
├── conf
|   ├── __init__.py
|   ├── settings.py
|   ├── urls.py
|   └── wsgi.py
|
└── hello
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py
```

このままだと、`hello`アプリケーションは適用されていないので、`conf`の`settings.py`に`hello`アプリケーションが追加されたことを教えるための設定を行なう必要があります。

```python:conf/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'hello',
]
```
`INSTALLED_APPS`に`'hello'`を追加すると認識され適用されます。
新しいアプリケーションを作成するたびに上記のように追加していく必要があります。


##URLの設定

次に、URLの設定を行います。`conf`の`url.py`だけにurlパターンを追加してもいいのですが、設定が大きくなるにつれ管理が大変になるのでアプリケーションごとに分けて設定するのがベストプラクティスです。

`conf`の`url.py`を以下のように編集します。

```python:conf/urls.py
from django.contrib import admin
from django.urls import path, include ⇦ includeをインポート

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

まず、`include`をインポートし、`urlpatterns`の中に`path('', include('hello.urls.py')),`を追加。
これはinclude関数を用いて、`hello`アプリケーションの`urls.py`を読み込んでいます。こうすることで、`hello`アプリケーションの`urls.py`を編集することだけに集中できます。

次に、`hello`アプリケーションに`urls.py`というファイルを作成します。アプリケーション側の`urls.py`は、`startapp`では作成されないので、任意で作成する必要があります。

`hello`アプリケーションに`urls.py`を作成したら、以下のように編集してください。

```python:hello/urls.py
from django.urls import path

from . import views

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

`from . import view`は同じ階層から`views.py`をインポートしています。
`path('', views.index),`は第一引数にurlのパスの指定をし（今回はからにしています。）、第二引数にurlパターンにマッチするview関数を指定します（次のステップでview関数を作成していきます）。第三引数には,urlの逆引き用で`name='名前を指定'`のように書きます。ですが
、今回は必要ないので省略しています。記入していません。


##View関数の作成

さて、いよいよ最後の作業です。
`view.py`を以下のように編集してください。

```python:hello/views.py
from django.http import HttpResponse


def index(request):
    return HttpResponse('Hello World')
```

まず、 `HttpResponse`をインポートします。
次に、先ほど`hello`アプリケーションの`urls.py`に`path('', views.index),`を作成したのですが、第二引数にあるindexが今回使われる関数になりますので`def index(requset)`となっています。
`HttpResponse('Hello World')`は()の中の、レスポンスとして返したい値を入れ、HttpResponseオブジェクトとして返します。

それでは、`python manage.py runserver`を実行してください。以下の表示が出ればオッケーです。

```
February 01, 2020 - 05:59:05
Django version 2.2.6, using settings 'conf.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
```

ブラウザで`http://127.0.0.1:8000`を開きます。

![hello world.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505293/5157c0a5-c6a6-1cb8-d008-a51b96916a44.png)

このように表示されていれば成功です。おめでとうございます！！！！

##一言
Hello Worldを表示させることができたらエンジニアへの大きな一歩を踏んだも同然です。難しいと感じるかもしれませんが、継続的に学べばいずれ楽しさがわかってくると思います。
私も2ヶ月目でまだまだ駆け出しですがどんどん発信していきたいと思います。