-
前言
学习使用一个新工具,首先找一段代码学习一下,基本掌握用法,然后再考虑每一部分是做什么的
-
Flask的初始化
app = Flask(__name__):初始化,创建一个该类的实例,第一个参数是应用模块或者包的名称
-
@app.route()的用法
@app.route('/detect', methods=['POST']):通过使用route()装饰器的方法定义一个路由地址,/detect是接口的uri,使用 route() 装饰器告诉 Flask 什么样的URL能触发我们的函数,这个函数的名字也在生成 URL 时被特定的函数采用,这个函数返回我们想要显示在用户浏览器中的信息;methods=['POST']表示只接受POST方法访问,methods=['GET']表示只接受GET方法访问,methods=['POST', 'GET']表示两种方法都接受。
-
app.run的用法
app.run(host='0.0.0.0', port=1000,debug=True):用 run() 函数来让应用运行在本地服务器上。其中host为要监听的主机名, 默认为127.0.0.1(localhost),设置为“0.0.0.0”以使服务器在外部可用,port是设置的端口号,port不填的话默认5000,debug默认为false,如果设置为true,则提供调试信息;若是在docker中使用,记得docker要把对应的端口映射到主机;
-
python和flask中返回JSON数据的方法如下:
字典转化为JSON的数据格式:return json.dumps(result_dict,ensure_ascii=False) #result_dict为字典数据,使用json转换的在前端显示的数据为JSON字符串;
使用flask的jsonify转换后,在前台显示的为JSON对象:return jsonify(result_dict)
-
快速启动一个flask接口
使用这个环境
//略,这里涉及到工作环境了
在这个目录下:(使用python3)
/home/work/miniconda3/envs/bfc38/bin
实操:
这里涉及工作环境,略,基本上就是找到python3的目录之后,一定要调用对应的目录(比如这里是/home/work/miniconda3/envs/bfc38/bin)
就用 /home/work/miniconda3/envs/bfc38/bin/python3 test.py 来调用你想调用的py文件即可
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello flask!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8877, debug=True)
复制地址拿到浏览器里跑一下,出现hello flask说明跑通了
运行过程中修改文件(并保存的话)出现语法错误,会导致脚本终止
注:debug=True的用法:
在 Flask 中,`debug` 参数用于启动调试模式。当 `debug` 设置为 `True` 时,Flask 会在发生错误时提供详细的调试信息,同时还会监视文件的变化,使得您在修改代码后不必重新启动服务器。
在生产环境中,建议将 `debug` 设置为 `False`,因为调试模式可能会泄漏敏感信息,并且不适用于处理大量请求的情况。在生产环境中,最好使用一个成熟的服务器,如Gunicorn或uWSGI,并将 Flask 的调试模式关闭。
在开发阶段,启用调试模式可以更容易地发现和解决问题,因为它提供了有关代码执行过程中发生的错误的详细信息。但请务必在生产部署之前禁用调试模式以提高安全性。
-
详解flask接口测试
首先需要引入request包
from flask import request
-
如何关闭一个flask脚本
ps -af | grep python
找到对应进程的PID,然后使用kill PID杀掉对应的进程即可
注:这里的第二列就是PID,通过查看该进程对应的文件确定哪个是目标进程
(后续应该要系统学习一下linux的相关用法,倒不是不会用,就是不太熟)
1、需要对请求头进行测试
使用request.header获取请求头中的数据,比如请求头里面有一个test参数,那就是
args = request.header -- 这一步相当于取得了全部的请求头
之后,使用args.get("test")取得test这个key里面的值
test里面可以替换成任意请求头,其实就是一个字典(or map),用get取得key对应的value就可以了,下面的其他情况同理
2、需要对请求体进行测试
-
默认的表单(application/x-www-form-urlencoded)使用request.form ;
-
如果是json(application/json): request.json取出所有的键值对
具体哪种需要看请求头中的Conternt-Type 当然也有可能是其他的,下面补充一下常见的http请求数据类型(Content-Type)
Content-type 定义了 http 请求的数据类型。
如果设置在请求头中,则定义的是请求体的数据类型;
如果设置在响应头中,则定义的是响应体的数据类型;
请求头--Request-Headers:一般我们在 post 请求中会向服务器发送一些参数,那我们就可以通过这个参数设置 post 的参数格式
application/json:JSON 数据格式;
application/x-www-form-urlencoded:表单默认的提数据格式;
multipart/form-data:一般用于文件上传;
响应头--Response-Headers:响应头里的 Content-Type 参数会告诉我们响应数据的格式,一般我们可以在请求头里面设置我们想要的数据格式(Accept);
以下是常见的Content-Type:
text开头
text/html: HTML格式
text/plain:纯文本格式
text/xml: XML格式
图片格式
image/gif :gif 图片格式
image/jpeg :jpg 图片格式
image/png:png 图片格式
application开头
application/xhtml+xml:XHTML 格式
application/xml:XML 数据格式
application/atom+xml:Atom XML 聚合格式
application/json:JSON 数据格式
application/pdf:pdf 格式
application/msword:Word 文档格式
application/octet-stream:二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded:表单发送默认格式
媒体文件
audio/x-wav:wav文件
audio/x-ms-wma:w文件
audio/mp3:mp3文件
video/x-ms-wmv:wmv文件
video/mpeg4:mp4文件
video/avi:avi文件
3、需要对url中附带的请求参数进行测试
请求参数是指
http://127.0.0.1:5000/query?id=1 里面的 「?id=1」这部分
需要用request.arg提取这部分参数,之后的处理和第一条一样
示例
@app.route('/query') # http://127.0.0.1:5000/query?id=1&name=zhangsan
def query():
args = request.args # args 请求的参数
args_dict = args.to_dict() # 获取请求参数 字典格式
name = args.get('name')
print(args) # [('id', '1'), ('name', 'zhangsan')]
print(args_dict) # {'id': '1', 'name': 'zhangsan'}
print(name) # zhangsan
return '查询参数== 姓名:%s' % name
4、获取固定参数
@app.route('/fixed/<int:id>/<name>')
def fixed(id, name):
print(id)
print(name)
return '固定参数'
5、补充
可供参考
Flask基础:请求数据获取与响应_flask获取前端数据-CSDN博客
Flask中获取参数(路径,查询,请求体,请求头)-CSDN博客
基于Flask进行接口开发及测试_chrome测试 flask接口-CSDN博客