gpt4 book ai didi

python - Flask 丢失客户的回复

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:10 25 4
gpt4 key购买 nike

假设有一个 View 的函数如下:

@app.route('/cat/', methods=('GET', 'POST'))
@check_something(check='cat')
def cat():
print 'cat'
return 'cat'

@app.route('/dog/', methods=('GET', 'POST'))
@check_something(check='dog')
def dog():
print 'dog'
return 'dog'

在这里,我使用了一个名为 check_something() 的装饰器,我想做的是在执行 mainfanction 之前检查条件。装饰器函数代码为:

def check_something(check=''):
def decorator(f):
@functools.wraps(f)
def decorated_function(*args, **kwargs):
print('check_start')
if check == 'dog':
return jsonify( ret='check dog' )
else:
ctx = f(*args, **kwargs)
return jsonify( ret=ctx )
return decorated_function
return decoration

我分别从android客户端和web客户端测试,下面是测试结果:

Android + GET: route 'cat' is OK, route 'dog' is OK;
Web + GET : route 'cat' is OK, route 'dog' is OK;
Android +POST: route 'cat' is OK, route 'dog' is Failed, raise SocketTimeoutException;
Web + POST: i didn't test it.

为什么?太奇怪了!

说说个人的一些推测。

1.由装饰器引起。*Flask的装饰器@app.route()会记录被装饰的函数。所以我添加了 functools.wraps(f) 来保持函数的特性。但是当程序执行 check_something(check='dog') 时,并没有执行 f(*args, **kwargs),所以 flask 失去了修饰函数的特性。所以 flask 失去了 react 。我猜。

2.但是为什么GET可以执行成功呢?可能是Flask和POST之间有问题。我想也是。

谁能帮帮我?谢谢!

最佳答案

我认为你的装饰器有问题。 f 是被修饰的函数,如果有是一个测试 f 没有被执行。更正后的版本:

 print('check_start')
if check == 'dog':
ctx = f(*args, **kwargs)
return jsonify( ret='check dog' )
else:
ctx = f(*args, **kwargs)
return jsonify( ret=ctx

关于python - Flask 丢失客户的回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19994203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com