【发布时间】:2020-03-08 04:06:55
【问题描述】:
我正在尝试使用flutter 制作一个简单的应用程序,并将来自python 脚本的数据用作烧瓶restful-api。我制作了我的脚本,我可以通过这种方式获得结果:http://127.0.0.1:5000/query?username=username1 格式化为json。
我正在尝试做的事情就是这样;当我的应用程序开始工作时,弹出窗口将询问username,在输入username 后,它将转到应用程序的主小部件,该小部件将从我的json 页面中的json 获取数据。
所以为了做到这一点,我应该使用在线api 还是使用网络服务器(如果有python)?我仰望谷歌应用引擎,但我什至无法将我的脚本上传到那里。那么将我的restful-api链接到我的flutter应用程序(最后是apk文件)以在任何手机上工作的最简单方法是什么?我的脚本代码在下面,flutter 仍在进行中,直到我弄清楚如何在python 中使用api flutter..
from flask import Flask, request, jsonify
import random
import imdb
from trakt.users import User
app = Flask(__name__)
@app.route('/query', methods=['GET', 'POST'])
def query():
username = request.args['username']
moviesDB = imdb.IMDb()
my = User(str(username))
myline = str(random.choice(my.watchlist_movies))[9:1000]
print(myline)
movies = moviesDB.search_movie(str(myline))
id = movies[0].getID()
movie = moviesDB.get_movie(id)
title = movie['title']
year = str(movie["year"])
rating = str(movie["rating"])
runtime = ' '.join(map(str, movie["runtimes"]))
directStr = ' '.join(map(str, movie["directors"]))
writerStr = ', '.join(map(str, movie["writers"]))
actors = ', '.join(map(str, movie["cast"]))
summary = movie["plot outline"]
genre = ', '.join(map(str, movie["genres"]))
posterurl = movie["full-size cover url"]
return jsonify(movietitle=title,
movieyear=year, movierating=rating, moviegenres=genre, movieruntime=runtime,
moviedirectors=directStr,
moviewriters=writerStr,
moviecast=actors,
movieplotline=summary,
movieposterurl=posterurl)
if __name__ == '__main__':
app.run(debug=True)
【问题讨论】:
-
如果您使用
app.run(host='0.0.0.0'),那么您本地网络中的所有设备都可以使用您计算机的本地IP 访问它——例如192.168.0.1。您可以在 Windows 上使用ipconfig或在 Linux/Mac 上使用ifconfig检查本地 IP。如果路由(您和 Internet 提供商)将某个端口转发到您的本地计算机(即端口 80),那么使用app(host='0.0.0.0', port=80)您可以使用外部 IP 从 Internet 访问它 - 您可以查看 Internet 上的许多页面。 -
您可以尝试ngrok将您的本地计算机用作服务器。
-
谢谢,我会尝试,因为这可能是我当前项目的合适解决方案,这是一个非常简单的应用程序,但从长远来看,我认为我需要尝试使用在线服务器来处理更多请求。
标签: python python-3.x flutter flask flask-restful