Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 颤振/省道不从本地托管的烧瓶api返回值_Python_Ios_Api_Flask_Flutter - Fatal编程技术网

Python 颤振/省道不从本地托管的烧瓶api返回值

Python 颤振/省道不从本地托管的烧瓶api返回值,python,ios,api,flask,flutter,Python,Ios,Api,Flask,Flutter,使用IOS、Visual Studio代码、Flask、VirtualEnv 我刚开始玩Flask和Flatter。我已经创建了一个本地托管的flask服务器,它通过api返回用户,我正在尝试使用我的usb连接的IOS设备通过Flatter访问api。当我尝试internet上托管的api时,我会在手机上获得输出,但是当我指向本地api时,它看起来并没有击中服务器,我在flask服务器日志中没有收到任何响应,表明发出了请求。我做错了什么 通过我的浏览器,我可以导航到127.0.0.1:5000/

使用IOS、Visual Studio代码、Flask、VirtualEnv

我刚开始玩Flask和Flatter。我已经创建了一个本地托管的flask服务器,它通过api返回用户,我正在尝试使用我的usb连接的IOS设备通过Flatter访问api。当我尝试internet上托管的api时,我会在手机上获得输出,但是当我指向本地api时,它看起来并没有击中服务器,我在flask服务器日志中没有收到任何响应,表明发出了请求。我做错了什么

通过我的浏览器,我可以导航到127.0.0.1:5000/用户,并获得以下输出。我希望这会出现在我的手机上:

[{“姓名”:“尼克”,“年龄”:42,“职业”:“网络工程师”}, {“姓名”:“埃尔文”,“年龄”:32,“职业”:“业务分析师”}, {“姓名”:“尼克”,“年龄”:22,“职业”:“测试分析员”}]

这是我的flask服务器代码:

from flask import Flask
from flask_restful import Api, Resource, reqparse
from flask import jsonify
import json

app = Flask(__name__)
api = Api(app)

users = [
    {
        "name": "Nick",
        "age": 42,
        "occupation": "Network Engineer"
    },
    {
        "name": "Elvin",
        "age": 32,
        "occupation": "Business Analyst"
    },
    {
        "name": "Nick",
        "age": 22,
        "occupation": "Test Analyst"
    }
]

class User(Resource):
    def get(self, name):
        for user in users:
            if(name ==user["name"]):
                return user, 200
        return "User not found@, 404"

    def post(self, name):
        parser = reqparse.RequestParser()
        parser.add_argument("age")
        parser.add_argument("occupation")
        args = parser.parse_args()

        for user in users:
            if(name == user["name"]):
                return "User with name {} already exist".format(name), 400

        user = {
            "name": name,
            "age": args["age"],
            "occupation": args["occupation"]
        }
        users.append(user)
        return user, 201

    def put(self, name):
        parser = reqparse.RequestParser()
        parser.add_argument("age")
        parser.add_argument("occupation")
        args = parser.parse_args()

        for user in users:
            if(name == user["name"]):
                user["age"] = args["age"]
                user["occupation"] = args["occupation"]
                return user, 200

        user = {
            "name": name,
            "age": args["age"],
            "occupation": args["occupation"]        
        }
        users.append(user)
        return user, 201

    def delete(self, name):
        global users
        users = [user for user in users if user["name"] != name]
        return "{} is deleted.".format(name), 200

@app.route('/users', methods=['GET'])
def getUsers():
    return json.dumps(users)


api.add_resource(User, "/user/<string:name>")
app.run(debug=True)
这是我的用户.dart

class User {
  String name;
  int age;
  String occupation;

  User(String name, int age, String occupation) {
    this.name = name;
    this.age = age;
    this.occupation = occupation;
  }

  User.fromJson(Map json)
      : name = json['name'],
        age = json['age'],
        occupation = json['occupation'];

  Map toJson() {
    return {'name': name, 'age': age, 'occupation': occupation};
  }
}
这是我的主飞镖

import 'dart:convert';
import 'package:apitest2/API.dart';
import 'package:apitest2/User.dart';
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  build(context) {
    return MaterialApp(
      debugShowCheckedModeBanner: true,
      title: 'My Http App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyListScreen(),
    );
  }
}

class MyListScreen extends StatefulWidget {
  @override
  createState() => _MyListScreenState();
}

class _MyListScreenState extends State {
  var users = new List<User>();

  _getUsers() {
    API.getUsers().then((response) {
      setState(() {
        Iterable list = json.decode(response.body);
        users = list.map((model) => User.fromJson(model)).toList();
      });
    });
  }

  initState() {
    super.initState();
    _getUsers();
  }

  dispose() {
    super.dispose();
  }

  @override
  build(context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("User List"),
        ),
        body: ListView.builder(
          itemCount: users.length,
          itemBuilder: (context, index) {
            return ListTile(title: Text(users[index].name));
          },
        ));
  }
}
导入'dart:convert';
导入“package:apites2/API.dart”;
导入“package:apites2/User.dart”;
进口“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
构建(上下文){
返回材料PP(
debugShowCheckedModeBanner:true,
标题:“我的Http应用程序”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyListScreen(),
);
}
}
类MyListScreen扩展StatefulWidget{
@凌驾
createState()=>_MyListScreenState();
}
类_MyListScreenState扩展状态{
var users=新列表();
_getUsers(){
API.getUsers().then((响应){
设置状态(){
Iterable list=json.decode(response.body);
users=list.map((model)=>User.fromJson(model)).toList();
});
});
}
initState(){
super.initState();
_getUsers();
}
处置{
super.dispose();
}
@凌驾
构建(上下文){
返回脚手架(
appBar:appBar(
标题:文本(“用户列表”),
),
正文:ListView.builder(
itemCount:users.length,
itemBuilder:(上下文,索引){
返回ListTile(标题:Text(用户[index].name));
},
));
}
}
主旨

  • 如果我们希望从连接到LAN的其他计算机或设备向API发出HTTP请求,我们应该使用开发计算机IP地址0.0.0.0(对于IPv4配置)或::(对于IPv6配置)作为开发服务器所需的IP地址
  • 如果我们指定0.0.0.0作为IPv4配置所需的IP地址,则开发服务器将侦听端口5000上的每个接口
参考以下解决方案,该解决方案也解决了类似问题:

class User {
  String name;
  int age;
  String occupation;

  User(String name, int age, String occupation) {
    this.name = name;
    this.age = age;
    this.occupation = occupation;
  }

  User.fromJson(Map json)
      : name = json['name'],
        age = json['age'],
        occupation = json['occupation'];

  Map toJson() {
    return {'name': name, 'age': age, 'occupation': occupation};
  }
}
import 'dart:convert';
import 'package:apitest2/API.dart';
import 'package:apitest2/User.dart';
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  build(context) {
    return MaterialApp(
      debugShowCheckedModeBanner: true,
      title: 'My Http App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyListScreen(),
    );
  }
}

class MyListScreen extends StatefulWidget {
  @override
  createState() => _MyListScreenState();
}

class _MyListScreenState extends State {
  var users = new List<User>();

  _getUsers() {
    API.getUsers().then((response) {
      setState(() {
        Iterable list = json.decode(response.body);
        users = list.map((model) => User.fromJson(model)).toList();
      });
    });
  }

  initState() {
    super.initState();
    _getUsers();
  }

  dispose() {
    super.dispose();
  }

  @override
  build(context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("User List"),
        ),
        body: ListView.builder(
          itemCount: users.length,
          itemBuilder: (context, index) {
            return ListTile(title: Text(users[index].name));
          },
        ));
  }
}