Flask学习_04_Flask路由endpoint

本文介绍了Flask中的endpoint概念及其作用,它作为路由和视图函数的连接点,主要用于反向查找和路由间的跳转。通过endpoint,可以更方便地组织和管理应用的路由。示例中展示了如何使用endpoint进行页面跳转,并在蓝图中如何利用endpoint区分不同蓝本的同名函数。理解并恰当使用endpoint能够提高Flask应用的灵活性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flask路由endpoint

Flask中的endpoint

再Flask中注册路由时,最常用的方法是使用装饰器(decorator)。

@app.route('/')
def index():
    return 'Hello World' 

把视图函数(view-func)注册到app上,URL是/,思路简单直接。但还有一种方法,一般配合工厂函数(Factory Function)使用。

def index():
    return 'Hello World' 
app.add_url_rule('/', view_func=index, endpoint='index')

参数endpoint我们可以把它看作路由和视图函数的中转站,或者是连接点。在@app.route中并不是没有这个参数,而是将其默认设置为视图函数的名称,也可以手动设置endpoint参数。

Endpoint的用途

endpoint通常用来“反向查找”。例如,从一个页面跳转到另一个页面时,可以使用url_for(endpoint,**values) 。

@app.route('/') 
def index():
     return redirect(url_for(endpoint='give_greeting',name="Mark"))# This will print '/greeting/Mark'

@app.route('/greeting/<name>')
def give_greeting(name):
    return 'Hello, {0}!'.format(name)

这是为了更加方便的组织路由和视图函数。我个人是这样理解的,

endpoint是flask作者 刻意加入的一个东西,方便组织路由和视图函数,你可以随便改url,也可以随便改view-func,而通过固定的endpoint,路由之间的调用和跳转(比如url_for())可以不受任何影响。不是非有不可,但是有它会方便很多

举例子

from flask import Flask, url_for, redirect
from flask import Blueprint
app = Flask(__name__)

admin = Blueprint('admin', __name__)

@app.route('/')
def index():
    return redirect(url_for(endpoint='sayhello',name="lisa"))

@app.route('/login2/<name>', methods=['get', 'post'],endpoint="sayhello")
def login(name):
    return f"hello world {name}"

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

蓝图中使用

注意,在两个蓝本中路由地址*‘/greeting’的函数都叫"greeting"。如果我想调用admin对应的greeting函数,我不能说“我想要greeting*”,因为这里还有一个user对应的greeting函数。端点这时就发挥作用了:指定一个蓝本名称作为端点的一部分–通过这种方式端点实现了对命名空间的支持。所以,我们可以这样写:

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

举例子

from flask import Flask, url_for, redirect
from flask import Blueprint
app = Flask(__name__)

admin = Blueprint('admin', __name__)

@admin.route('/greeting')
def greeting():
    return 'Hello, administrative user!'
user = Blueprint('user', __name__)
@user.route('/greeting')
def greeting():
    return 'Hello, lowly normal user!'
app.register_blueprint(admin, url_prefix='/admin')
app.register_blueprint(user, url_prefix='/user')
@app.route('/')
def index():
    # return redirect(url_for(endpoint='admin.greeting'))
    return redirect(url_for(endpoint='user.greeting'))


if __name__ == '__main__':
    print(app.view_functions)
    print(app.url_map)
    app.run()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值