客户端和服务端:使用者透过调制解调器等设备上网,在浏览器中输入网址,通过HTTP 通讯协议向网站提出浏览网页的要求(Request)。网站收到使用者的要求后,将使用者要浏览的网页数据传输给使用者,这个动作称为响应(Response)。网站提供网页数据的服务,使用者接受网站所提供的数据服务;所以使用者在这里就是客户端,响应使用者要求的网站即称为服务端。
路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程。我的理解就是为用户请求的URL找出其对应的处理函数之意
@app.route注册路由就是建立URL规则和处理函数之间的关联。Flask框架依赖于路由 完成HTTP请求的分发.
@app.route和app.add_url_rule参数:
rule, URL规则
view_func=None, 视图函数名称
defaults=None, 默认值,当URL中无参数,函数需要参数时,使用defaults={'k':'v'}为函数提供参数
endpoint=None, 名称,用于反向生成URL,即: url_for('名称')
methods=None, 允许的请求方式,如:["GET","POST"]
strict_slashes=None, 对URL最后的 / 符号是否严格要求,
如:
@app.route('/index',strict_slashes=False),
访问 http://www.xx.com/index/ 或 http://www.xx.com/index均可
@app.route('/index',strict_slashes=True)
仅访问 http://www.xx.com/index
redirect_to=None, 重定向到指定地址
如:
@app.route('/index/<int:nid>', redirect_to='/home/<nid>')
或
def func(adapter, nid):
return "/home/888"
@app.route('/index/<int:nid>', redirect_to=func)
subdomain=None, 子域名访问
from flask import Flask
#Flask构造函数的第一个参数指定一个引入名/importname。Flask框架使用这个名字进行静态资源、模板、
#错误信息的定位。除非你清楚的理解它的作用,通常情况下,我们总应该使用特殊变量__name__
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>You found me</h1>'
if __name__ == '__main__':
app.run()
Flask框架用法之一
客户端发送图像文件
import requests
import json
#resp = requests.post("http://localhost:5000",files={"file": open('demo.bmp','rb')})
resp = requests.post("http://localhost:5000/predict",files={"file": open('demo.bmp','rb')})
res = json.loads(resp.content)
print(res['class_id'])
服务端收到图像文件,处理并返回结果
from flask import Flask, jsonify, request
app = Flask(__name__)
#@app.route('/',methods = ['POST'])
#predict是对客户端的不同请求的命名,也可以是get_data,print,save等等
@app.route('/predict',methods = ['POST'])
def predict():
if request.method == 'POST':
file = request.files['file']
img_bytes = file.read()
#此处可添加处理函数
return jsonify({'class_id': 'POCESS_IMAGE_RESULT'})
#可以使用花生壳把内网主机地址和端口映射外网访问地址,为了防止ip动态分配,可以使用'127.0.0.1',注意是HTPP协议
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000)
动态参数路由
from flask import url_for
# 访问地址 : http://127.0.0.1:5000/info/1
@app.route("/info/<int:nid>", methods=["GET", "POST"], endpoint="r_info")
def student_info(nid):
print(url_for("r_info",nid=2)) # /info/2
return f"Hello Old boy {nid}"