ボク わるいフレームワークじゃないよ
解いた人: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 migrate
python3 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:8000
curl 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%