• @setupmethod -- flask.setupmethod


    源码: 

    def setupmethod(f):
    """Wraps a method so that it performs a check in debug mode if the
    first request was already handled.
    """
    def wrapper_func(self, *args, **kwargs):
    if self.debug and self._got_first_request:
    raise AssertionError('A setup function was called after the '
    'first request was handled. This usually indicates a bug '
    'in the application where a module was not imported '
    'and decorators or other functionality was called too late. '
    'To fix this make sure to import all your view modules, '
    'database models and everything related at a central place '
    'before the application starts serving requests.')
    return f(self, *args, **kwargs)
    return update_wrapper(wrapper_func, f)
    作用: 该对象是一个装饰器。目的是校验Flask实例是否开启了debug模式并且获取第一个请求(从字面理解),如果是这样则报错。
    其中调用functools的 update_wrapper ()

    WRAPPER_ASSIGNMENTS = ('__module__', '__name__', '__doc__')
    WRAPPER_UPDATES = ('__dict__',)
    def update_wrapper(wrapper,
    wrapped,
    assigned = WRAPPER_ASSIGNMENTS,
    updated = WRAPPER_UPDATES):
    """Update a wrapper function to look like the wrapped function

    wrapper is the function to be updated
    wrapped is the original function
    assigned is a tuple naming the attributes assigned directly
    from the wrapped function to the wrapper function (defaults to
    functools.WRAPPER_ASSIGNMENTS)
    updated is a tuple naming the attributes of the wrapper that
    are updated with the corresponding attribute from the wrapped
    function (defaults to functools.WRAPPER_UPDATES)
    """
    for attr in assigned:
    setattr(wrapper, attr, getattr(wrapped, attr))
    for attr in updated:
    getattr(wrapper, attr).update(getattr(wrapped, attr, {}))
    # Return the wrapper so this can be used as a decorator via partial()
    return wrapper




    对flask.app的所有方法预加载了这个装饰器,



  • 相关阅读:
    社区专家谈 12306
    一致性Hash算法(分布式算法)
    ASP.NET二级域名站点共享Session状态
    树莓派2 安装 win10Iot 和 Ubuntu mate
    Maven运行时异常java.lang.UnsupportedClassVersionError的解决方案
    Ubuntu安装steam游戏平台的解决方案
    Spring配置JNDI的解决方案
    Intellij Idea无法从Controller跳转到视图页面的解决方案
    电话激活windows server 2012的解决方案
    如何下载Red Hat Enterprise Linux系统
  • 原文地址:https://www.cnblogs.com/bayueman/p/6609554.html
Copyright © 2020-2023  润新知