Как связаться с flask-restful API из собственного приложения?

я новичок в бэкэнд-разработчике. Я пытаюсь разработать flask restful api. Я следовал документации и сделал предложенный минимальный API, который просто возвращает jsonified dict. С почтальоном, curl и в браузере проблем нет, апи работает и отвечает на мои запросы.

Однако из моего собственного приложения для реагирования я всегда получаю ошибку Netwrok.

Я перепробовал много вещей:
- несколько IP-адресов для сервера flask
- разные способы использования axios
- разные ОС: win10, ubuntu
- разные конечные точки: /, / api, /test
- разные способы написания API (класс flask-restful, функции приложения flask...)
- манипы из веб-документации: режим dev моего устройства, инструменты chrome dev (переадресация портов )
- я попросил разработчика React Native проверить мой код на стороне клиента, по его словам, все в порядке,

точность :
- код python работает в виртуальной среде conda
- appli работает в node js и expo
- папки-контейнеры моего приложения и моего API находятся на одном уровне
- сервер flask не отвечает 404 или что-то еще, он вообще не отвечает, ошибка, возвращаемая в react native, является сетевой ошибкой
- в зависимости от URL-адреса сетевые ошибки возникают сразу или после задержки в 2 минуты
- фляга показывает запросы и статус при вызове почтальона, завитка, хрома, но не реагирует, когда я нажимаю свои кнопки из собственного приложения реакции

Вот (один из) мой код Python:

from flask import (Flask, jsonify)
# from flask_restful import Resource, Api
from flask_cors import CORS, cross_origin

app = Flask(__name__)
CORS(app)

@app.route("/api", methods=["GET"])
def get():
    return jsonify(hello='bouh !')

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=True)

и вот клиентский код:

import React, {Component} from 'react';
import { View, Button } from 'react-native';
import axios from 'axios'; 

import { sharedStyles } from '../../SHARED/_shared';

var url = "http://192.168.1.16:5000/api";

export default class PrevCommune extends Component {
    constructor(props){
        super(props);
        this.navigation=this.props.navigation;
    };

    getAxios=()=>{
        axios.get(`${url}`).then((response)=>{
            console.log("succes axios :",response);
        }).catch((error)=>{
            console.log("fail axios :", error);
        });
    };

    getFetch=()=>{
        fetch(url).then((response)=>{
            console.log("succes fetch :",response)
        }).catch((error)=>{
            console.log("fail fetch :",error)
        })
    }

    render(){
        return (
            <View style={sharedStyles.mainContainer}>
                <Button onPress={()=>this.getAxios()} title={"get axios"}></Button>

                <Button onPress={()=>this.getFetch()} title={"get fetch"}></Button>
            </View>
        );
    };
};

И строки, возвращаемые запросами:

fail axios : [Error: Network Error]
fail fetch : [TypeError: Network request failed]

Я видел много туто, видео, статей по flask api, но не нашел, где я ошибаюсь. Пожалуйста, скажите мне, если у вас есть какие-либо идеи! Я думаю, что и клиентский, и серверный коды в порядке, проблема, похоже, в том, что мои запросы чем-то заблокированы.


person Evaary    schedule 17.02.2020    source источник
comment
Здравствуйте, вы доказали конечную точку с почтальоном?   -  person ricardo leiva sikic    schedule 17.02.2020
comment
когда я ввожу ip адрес в почтальон, он дает мне правильный ответ   -  person Evaary    schedule 17.02.2020
comment
вы настроили CORS на стороне сервера? flask-cors.readthedocs.io/en/latest   -  person ricardo leiva sikic    schedule 17.02.2020
comment
о нет, я не знаю Оо, я видел упоминание cors в каком-то документе, который я нашел, но я не пробовал! спасибо, я попробую   -  person Evaary    schedule 17.02.2020
comment
хорошо, дай мне знать   -  person ricardo leiva sikic    schedule 17.02.2020
comment
например, больше нет результатов. Но cors обязателен, лучше чем раньше =)   -  person Evaary    schedule 17.02.2020


Ответы (1)


Решено: проблема заключалась в моем брандмауэре... спасибо Рикардо за документ CORS =)

person Evaary    schedule 18.02.2020