我过去构建过 flask api,但我从来没有奢侈过在一个项目中允许我在做一个项目的同时进行测试驱动开发。现在我是。
我读过的每一篇指南都表明 flask-apis 是以一种绝对非面向对象的风格定义的。这使得编写单元测试变得非常困难,因为无法将可选参数或特定于测试的参数传递到实例化的 api 中。
例如,此博客解释了一种为 flask-api 创建单元测试的方法: http://mkelsey.com/2013/05/15/test-driven-development-of-a-flask-api/
博客在测试模式下设置了一个环境变量,脚本会监视该变量,并在发现变量时改变其行为。这对我来说似乎是不可取的。让你的源代码渗入你的操作系统环境是一个坏主意的原因有很多。我坚信封装功能是为了最大限度地提高可移植性,并明确区分模块的开始和结束位置。
为了满足我的编码理念,有人可能会建议我将 flask API 包装在一个类中。但是,我不清楚如何做这样的事情。例如,Flask 使用装饰器来定义路由:
@app.route()
这怎么可能适合一个类(class)?
如果有人以面向对象的方式开发了 Flask API,我将不胜感激。
请您参考如下方法:
您可以将 @app.route 替换为 add_url_rule。
举个例子:
from flask import Flask
class MyFlaskApp:
def __init__(self):
self.app = Flask(__name__)
self.app.add_url_rule('/', 'index', self.index)
def index(self):
pass
类似于:
from flask import Flask
app = Flask(__name__)
@app.route('/index')
def index():
pass
