Mentor第一次和我说用flask框架的时候,我始终感觉云里雾里,不知道是个算法还是模型什么的,瞎摸索了好久,终于明白如何使用了,现在给大家分享一下(我这里只是非常浅显的使用,供大家参考)。这份文档中的代码使用Python3运行。
一、flask框架简介
Flask是一个使用Python编写的轻量级Web应用框架,较其他类型框架更为灵活、轻便、安全且容易上手。
我对flask框架的理论知识并不熟悉,这里引用其他人写的,给自己科普一下~
“Flask主要包括Werkzeug和Jinja2两个核心函数库,它们负责业务处理和安全方面的功能,这些基础函数为web项目开发过程提供了丰富的基础组件。
Werkzeug(负责业务处理)库十分强大,功能比较完善,支持URL路由器请求集成,一次可以响应多个用户的访问请求;支持Cookie和会话管理,通过身份缓存数据建立长久连接关系,并提高用户访问速度;支持交互式Javascripts调试,提高用户体验;可以处理HTTP基本事务,快速响应客户端推送过来的访问请求。
Jinja2(安全方面)库支持自动HTML转移功能,能够很好控制外部黑客的脚本攻击。”
引用源自: https://blog.csdn.net/langdei/article/details/102537575?utm_source=app&app_version=4.5.8
Flask的基本模式
Flask的基本模式为在程序里将一个视图函数分配给一个URL,每当用户访问这个URL时,系统就会执行给该URL分配好的视图函数,获取函数的返回值并将其显示到浏览器上:
二、安装 flask
安装 flask 包
基于Pycharm
1、 键入 win键+R,进入 cmd 命令,输入 pip install flask
Microsoft Windows [版本 10.0.17134.829]
(c) 2018 Microsoft Corporation。保留所有权利。
C:\Users\Administer> pip install flask
2、直接在pycharm 的终端(Terminal)命令中安装,Terminal执行命令与在 cmd命令中类似,如果pycharm无法正常执行代码,试一下 在 Terminal中执行如果Terminal 可以执行出结果,说明pycharm 环境配置出现了问题(可以考虑换个环境试试)
- Terminal 在界面做下方位置,点击即可进入终端命令
- 输入 pip install flask即可(我这里是已经下载好了)
三、Flask 简单使用
导入包
from flask import Flask
1、一个简单的例子
from flask import Flask
app = Flask(__name__) # 实例app
@app.route("/") # 路由
def hello_world():
return 'hello world' # 返回值
if __name__ == '__main__':
app.run(host='127.0.0.1',port=8080,debug = True)
# 开启 debug 模式
# app.run(host='127.0.0.1', port=8080)
点击运行之后,出现如下的结果:
上面的 warning 我搜了一下解决方式,尝试了几种方法,要么运行不出来,要么报错,不管暂时不影响运行,就先不管了
查看结果方式
1、浏览器
复制上面运行出来的url( 网址) http://127.0.0.1:8080/,打开浏览器,输入即可url即可,得到结果如下:
2、git bash
首先需要在电脑里安装 git bash,使用的时候,点击桌面右键即可
输入 curl + 网址
可能是我没设置好吧,输出结果有一点点奇怪hhh
2、path:包含斜杠的路径,用于路径的拼接
from flask import Flask
app = Flask(__name__) # 实例app
@app.route("/test") # 路由
def hello_world():
return 'hello world' # 返回值
if __name__ == '__main__':
app.run(host='127.0.0.1',port=8080,debug = True)
观察到 @app.route("/test"),那么输入的url就要加上 /test
四、flask 请求参数
方法 | 作用 |
---|---|
args | 获取 get 请求的参数 |
form | 获取 post 请求的参数 |
1、flask get 请求
第一步:导入包
from flask import request
默认支持 get 请求
请求单个参数
from flask import Flask,request,jsonify
app = Flask(__name__) # 实例app
@app.route('/test')
def test():
# 获取 get 请求参数
id = request.args.get('id')
return 'hello world '+id
if __name__ == '__main__':
app.run(host='127.0.0.1',port=8080,debug = True)
输入参数要先在路径后面加个 “?” 号,参数名 id 与代码中一致,注意 id 和等号之间不要加空格(会报错),也不要多此一举加引号,因为地址符输出默认为字符串类型,之前就是加引号,导致出错,找了好久才发现问题。
请求多个参数 用 &
from flask import Flask,request,jsonify
app = Flask(__name__) # 实例app
@app.route('/test')
def test():
# 获取 get 请求参数
id = request.args.get('id')
score = request.args.get('score')
score = float(score) # score 默认为字符串类型,需要转为 float型
res = {}
res['id'] = id
res['score'] = score
return res # 以字典形式输出
if __name__ == '__main__':
app.run(host='127.0.0.1',port=8080,debug = True)
两个参数之间用 & 来连接
需要注意: The return type must be a string, dict, tuple, Response instance, or WSGI callable
所以不可以直接返回一个列表或float型等的值
例如:像下面这样写返回值是会报错的
def test():
id = request.args.get('id')
score = request.args.get('score')
res = [id,score]
return res # 这是一个 list
改成下面形式就可以了:
def test():
id = request.args.get('id')
score = request.args.get('score')
res = [id,score]
return jsonify(res)
传入的值为一个长字符串和一个字典
from flask import Flask,request,jsonify
app = Flask(__name__) # 实例app
@app.route('/similarity')
def test():
# 获取 get 请求参数
name = request.args.get('name')
tag = request.args.get('tag')
res = {'name':name,'tag':eval(tag)}# str类型转为 字典类型
return jsonify(res)
if __name__ == '__main__':
app.run(host='127.0.0.1',port=8080,debug = True)
在浏览器的地址栏输入
http://127.0.0.1:8080/similarity?name=Scalloped Floral Lace Bralette&tag={'Style':['casual'],'Color':['black']}
会自动识别为
http://127.0.0.1:8080/similarity?name=Scalloped%20Floral%20Lace%20Bralette%20&tag={%27Style%27:[%27casual%27],%27Color%27:[%27black%27]}
输出结果为
传参调用脚本
@app.route('/mostSimi')
def getSimiItem():
id = request.args.get('id')
score = request.args.get('leastScore')
res = sim_model.similarity_by_id(id, score)
# 这里similarity_by_id是类sim_model中的方法
2、flask post 请求
flask 默认不支持 post 请求,需要增加请求方式
from flask import Flask,request,jsonify
app = Flask(__name__) # 实例app
@app.route('/test',methods = ["post"])
def demo():
print(request.form)
name = request.form.get("name")
age = request.form.get("age")
return jsonify([name,int(age)])
if __name__ == '__main__':
app.run(host='127.0.0.1',port=8080,debug = True)
啊居然运行不出来,原来get是用URL传参,post则是有一个专门的通道?等我研究研究