每次我请求烧瓶API时,我都想获得增量值。但是我总是得到相同的值,因为pass
对象一次又一次地被创建。
我已经制作了烧瓶API和生成器函数。
// app.component.ts
constructor(private router: Router) {
// reset routes
router.resetConfig(routes);
}
输出:
<div *ngIf="myFlag != null; elseCondition">
<ion-button expand="block" fill="outline"color="success" (click)="navigate(id)">Flight route</ion-button>
</div>
<ng-template #elseCondition>
No data
</ng-template>
series()
@app.route('/eRxBot/Increment', methods=['POST','GET'])
def Gen():
gen =series()
val =str(next(gen))
print(val)
res = Response(val)
return res
def series():
for i in range(1,999):
yield i
,依此类推,每次API调用都会增加。
答案 0 :(得分:1)
您看到的问题是您正在为每个HTTP请求创建系列生成器的新实例。通过将生成器的实例移到视图函数之外,它将随每个请求而增加。
但是,状态不会在应用程序的重新启动之间存储,也不会在需要支持数据存储的多个进程之间进行同步。
这是一个工作版本,是使用Redis代替本地生成器来支持值生成的示例。 编辑:对于其他问题,该系列现在每天重置基于生成器的示例。
from flask import Flask, Response
from flask_redis import FlaskRedis
import datetime
app = Flask(__name__)
redis_store = FlaskRedis(app)
redis_key = "my_incr"
def series():
for i in range(1, 999):
yield i
def make_get_or_rotate_series():
today = datetime.date.today()
current_series = series()
def get_or_rotate_series(current_day=None):
nonlocal today, current_series
current_day = current_day if current_day else datetime.date.today()
if today != current_day:
today = current_day
current_series = series()
return current_series
return get_or_rotate_series
get_series = make_get_or_rotate_series()
@app.route('/eRxBot/Increment', methods=['POST', 'GET'])
def gen():
val = str(next(get_series()))
print(val)
res = Response(val)
return res
@app.route('/eRxBot/Increment-Redis', methods=['POST', 'GET'])
def gen_redis():
val = redis_store.incr(redis_key)
res = Response(str(val))
return res
if __name__ == "__main__":
# tests
test_get_series = make_get_or_rotate_series()
assert next(test_get_series()) == 1
assert next(test_get_series()) == 2
tomorrow = datetime.date.today() + datetime.timedelta(days=1)
assert next(test_get_series(tomorrow)) == 1
assert next(test_get_series(tomorrow)) == 2
app.run()