当前位置:网站首页>浅谈Endpoint

浅谈Endpoint

2022-08-09 07:57:00 scwMason

刚开始知道EndPoint是从学Flask-restful的时候,看了一些文章以后觉得理解这个还是得从flask的url与函数之间的指向过程,之前一直认为:

@app.route("/index")
def index:
   pass

我们进入/index的时候就是以为直接找到index函数,执行里面的内容,但是其实不然

在源码中我们可以发现:

  • 每个应用程序app都有一个view_functions,这是一个字典,存储endpoint-view_func键值对。add_url_rule的第一个作用就是向view_functions中添加键值对(这件事在应用程序run之前就做好了)
  • 每个应用程序app都有一个url_map,它是一个Map类(具体实现在werkzeug/routing.py中),里面包含了一个列表,列表元素是Role的实例(werkzeug/routing.py中)。add_url_rule的第二个作用就是向url_map中添加Role的实例(它也是在应用程序run之前就做好了)
    我们可以通过一个例子来看
from flask import Flask
app=Flask(__name__)
@app.route('/test', endpoint='Test')
def test():
    pass
@app.route('/', endpoint='index')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    print(app.view_functions)
    print(app.url_map)
    app.run()

 

我们发现url_map中对应的是url与endpoint的映射

所以endpoint就像是一个url的id一样,这个id就可以表示这个url

 

为什么不直接用视图函数呢?

现在的问题是:“为什么我们需要这个额外的层 (endpoint) ? 为什么要将路径映射到endpoint,然后将endpoint映射到视图函数? 为什么不跳过这个中间步骤?

原因是因为这种方式更强大。 例如,Flask Blueprints允许您将应用程序分成不同的部分。 我可能将所有管理端资源都放在名为“admin”的 blueprint 中,并将所有用户级资源放在“user”的 endpoint中。

Blueprints 允许您将这些分隔到命名空间中。 例如...
main.py:

from flask import Flask, Blueprint
from admin import admin
from user import user

app = Flask(__name__)
app.register_blueprint(admin, url_prefix='admin')
app.register_blueprint(user, url_prefix='user')

admin.py:

admin = Blueprint('admin', __name__)

@admin.route('/greeting')
def greeting():
    return 'Hello, administrative user!'

user.py:

user = Blueprint('user', __name__)
@user.route('/greeting')
def greeting():
    return 'Hello, lowly normal user!'

请注意,在这两个blueprint中,“/ greeting”路由是一个名为“greeting”的函数。 如果我想引用admin 的 “greeting” 函数,我们需要使用 "admin.greeting"。 endpoint 允许我们将blueprint的名称指定为端点的一部分,从而实现一种命名空间。 所以,我们可以使用下面的做法:

print url_for('admin.greeting') # Prints '/admin/greeting'
print url_for('user.greeting') # Prints '/user/greeting'

参考文章:https://www.cnblogs.com/eric-nirnava/p/endpoint.html

                  https://www.jianshu.com/p/0611f044efc4

作者:Alex_Dj
链接:https://www.jianshu.com/p/0611f044efc4
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

原网站

版权声明
本文为[scwMason]所创,转载请带上原文链接,感谢
https://blog.csdn.net/scwMason/article/details/88201534