Djangoアプリケーション作成から画面表示まで

#Djangoインストール後に何をやったらいいかわからない方へ
今回はdjangoを使って画面に好きな文字列を表示してみるチュートリアルです。
どんな仕組みでバックエンドの処理がされているのか、わかると思います。

ここでの作業は、manage.pyが入っているプロジェクトフォルダ上で作業を行います。

目標は自分でアプリ作成してから、サンプル程度にエクスプローラー画面に好きな文字を表示させることです。
少しややこしくなってきますので、無理なく進めてゆきましょう！

##コマンドでアプリを作成する
まだプロジェクトが作成されていない方は[こちら](https://qiita.com/flee-style/items/81b57e551ab3f0633311)でチュートリアルを確認できます。
それではコチラのコマンドを入力してください。

```
$ python manage.py startapp test_app
```

出来上がったアプリを確認

```
mysite/
 |---manage.py
 |---mysite/
 |     |---__init__.py
 |     |---settings.py
 |     |---urls.py
 |     |---asgi.py
 |     |---wsgi.py
 |---test_app/(ここが追加されました)
     　|---__init__.py
     　|---admin.py
    　 |---apps.py
       |---migrations/
       | 　　 |---__init__.py
     　|---models.py
     　|---tests.py
     　|---views.py
```
mysite/mysiteと同じ階層にtest_appが作成されたでしょうか？

それでは次のステップに進みましょう。

##ファイル編集用のテキストエディタの準備
**テキストエディタをお持ちの方は次に飛んで構いません。**

私はPycharmを利用しています。

初心者やプログラミング言語の文法に慣れていない方は、Atomというテキストエディタをお勧めします。
操作が分かりやすく、最初は私はAtomを使っていました。
ごちゃごちゃエラーの指摘をされたり、波線が多く出てくると自分のコードに自信が持てなくなる可能性がありますよね。
そのためにもシンプルなテキストエディタからまずは始めるのがおすすめです。
[インストール方法URL](https://eng-entrance.com/atom-editor)

##settings.pyにアプリConfigを追加

`ALLOWED_HOSTS`と`INSTALLED_APPS`に`'*'`と`'test_app.apps.TestAppConfig'`,を追加しています。

```python:settings.py
ALLOWED_HOSTS = ['*']
# Application definition
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'test_app.apps.TestAppConfig',
]
```
Django 1.5以降では`ALLOWED_HOSTS`の設定が必要となっています。
これは、公開するドメイン名を指定しています。
`＊`とは、なんでもよいよ、といったワイルドカードの意思表示です。

さらに、`INSTALLED_APPS`に`'test_app.apps.TestAppConfig',`を加えています。

```
|---test_app/
|   　|---__init__.py
|   　|---admin.py
|  　 |---apps.py
|     |---migrations/
|     | 　　 |---__init__.py
|   　|---models.py
|   　|---tests.py
|   　|---views.py
```
ここのapps.pyの中身を見てみると、

```test_app/apps.py
class TestAppConfig(AppConfig):
    name = 'test_app'
```
とあり、`TestAppConfig`を`INSTALLED_APPS`に追加していることを意味しています。
アプリ名から自動的に大文字変換などもされてクラスが出来上がっているのですね、これになぜ？と感じても,まずはこんなものなのだと理解しておく必要があります。

割りきりが大切！後になって分かるときを待ちましょう。混乱する気持ちは痛いほどわかります💦

ここまで出来たら、今度はルーティングを作成します。

##urls.pyでルーティングの設定を行う
指定したURLを打つと、エクスプローラ画面に`"Hello"`や`"こんにちは！"`と表示させることが目標です。

具体的には、`http://localhost:8000/index/`と打つと、`Hello`と表示する、という流れです。ちゃんとURLに`index/`と入力されていますね。
![無題4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547305/1090a8ce-04c0-f2b6-0c2a-bf9183283bd7.png)

```mysite/mysite/urls.py
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('test_app.urls')),
]
```
`include`関数を用いて、アプリの`urls.py`を含めるように設定します。
**importも忘れずにお願いします。**
このように大元の`mysite`では`include`関数を用いつつ、アプリ側で**新たに**`urls.py`を作成しルーティングを設定してゆきます。
これは慣れです。Djangoの特有な設定かもしれません。

現在、大元の`urls.py`→**test_appのurls.py作成**→test_appのルーティング設定→views関数作成
といった流れになってます。
`test_app`の中身に`urls.py`を新たに作成しましょう。
そして、中のコードはこのようになります。

```test_app/urls.py
from django.urls import path
from . import views

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

`path`関数を使用するとかんたんなURL記法でルーティング設定ができます。

`views.py`を`import`するために.を用いていますが、Djangoが今のファイル名までのルーティングパスを指定してくれているため、.は`views.py`や`urls.py`が含まれているディレクトリ名を表してくれています。
このおかげで`views.index`とviewsファイルの中のview関数を呼び出せるのです。

`name='index'`とは、このルーティングの名前を設定しています。
表紙画面であればindex、詳細画面であればdetailとパスに近しいわかりやすい名前を指定するとよいです。
ここではindexとしておき、必要になったら復習を行ってください。

##views.pyにてHttpResponseを用いて画面表示（今回最後の作業）

```test_app/views.py
from django.http import HttpResponse
# Create your views here.
def index(request):
    return HttpResponse('Hello')
```

urls.pyで設定したviews.indexに紐づき、`index`という名前の関数を用意しました。
引数は`request`となっており、html側から送られてくるgetデータを扱いたい場合などに用いられます。
djangoファイルとhtmlとの**橋渡し的な存在**のイメージで構いません。

`HttpResponse`の引数は自由に変えられます。文字列型であるところに注意。`import`も忘れずにお願いします。

エラーなくサーバーを実行してみると、

```
python manage.py runserver
```

![無題4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547305/a821073c-527d-0251-222d-a1d2292dfea9.png)
このように表示されれば成功です！

##最後に
画面に好きな文字は表示できましたでしょうか？
今回は基本であるものの最初にマスターしておきたい作業なので、行き詰ったらこの作業を練習してみると楽しくなると思います。
いろいろとファイルを行ったり来たりして面倒ですが、各ファイル`urls.py`,`settings.py`,`views.py`の役割を抑えると、案外簡単に使いこなせると思います。
3か月以上見積もって、ゆっくりと使いこなせるよう頑張ってください。私ももがきやっとできるようになったのですから。

エラーなどで全く思い通りにいかない！という場合はエラー文をググってみたり、わかりやすいサイトで見本通りやってみることが大事です。
**試行錯誤よりも、できることの中で練習をしていく**ほうが私なりの勉強法としてお勧めします。