看过很多flask的教程,感觉都很复杂,很多时候我的需求就是非常简单的小应用,用不到非常高级的功能
首先来讲,下面就是一个简单的初始化,8070是端口号,请求的时候会用到,之所以不用一些常用的,是因为太常用的,在使用过程中可能会接到其他程序发的请求,会有点烦
from flask import Flask, request
app = Flask(__name__)
if __name__ == '__main__':
# Bind to PORT if defined, otherwise default to 5000.
port = int(environ.get('PORT', 8070))
app.run(host='0.0.0.0', threaded=True, port=port)
有了上面那段之后,然后就是定义一个函数,类似下面这样的
@app.route('/detect', methods=["GET", "POST"])
def detectRock():
if request.method == 'POST':
print("----")
这个函数就是供别人请求时调用的,重点就在于“@app.route('/detect'”这个装饰器上,这个“/detect”就是你的请求地址,假设你的电脑ip是“11.22.33.44”,那别人想进入这个函数,就是“http://121.36.10.155:8070/detect”,所以想要换一个地址的话,就是在这个@app.route里面换
以上是服务端,客户端具体的请求如下
import urllib
import urllib.request as urllib2
from urllib import parse
url_preffix = "http://11.22.33.44:8070"
def setParams(array, key, value): # 字典构成函数
array[key] = value
def test():
dataDict = {}
setParams(dataDict, "method", "set")
url_data = parse.urlencode(dataDict).encode("utf-8")
req = urllib2.Request(url_preffix+"/detect", url_data)
rsp = urllib2.urlopen(req, timeout=300)
return rsp
这样就是传到服务端的detect那个方法里面了,并且传了一个参数,由于falsk的方法有很多种调用还有传值等方法,这里只是我个人比较喜欢的方法
服务端如何获取这个参数呢
@app.route('/detect', methods=["GET", "POST"])
def test():
global root
if request.method == 'POST':
fd = request.form.to_dict()
if "method" in fd:
method = fd["method"]
else:
return jsonify({"ret":-1, "msg":"传参错误"})
这样就可以得到传递过去的一个字典,这里还演示了一个如何返回值,使用jsonify,返回一个字典回去,这样就比较方便。
客户端得到这个数据,也就是上面那个rsp之后,怎么查看呢
str_rsp = rsp.read()
rsp.close()
dict_rsp = json.loads(str_rsp)
这样一个变换之后,就变成字典了,就可以查看数据了
有了以上这些,一个基本的服务端和客户端就能够使用了,能够满足简单的客户端向服务端请求数据,不用讲理论,别理解,去感受