ボク わるいフレームワークじゃないよ
解いた人:Hunachi
問題
参照した問題・解説のサイト:ボク わるいフレームワークじゃないよ
使用環境・ツール
- Python
 - Django
 
バグの内容
curl 192.168.7.2:8000/message/ではエラーが返ってくる。
理想の終了状態
192.168.7.2:8000/message/にアクセスし、メッセージを確認できるようにすること
初期状態
/home/ictscでpython3 manage.py runserver 192.168.7.2:8000を実行し、curl http://192.168.7.2:8000/message/実行してもメッセージが見れない。
考えられる検証、修正手順
- curlを叩いた時のエラーの内容を確認する。
curl -vなどする。
 python3 manage.py runserverでググるdjangoに関する情報ばっかり出てくるので,djangoが使われている?
- 以下の技術調査をしたときの構成と比較してみておかしなとこがないかを確認🔍🔍
 
技術調査
Djangoわからんので,とりあえず使ってみる
- Djangoとは
- Webアプリを簡単に作れるようにするためのPythonフレームワーク
 - https://www.djangoproject.com/
 
 Pycharmでプロジェクトを作った。- ぼたんぽちぽちするだけ。
 
- セットアップするためのコマンドをぽちぽち
python3 manage.py migratepython3 manage.py createsuperuser
 - 動いてるかの確認
python3 manage.py runserver-  
Starting development server at http://127.0.0.1:8000/とのことなので,curl http://127.0.0.1:8000/ - なんかエラーもテキストも返ってこなかった.
 -  アクセスすると

 -  寂しいので, 
urlpatternsにpath('', admin.site.urls),を追加した。(←なぜかadminページを表示させる人。。) - verboseオプションつけてリベンジだぜ!
 < HTTP/1.1 302 Found < Date: Mon, 23 Aug 2021 10:00:00 GMT < Server: WSGIServer/0.2 CPython/3.9.6 < Content-Type: text/html; charset=utf-8 < Location: /admin/login/?next=/とのことなので,curl http://127.0.0.1:8000/admin/login/で結果を見てみる。- いい感じにhtmlが返ってきていた。
 -  せっかくなのでアクセスもしてみる。

 - なんかいい感じに表示されていた。動いてそう。
 
 - /message/時の動きも知りたい。
- とりあえず
http://127.0.0.1:8000/message/ができるようにしする。 - 公式チュートリアル https://docs.djangoproject.com/en/3.2/intro/tutorial01/#the-development-server を参考に進めていく。
 - 王道を行きたいので公式の真似して(公式ではpollsだけど)message appを作ってみる。
 python3 manage.py startapp message- なんかmessageディレクトリができた。楽ちんだ。
 - あとはチュートリアルを真似て
views.pyのコード書いた。- https://docs.djangoproject.com/en/3.2/intro/tutorial01/#write-your-first-view
 def index(request): return HttpResponse("This is Message's View.")
 urls.pyのurlpatternsにpath('message/', message.views.index),追加.(チュートリアルより最短経路なので真面目に何か作るときはmessage.urls.pyも作るなどちゃんとしたがいいと思われる。)python3 manage.py runserverし直す。curl http://127.0.0.1:8000/message/- 結果:
This is Message's View.% 
- 結果:
 
 - とりあえず
 - ホストを指定して実行してみる
- ループバックアドレス以外を指定してみたいので,自分の環境で使えるIPアドレスを探した
172.16.0.21が自分のPCに割り当てられてたのでこれを使う- もっといい方法色々ありそうだなぁ。
 
 python3 manage.py runserver 172.16.0.21:8000curl http://172.16.0.21:8000/message- なんかさっきと違う。。
 - サイトを見てみる

 settings.pyでALLOW_HOSTS = ['172.16.0.21']- 同じエラーを起こしてブログ書いてる人がいた。
 
- 治った! 
http://172.16.0.21:8000/message
 curl http://172.16.0.21:8000/message/This is Message's View.%
http://172.16.0.21:8000もうまく動いてる!
 - ループバックアドレス以外を指定してみたいので,自分の環境で使えるIPアドレスを探した
 
解説
原因
Djangoのsettings.pyの中のALLOWED_HOSTSに何も指定されていなかったため、トラブルが発生していた。
解決方法は,↑の技術調査と同じ◎!
curlした時に,
<div id="explanation">
    <p>
      You're seeing this error because you have <code>DEBUG = True</code> in your
      Django settings file. Change that to <code>False</code>, and Django will
      display a standard page generated by the handler for this status code.
    </p>
  </div>
をみるとdebugがTrueになっているからバグってると言われるので,これをFalseにする。つまりsettings.pyのDEBUG=Falseにする。
すると,
CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.というエラーが出るので,ALLOW_HOSTS = ['172.16.0.21']としてあげる。
ふなちの感想
:100:
curlの結果だけで解決できるようになりたい!
採点基準
- curl http://192.168.7.2:8000/message/ 実行してもメッセージが見れない。(0%)
 - curl http://192.168.7.2:8000/message/ でメッセージが確認でき、かつ回答時にメッセージを記載している(80%)
 - curl http://192.168.7.2:8000/message/ でメッセージが確認でき、かつ回答時にメッセージを記載している(100%