ボク わるいフレームワークじゃないよ

解いた人:Hunachi

問題

参照した問題・解説のサイト:ボク わるいフレームワークじゃないよ

使用環境・ツール

  • Python
  • Django

バグの内容

curl 192.168.7.2:8000/message/ではエラーが返ってくる。

理想の終了状態

192.168.7.2:8000/message/にアクセスし、メッセージを確認できるようにすること

初期状態

/home/ictscpython3 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わからんので,とりあえず使ってみる

  1. Djangoとは
    • Webアプリを簡単に作れるようにするためのPythonフレームワーク
    • https://www.djangoproject.com/
  2. Pycharmでプロジェクトを作った。
    • ぼたんぽちぽちするだけ。
  3. セットアップするためのコマンドをぽちぽち
    • python3 manage.py migrate
    • python3 manage.py createsuperuser
  4. 動いてるかの確認
    • python3 manage.py runserver
    •  Starting development server at http://127.0.0.1:8000/とのことなので, curl http://127.0.0.1:8000/
    •  なんかエラーもテキストも返ってこなかった.
    •  アクセスすると
    •  寂しいので, urlpatternspath('', 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が返ってきていた。
    •  せっかくなのでアクセスもしてみる。
    •  なんかいい感じに表示されていた。動いてそう。
  5. /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.pyurlpatternspath('message/', message.views.index),追加.(チュートリアルより最短経路なので真面目に何か作るときはmessage.urls.pyも作るなどちゃんとしたがいいと思われる。)
    • python3 manage.py runserverし直す。
    • curl http://127.0.0.1:8000/message/
      • 結果:This is Message's View.%
  6. ホストを指定して実行してみる
    • ループバックアドレス以外を指定してみたいので,自分の環境で使えるIPアドレスを探した
      • 172.16.0.21が自分のPCに割り当てられてたのでこれを使う
      • もっといい方法色々ありそうだなぁ。
    • python3 manage.py runserver 172.16.0.21:8000
    • curl http://172.16.0.21:8000/message
    • なんかさっきと違う。。
    • サイトを見てみる
    • settings.pyALLOW_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もうまく動いてる!

解説

原因

Djangosettings.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.pyDEBUG=Falseにする。

すると, CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.というエラーが出るので,ALLOW_HOSTS = ['172.16.0.21']としてあげる。

ふなちの感想

:100:

curlの結果だけで解決できるようになりたい!

採点基準

  1. curl http://192.168.7.2:8000/message/ 実行してもメッセージが見れない。(0%)
  2. curl http://192.168.7.2:8000/message/ でメッセージが確認でき、かつ回答時にメッセージを記載している(80%)
  3. curl http://192.168.7.2:8000/message/ でメッセージが確認でき、かつ回答時にメッセージを記載している(100%