TransWikia.com

Djangoで作成したAPIでGETしたJSONデータを実機のTableViewに反映させたい

スタック・オーバーフロー Asked by Gen.U on January 3, 2021

以下のjsonデータが返ってくるURLは http://127.0.0.1:8000/api/v1/ です
シミュレータ上では正しくレスポンスが取得できましたが,実機で試みたところ,取得できませんでした.どうすれば良いでしょうか?
使用しているのはAlamofire4.0です.

JSON

{
"books": [
{
  "id": 1, 
  "name": "Django入門", 
  "publisher": "GeekLab Nagano", 
  "page": 10, 
  "impressions": [
    {
      "id": 1, 
      "comment": "途中でrn眠くなった。"
    }, 
    {
      "id": 2, 
      "comment": "ああ"
    }, 
    {
      "id": 3, 
      "comment": "いい"
    }
  ]
}, 
{
  "id": 2, 
  "name": "Raspberry Pi 入門", 
  "publisher": "GeekLab Nagano", 
  "page": 15, 
  "impressions": []
}
]
}

コード

var tableTitle = [String]()
var tableDetail = [String]()
let url:String = "http://127.0.0.1:8000/api/v1/"

func loadData() {
    Alamofire.request(url).responseJSON {
        response in

        guard let value = response.result.value else {
            return
        }
        let json = JSON(value)
        let books = json["books"]

        for item in books.arrayValue {
            self.tableTitle.append(item["name"].stringValue)
            self.tableDetail.append(item["publisher"].stringValue)
        }

        print(self.tableTitle)
        print(self.tableDetail)


        self.tableView.reloadData()
    }
}

One Answer

Djangoを実行する時のデフォルトのホストである127.0.0.1だとDjangoを実行したマシンからしかアクセスできませんので、以下の様に起動して下さい。

python manage.py runserver 0.0.0.0:8000

これで同じネットワーク上の他のマシンからhttp://<Djangoを実行しているマシン名またはIPアドレス>:8000/でアクセスできるようになります。

追記

シミュレータ上では正しくレスポンスが取得できましたが,実機で試みたところ,取得できませんでした.どうすれば良いでしょうか?

「取得できませんでした」だとどういう状況かわかりません。
HTTPリクエストでうまくいかない状況としては

  • サーバーに接続できない
  • サーバーからレスポンスは返ってくるけどHTTPステータスコードがエラー(500など)になっている
  • サーバーからのレスポンスでコンテンツ(今回でいうとJSONデータ)が正しく取得できない

などがあります。

これらのどこでうまくいっていないかによって、原因と対応方法は変わってきます。
自分はSwingはわからないので具体的にどう確認すればいいのかは書けませんが、HTTP通信をする際はこれらのどこでうまくいっていないかを確認することをお勧めします。

追記2

Djangoのsettings.pyで接続を許可するホストを指定するための設定があります。
デフォルトだと

ALLOWED_HOSTS = []

となっていてDjangoを実行しているマシンからしかアクセスできないので、どこからでもアクセスできるようにするには

ALLOWED_HOSTS = [*]

として下さい。

Answered by tag1216 on January 3, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP