Flask 是一个简单且十分强大的 Python web 框架. 它被称为微框架,"微" 并不是意味着把整个 Web 应用放入到一个 Python 文件, 微框架中的 "微" 是指 Flask 旨在保持代码简洁且易于扩展, Flask 框架的主要特征是核心构成比较简单, 但具有很强的扩展性和兼容性, 程序员可以使用 Python 语言快速实现一个网站或 Web 服务. 因此 flask 能很方便构建一个 Web 服务, 给外部也可以叫做客户端提供 Web 服务, 针对 flask 框架这种特点我们可以很容易构建 API 接口, 供客户端访问.
Flask 接口开发示例
首先安装需要的 Flask 模块, 如果你的环境已经安装了 pip 则键入: pip install flask 即可安装完成
1.1 构建 GET 请求方法的接口
在 Pycharm 中新建 py 文件, 编辑如下代码
- # -*- coding: utf-8 -*-
- import flask,JSON
- import time
- server = flask.Flask(__name__) # 创建一个服务, 把当前这个 python 文件当做一个服务
- @server.route('/VIID/System/Time', methods=['get']) # @server.route() 可以将普通函数转变为服务, 接口的路径, 请求方式, 如果不写 methods 则默认 get 方法
- def Time():
- '''查询字符串: 无, 消息体: 无, 返回结果: SystemTime'''
- response_data = {
- "SystemTimeObject": {
- "VIIDServerID": "123",
- "TimeMode": "1",
- "LocalTime": time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())),
- }
- }
- return JSON.dumps(response_data, ensure_ascii=False)
- if __name__ == '__main__':
- server.run(debug=True, port=5000, host='10.82.25.11') # 指定访问端口, host
然后运行该 py 文件, 则该文件运行在本地就是一个 Web 服务, 用浏览器或者 postman 尝试访问该服务的 URL 即可
浏览器访问:
postman 发请求访问:
浏览器或者 postman 请求完成后, 在 Pycharm 的输出栏会输出如下:
其它的请求如 POST,PUT,DELETE 等方法, 在 methods 参数中指明即可, 不过 POST,PUT,DELETE 等方法不能由浏览器直接访问, 因为浏览器默认访问时是 get 方法, 可以用 postman 按指定的方法发请求
1.2 获取带 JSON 格式请求体的接口
有时客户端发送的请求是带 JSON 格式的, 这时需要获取请求的 JSON, 编辑代码如下:
- @server.route('/data',methods=['post'])
- def post_json():
- if flask.request.is_json:
- print(flask.request.JSON)
- name = flask.request.JSON.get('name') # 获取 JSON 请求体的第一个参数的值
- age = flask.request.JSON.get('age') # 获取 JSON 请求体的第二个参数的值
- data = {
- 'name':name,'age':age
- }
- return JSON.dumps(data,ensure_ascii=False)
- else:
- return JSON.dumps({
- 'msg':'请传 json 格式参数'
- },ensure_ascii=False)
使用 postman 作为客户端发送带 JSON 请求体的请求, 如下图:
1.3 获取 get 请求中发送的参数
flask 提供的方法是:
value = flask.request.args.get('name') # 获取 get 请求参数 name 的值
1.4 构建动态 URL 以及响应体的重定向
很多时候, 客户端请求的 url 是变化的, 也就是带有动态参数的, flask 也是可以轻松的构建提供动态参数的 url 资源服务并重定向响应体, 代码如下:
- # -*- coding: utf-8 -*-
- import flask,JSON
- from flask import url_for,redirect
- server = flask.Flask(__name__) # 创建一个服务, 把当前这个 python 文件当做一个服务
- @server.route('/data')
- def data(): # 返回 data
- data = {
- 'VideoSliceInfoObject': {
- 'VideoID': 'esse elit',
- 'AudioCodeFormat': 'commodo'
- }
- }
- return JSON.dumps(data, ensure_ascii=False)
- @server.route('/data/<ID>/Info', methods=['post'])
- def data_redirect(ID):
- return redirect(url_for('data', guest=ID))
- if __name__ == '__main__':
- server.run(debug=True, port=5000, host='10.82.25.11') # 指定访问端口, host
后面无论 postman 或者客户端发送的 url 中的 ID 参数是啥, 都可以响应
1.5 重新构建响应头和响应状态码
有时在与第三方系统对接时, 需要返回携带响应头消息和指定的响应状态码, 在 flask 中也是可以构建自定义的响应消息的
- # -*- coding: utf-8 -*-
- import flask,JSON
- server = flask.Flask(__name__) # 创建一个服务, 把当前这个 python 文件当做一个服务
- @server.route('/data',methods=['post'])
- def post_json():
- if flask.request.is_json:
- print(flask.request.JSON)
- name = flask.request.JSON.get('name') # 获取 JSON 请求体的第一个参数的值
- age = flask.request.JSON.get('age') # 获取 JSON 请求体的第二个参数的值
- data = {
- 'name':name,'age':age
- }
- # 构建响应头域和状态码
- resp = flask.make_response(JSON.dumps(data, ensure_ascii=False))
- resp.status = "666"
- resp.headers[
- "python"] = "python flask"
- return resp
- else:
- return JSON.dumps({
- 'msg':'请传 json 格式参数'
- },ensure_ascii=False)
- if __name__ == '__main__':
- server.run(debug=True, port=5000, host='10.82.25.11') # 指定访问端口, host
运行该 py 文件, 在 postman 中发送请求, 查看响应信息, 如下图, 变成的我们自定义设置的响应头和状态码
这样我们就完全自定义了响应的头和状态码
来源: https://www.cnblogs.com/tdp0108/p/12082238.html