gpt4 book ai didi

python - Pyramid : View 可调用项如何接受一个或两个参数?

转载 作者:太空宇宙 更新时间:2023-11-03 15:20:50 24 4
gpt4 key购买 nike

以最简单的形式调用的 Pyramid View 可以写成:

def myview(request):
pass

另一种形式是接受另一个参数——上下文:

def myview(context, request):
pass

Pyramid View 查找机制如何知道可调用 View 是否接受上下文?

最佳答案

Pyramid 使用 inspect 模块检查 View (特别是 requestonly() function 中的 .getargspec() 调用:

def requestonly(view, attr=None):
ismethod = False
if attr is None:
attr = '__call__'
if inspect.isroutine(view):
fn = view
elif inspect.isclass(view):
try:
fn = view.__init__
except AttributeError:
return False
ismethod = hasattr(fn, '__call__')
else:
try:
fn = getattr(view, attr)
except AttributeError:
return False

try:
argspec = inspect.getargspec(fn)
except TypeError:
return False

args = argspec[0]

if hasattr(fn, im_func) or ismethod:
# it's an instance method (or unbound method on py2)
if not args:
return False
args = args[1:]
if not args:
return False

if len(args) == 1:
return True

defaults = argspec[3]
if defaults is None:
defaults = ()

if args[0] == 'request':
if len(args) - len(defaults) == 1:
return True

return False

如果 View 不接受上下文,则其余代码会调整代码路径以省略上下文。

关于python - Pyramid : View 可调用项如何接受一个或两个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15314983/

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