对于endpoint(端点)的理解
flask框架的程序理念是把URL地址映射到相应的业务逻辑上。
其中,映射过程并非直接为URL–>viewfunction,而是URL–>endpoint–>viewfunction。
endpoint的存在意义
endpoint一般用作反向查询URL地址(viewfunction–>endpoint–>URL)。这样就可以让URL与视图间的关联代码进行解耦,比如:在两个视图通过url_for()
进行相关联的时候,可以任意改变视图的URL,只要端点不变,就不需要改动关联代码。
endpoint在蓝图中的应用
除了解耦作用,endpoint在蓝图中还有更妙的用处:通过端点实现对命名空间的支持
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!'
user.py
user = Blueprint('user', __name__)
@user.route('/greeting')
def greeting():
return 'Hello, lowly normal user!'
打印url,可以发现虽然不同蓝图下的url相同,但是端点是不同的,也就是说不同的蓝图,他们的命名空间是相互隔离的。
print url_for('admin.greeting') # Prints '/admin/greeting'
print url_for('user.greeting') # Prints '/user/greeting'