在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()
当我编码时,我喜欢在随机接受任何东西之前知道某件事是如何工作的。我搜索了一下,但找不到一个令人愉快的答案。我也查看了源代码,但我无法找到它是如何工作的
所以现在真正的问题是:我怎样才能在普通的 python 中重新创建一些类似的东西?因此,运行一个函数而不先在主代码中真正调用它。
对不起,我的英语不好,这不是我的主要语言。
app.route()
会记住URL("/"
(和与之关联的函数(hello
(。稍后,app.run()
可以查询该关联并调用hello
。
如何在普通的蟒蛇中重新创建类似的东西?
此程序可能会让您了解如何调用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()
的调用如下: https://github.com/pallets/flask/blob/0.12.2/flask/app.py#L1052