djangoチュートリアルがわからない人のための読むと勇気が出るポエム①


なんとなく「プログラミングやってみよう！」と思って、なんかよくわからんけどpythonっていうのがいいらしいのでやってみて、一通り文法とかを覚えて、なんか作ってみようといってもあんまり思いつかず、とりあえずdjangoというやつでウェブサイト作れるらしいから、djangoチュートリアルを見てみたら、日本語のはずなのに全然分からずふざけんなってなってる、そこの私のようなキミ！

大丈夫！キミは一人じゃない！！

ということで、初心者にとってはとても難解なdjangoチュートリアルを読み進めるうえで、なるべく無駄な部分を省き、Z世代にもわかるような（？）表現で書いていけたらと思います。

今回は[はじめての Django アプリ作成、その 1](https://docs.djangoproject.com/ja/4.2/intro/tutorial01/)の部分をやっていきます。

# Djangoのインストール
djangoチュートリアルでは省略されているインストール方法ですが、これは環境（windowsとかmacとか）によって違います。windowsでのdjango環境設定が解説されているサイトがあります↓

https://info.winschool.jp/detail201/

ただ、pythonやCMDになれた方ならともかく仮想環境の構築など結構面倒なところも多いです。それらを解決しれくれるのが、僕も愛用している Pycharm　というエディタです。このエディタには、最初からDjangoプロジェクト作成機能が縄っていますので、サクッとDjango環境が作成できます。pycharmの開発元であるJetBrainsの公式サイトで、pycharmを使った環境構築が書いてあるので、こちらを参考にしてください。
（こちらのサイトではウェブアプリの作成まで書いてありますが、あくまで今回はdjangoチュートリアルを進めていきます。）



こっちのが断然ラクなのでおすすめです！とはいうものの、pycharmを最初から使っていると、あまりに便利すぎて「あれ、仮想環境ってなんだっけ？venv?なにそれおいしいの？」とかってなりがちなので、その辺しっかり理解したいっていうドＭな方はターミナル／コマンドプロンプトを使うのもいいかもです。私はラクちんなpycharmを使います💦

# djangoプロジェクトとアプリ
では早速、「mysite」というプロジェクトにdjangoをインストールします。pycharmでは、プロジェクトディレクトリを作成（&djangoプロジェクトを作成）する際に、アプリケーション名を設定することができます。チュートリアルの通り、pollsというアプリを作りましょう。（polls = 世論調査）

ここでいうアプリとは。ウェブサイトの「機能」の部分だと思っておけば大丈夫だと思います。プロジェクトには機能に加え、ウェブサイトの構成を示すファイルや、「このURLにとんだらこのページを表示するよ」というのが書いてあるファイルなど、いろんなものの組み合わせでできています。この辺を自分で書く必要がなく、必要な部分をチョコチョコっと書き加えるだけでウェブアプリができるのが、djangoを含めた「フレームワーク」のいいところです。

アプリはどこにおいてもいい野ですが、今回はdjangp開発中に頻繁にお世話になるmanage.py先輩と同じディレクトリに置きましょう。（デフォルトでそうなってます）

manage.pyは、djangoに対して様々なコマンドを実行をするためのコマンドラインユーティリティーです。実際に次のコマンドをターミナルに打って、ｄdjangpのローカルサーバーを立ち上げてみましょう。

```
python manage.py runserver
```
ターミナルに、http://127.0.0.1:8000/ というリンクが出ているので、クリックしてみましょう。ロケットの絵のページが出てきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2732489/05705c26-6828-ca7f-1fcd-a3ba05803672.png)

# ウェブサイト完成！キミも一流のDjangoマスターだ！さあ、Djangoの世界へ羽ばたこう！！
冗談です　　

これで、「Djangoがちゃんとインストールされてまっせ！」ということになります。  
  
  
ディレクトリ構造を見てみると、こんな感じになってます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2732489/19d529c5-e925-32ee-76a2-7e124c0454fa.png)

  
なにやらいろんなファイルがありますが、どれがどんな役割をしているかはあとでまとめるとして、とりあえずチュートリアル先輩に言われてるコードを書いてみましょう。
  
# はじめてのビュー作成
ビューの役割は、「ユーザーからこんなリクエストが来たぜ！このページを表示したろ！」という、表示するページを決める役割を持っています。とりあえず、pollsディレクトリの中のviews.pyを編集してみましょう。
  

```python:views.py
from django.shortcuts import render
from django.http import HttpRequest

# ここにビューを作成
def index(request):
    return HttpResponse("はじめてのview作成")
```
  
さて、これで、「はじめてのview作成」というのが表示されそうな予感？？
先程のrunserverコマンドを実行(もしくはF5で更新)してみると、まださっきのロケットマークが表示されています。  
views.pyで作成したビューを呼び出すために、そのビューのURLをきめて、対応させてあげる必要があります。url.confというやつがそれを担当することになっているのですが、url.confファイルを作成するためには、urls.pyを「pollsアプリ内」に作成する必要があります。(mysiteディレクトリにも同名のファイルがあるので気をつけて！)    
中身をこのように編集します。    

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

from . import  views

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

そんでもって、プロジェクトルート(mysite)のurls.pyも編集します。デフォルトでは、urlpatternsには admin.site.urlsを実行してね！と書いてあります。ではurlpatternsに、polls/というurlにアクセスがあった場合に、pollsアプリのurls.pyを見に行って、そこで決められてるページを表示してね！と書いてみましょう。  
```python:mysite/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path("polls", include("polls.urls"))
]


```
なんかようわからん！urls.py2つあんの？？何が違うの？？ってなる人もいると思いますが、とりあえずrunserverして、http://127.0.0.1:8000/polls にアクセスしてみましょう(最後にpollsをつけるのをわすれずに！)  
こんな表示が出れば成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2732489/44c1453e-3f64-9912-00fb-4f4168bcf9e5.png)

では、urls.pyについてちょっと掘り下げてみましょう。試しに、こんなふうに、mysite, pollsそれぞれのpath関数の第一引数を変えてみましょう(あとで戻すのを話ずれずに！)  
  
```diff_python:mysite/urls.py
- path("polls/", include("polls.urls"))
+ path("aaa/", include("polls.urls"))
```
```diff_python:polls/urls.py
- path("polls/", include("polls.urls"))
+ path("bbb/", include("polls.urls"))
```  
その上で、runserverして、以下のURLに飛んでみましょう  
http://127.0.0.1:8000/aaa/bbb  
無事「はじめてのview作成」が表示されていると思います。では、こちらはどうでしょう？  
http://127.0.0.1:8000/bbb/aaa  
こんなエラーが表示されていると思います  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2732489/ce7cc999-a107-5afe-a13b-07f0b2a356b6.png)
  
エラーをよく見てみましょう。  
404エラーというのは、「そんなページねーよ(=そのURLまちがってるよ！)」ていうエラーです。その下の英語を読んでみると  
Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:
 admin/
 aaa/ 
訳)mysite.urlsで決まってるurlconf見てるんだけどさ、admin/ っていうのとaaa/っていうのしかなくて、bbbっていうのは見つかんねーのよ  
  
次に、こちらをにアクセスしてみましょう。 
http://127.0.0.1:8000/aaa/aaa    
エラー文がちょっと変わってますね！
admin/
aaa/ bbb 
に変わってます。  
  
これがどういうことかというと、URLにアクセスがあったときに、左から順番に文字を確認していき。まず最初にプロジェクトルート(mysite/urls.py)を検索して、そのパターンの中に当てはまるものがあって、そのpath関数の中にinclude()関数があったときに、includeで指定されている場所(polls/urls.py)を見に行きます。更にURLのパターンマッチングを続け、該当するURLがあった場合、path関数の第二引数で指定されているviewsのindex関数を実行する、となっているわけです。  

---
追記:  
# urls.pyとurlConf  
ちょっと気になって調べたのですが、どうやらurl.pyはurlConfと同一のものと考えても問題なさそうです。  
https://yuki.world/django-url-thingy/  
こういうの、初心者的にはマジやめてほしいですよね💦  
  
今回はここまで。その2に続きます。