🏥

Flutter→Djangoの疎通確認の前にするべきこと【おそらく初心者向け】

2025/02/14に公開

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)のローカルホスト

つまり:

  1. Androidエミュレータは独自の仮想ネットワーク環境を持っています
  2. エミュレータ内から127.0.0.1にアクセスすると、エミュレータ自身を指します
  3. エミュレータ内から開発PCで動いているサーバー(例:Django開発サーバー)にアクセスしたい場合は、10.0.2.2を使用します

これは、ホストマシンで動作しているサービス(この場合はDjangoサーバー)にアクセスするための仕組みです。

localhostについてはこちらでまとめておりますので気になる方は御覧ください。

iPhoneシミュレータの場合は?

iPhoneシミュレータ(iOS Simulator)の場合、通常は localhost または 127.0.0.1 を使用します。

これは Android エミュレータ(10.0.2.2を使用)との大きな違いです

  1. iOS シミュレータの場合:

    • localhost または
    • 127.0.0.1
  2. Android エミュレータの場合:

    • 10.0.2.2

この違いが生じる理由:

  • iOS シミュレータは、ホストマシン(Mac)と同じネットワークスタックを共有しているため、直接 localhost でアクセスできます

したがって、Django の ALLOWED_HOSTS に関して言えば、iOSシミュレータからのアクセスは既に許可されている(localhost127.0.0.1 が含まれている)ため、追加の設定は必要ありません。

図式化したイメージ

Discussion