я новичок в бэкэнд-разработчике. Я пытаюсь разработать 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, но не нашел, где я ошибаюсь. Пожалуйста, скажите мне, если у вас есть какие-либо идеи! Я думаю, что и клиентский, и серверный коды в порядке, проблема, похоже, в том, что мои запросы чем-то заблокированы.