🏥
Flutter→Djangoの疎通確認の前にするべきこと【おそらく初心者向け】
DjangoのALLOWED_HOSTS
を確認しましょう!
こんにちは、ワニかず@40歳 出戻りエンジニアです。
Androidエミュレータ上で動作するFlutterアプリから
Django REST FrameworkのAPIにアクセスする前に、
Django側のsettings.pyを確認しましょう。
そうすることで、疎通は取れたのに、
「HTTP 400 Bad Request」しか返ってこずハマる、
ということを回避できる可能性があります!
ALLOWED_HOSTSに設定を追加
Djangoプロジェクトの設定ファイルである「setting.py」に
setting.py
ALLOWED_HOSTS = ['xxx.x.x.x', 'localhost']
という設定があるかと思いますが、
setting.py
ALLOWED_HOSTS = ['xxx.x.x.x', 'localhost', '10.0.2.2']
と、10.0.2.2
を追加するようにしましょう。
10.0.2.2とは?
10.0.2.2
は、Androidエミュレータからホストマシン(開発に使用しているPC)のlocalhost
にアクセスするための特別なIPアドレスです。
-
127.0.0.1
→ エミュレータ自身のローカルホスト -
10.0.2.2
→ ホストマシン(開発PC)のローカルホスト
つまり:
- Androidエミュレータは独自の仮想ネットワーク環境を持っています
- エミュレータ内から
127.0.0.1
にアクセスすると、エミュレータ自身を指します - エミュレータ内から開発PCで動いているサーバー(例:Django開発サーバー)にアクセスしたい場合は、
10.0.2.2
を使用します
これは、ホストマシンで動作しているサービス(この場合はDjangoサーバー)にアクセスするための仕組みです。
localhostについてはこちらでまとめておりますので気になる方は御覧ください。
iPhoneシミュレータの場合は?
iPhoneシミュレータ(iOS Simulator)の場合、通常は localhost
または 127.0.0.1
を使用します。
これは Android エミュレータ(10.0.2.2
を使用)との大きな違いです
-
iOS シミュレータの場合:
-
localhost
または 127.0.0.1
-
-
Android エミュレータの場合:
10.0.2.2
この違いが生じる理由:
- iOS シミュレータは、ホストマシン(Mac)と同じネットワークスタックを共有しているため、直接
localhost
でアクセスできます
したがって、Django の ALLOWED_HOSTS
に関して言えば、iOSシミュレータからのアクセスは既に許可されている(localhost
と 127.0.0.1
が含まれている)ため、追加の設定は必要ありません。
Discussion