烧瓶如何知道要为特定网址添加哪个功能?

时间:2018-03-16 16:06:20

标签: python python-decorators

在populair web框架中,基本网页如下所示:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

我是python的新手,我想知道这是如何工作的。我知道@是一个装饰hello函数的装饰器,但是如何调用底层的hello函数或甚至知道它存在,因为代码不运行这样的hello函数:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

hello()

当我编码时,我想在我随机接受任何事情之前知道某些事情是如何运作的。我搜索了我,但寻找答案但找不到一个很好的答案。我也看了source code,但我无法找到它是如何工作的

所以现在真正的问题是:如何在普通的python中重新创建类似的东西?所以运行一个函数,而不是先在主代码中调用它。

聚苯乙烯。抱歉我的英语不好,这不是我的主要语言。

1 个答案:

答案 0 :(得分:1)

app.route()会记住网址("/")以及与之关联的功能(hello)。稍后,app.run()可以查询该关联并调用hello

  

如何在普通的python中重新创建类似的东西?

此程序可能会让您了解如何调用hello()

class Flask:
    def __init__(self):
        self.routes = {}

    def route(self, path):
        def wrapper(fn):
            self.routes[path] = fn
            return fn
        return wrapper

    def run(self):
        # Networking code goes here.
        # Suppose "/" comes in as a request, then this happens:
        self.routes["/"]()

app = Flask()


@app.route("/")
def hello():
    print("Inside hello")
    return "Hello World!"

app.run()

或者,您可以检查flask来源:https://github.com/pallets/flask具体而言,此处定义了app.route()https://github.com/pallets/flask/blob/0.12.2/flask/app.py#L1054,此处对hello()的调用如下:{ {3}}