Djangoを新規案件で取り扱うことになったので概要をまとめてみます。①

まず従来のWebページを開く際のイメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573902/490d5977-cb59-e134-7b66-f209cacdcb0c.png)

クライアント側が特定のファイルに対して
「このページが欲しい」とリクエストを送って
それに対してサーバー側から欲しかったファイルが送られる。(レスポンス)

きわめてシンプルですね。

一方Djangoというと、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573902/80751ea6-5bdf-3a60-3767-75909a3dd974.png)
ざっとこんな感じらしい。

# Djangoのスタート

```
$ python -m django --version
```
でバージョンの確認ができる。インストールされている前提

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573902/989efa3e-358c-ea31-9d36-2cc15dcda763.png)

```
$ django-admin startproject mysite
```

すると、mysideディレクトリは以下に下記のような構造が作られる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573902/3cc04dcf-6d2e-ab46-c90c-d06c4e489ffb.png)

その後、先ほど作られたmysiteディレクトリに移動したら
下記コマンドを実行する
```
python manage.py runserver
```
すると、コンソール部分に下記のような出力が、、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573902/8ffc4027-23a9-52e3-5f26-a47c0c7af52a.png)

Flaskの「flask --app app --debug run」の実行時と似ていますね
表示されているURL「http://127.0.0.1:8000/」にアクセスしてみると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573902/1f95149f-8ab1-7d57-4364-6a6488f8827c.png)
Djangoスタートアップページが表示される。

# ここまで来て気付いた点

manege.pyを実行したらサーバーと接続した。
Flaskでいうmain.pyみたい。
```
app=run()
```
があるファイル。

上記図でいうと、url.pyはFlaskのapp.pyにあたりそうかな。
コードを見ると、ルーティングの設定をしていそう。

ルーティングは分かったけど、__肝心なtemplateは？__
どうやって画面を表示しているんだ？HTMLとか？

とりあえず疑問を残したまま次に進んでみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573902/1d9d27b3-c993-cdfe-7012-ff6d36fadeda.png)

What’s?
そういえばまだviews.pyとか作られていなかった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573902/10a24c5c-a4e1-5d95-0651-0f45168e4d14.png)

とりあえず言われたように実行してみます。
```
$ python manage.py startapp polls
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573902/f4d7d508-e2c8-1ba3-b8df-5ed3c2288c54.png)
pollのフォルダが作られました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573902/e0b6fc37-cb89-ad60-8fb2-02b3bb129094.png)

とりあえずviews.pyに言われたように記載します。

```python
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")
```

更に、pollフォルダ配下にurls.pyを作らないといけないらしい。
1階層手前の物は何なんだ？

```python
from django.urls import path

from . import views

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573902/3ef66cef-064f-a1b6-4e81-379a2460383d.png)
!?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573902/0744f037-d123-4518-f072-acf191b18983.png)

なにか言っています！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573902/3271bb5a-f60f-6c88-4f7a-91e389024273.png)

runserverして/pollsにアクセスしたらIndexの物が表示されました！

# ここまでのまとめ

urls.py
はURLを定義している？
URLを生成した上でviewsのメソッドと紐づけている。HttpResponse。
Flaskのレンダーテンプレートみたいなもの。

今のところのイメージでは、
例えばFlaskにおいて、
●app.py
BluePrintでモジュール毎にroute関数を分けている。
●vies/test.py
BluePrintで飛ばされた場所。
実際の処理やルーティング処理が記載されている。
メインの記述場所？
●main.py
app=run()
を実行することで、app.pyを呼んでいる？

という感じで作られていて、FlaskとDjangoとを照らし合わせてみると

●urls.py
→app.py

●views.py
→Viewsフォルダ内
　ルーティング処理部分

●manage.py
→main.py
呼びだす大元。

まだ出てきていないｍ「template」と「model.py」に関しては、
恐らくルーティング時にtemplateを参照するのでしょう。
templateにはFlaskのtemplatesと同様HTML･CSS等記述して、ページ情報を書き込んでいるのでしょう。

modelに関してはDBにアクセスする際にインスタンス化してORM的にDBと接続・操作するのでしょう。

とりあえずここまでわかれば、後はDjangoの書き方になれるだけかな。

# Nextage
https://docs.djangoproject.com/ja/4.1/intro/tutorial02/