笔者需要在服务器上使用python运行一个程序(函数),通过该函数可以从其他机器通过URL的方式进行调用,由于从未接触过类似的程序,所以第一次进行学习和使用,本篇文章也只是对自己学习的记录,较为简单。
一、创建Flask API
导入flask模块,传输数据使用json格式,导入json模块,以及自己实现的相应函数模块
from flask import Flask, jsonify, request
import json
from screenshot import nerf2screenshot, nerf2screenshot_base64
创建一个应用app
app = Flask(__name__)
二、创建路由Route
①简单GET
创建一个路由route,其中指定访问的地址以及发送的请求的方法method,这里的methods中可以使用多种方法,该位置即为前端或者user调用你的API时,请求方法为"GET"时,url为默认时,调用index()函数
test_json = {}
test_json["name"] = ["WangWu"]
test_json["id"] = ["66663333"]
@app.route('/', methods=["GET"])
def index():
return jsonify(test_json)
②简单POST
前端或者user需要传递相关参数给服务器函数相关的参数,所以在请求时,通过post的方式可以将数据传给服务器函数,大致流程如下:
全过程通过Json进行数据传输,可以通过flask中的get_data获取从前端或者user传输的参数。以下代码中,通过get_data函数获取Json字符,通过转换将该Json转为字典dict传入所需要运行的函数nerf2screenshot_base64(),该函数的运行结果返回的是字典,通过flask中jsonnify函数将字典转换为json返回给前端或者user,也可以直接返回json格式的字符
@app.route('/screenshot/', methods=["POST"])
def get_screenshot():
info = request.get_data()
info_json = json.loads(info)
return jsonify(nerf2screenshot_base64(info_json))
三、运行程序API
主函数调用app.run即可运行发布API程序,这里使用的host = '0.0.0.0'可以使得局域网内的用户都可以访问,访问地址为本机ip加端口;若为默认只有本机可以进行访问,访问地址为localhost地址加端口
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
四、API的使用
API的使用需要在另一个文件中进行写, 配合requests库进行调用API(这里的requests库和前面的request函数不一样),以下是我调用服务的具体实现,其中很多为对返回数据的具体使用,定义url,调用requests.post函数,函数参数为url以及需要传向服务器的参数json,该函数返回值即为服务器中调用函数(get_screenshot)并处理过后所返回的值,后面即为对返回值进行的操作,以完成我的需求
def post_server(screenshot_jsonfile, save_dir):
url = "http://223.2.38.143:5000/screenshot/"
with open(screenshot_jsonfile, 'r') as f:
images_info = json.load(f)
images_bs64 = requests.post(url, json=images_info)
images_json = json.loads(images_bs64.text) # turn to dict
with open(save_dir + "image.json", "w") as f:
json.dump(images_json, f)
for idx in range(len(images_json["images_base64"])):
img_js = images_json["images_base64"][int(idx)]
file_path = img_js["file_path"]
img_bytes = base64.b64decode(img_js["base64_code"])
img = Image.open(BytesIO(img_bytes))
img.save(save_dir + file_path, "JPEG")
以上是我自己对python flask和requests学习的过程,比较简单,目的是对自己的学习过程进行记录,如有问题,敬请指正 !!!