Flask中'endpoint'(端点)的理解

Flask 踩坑连载。。。。 from flask import Flask,request app=Flask(__name__) @app.route('./index') def index(): return '666' app.run() 报错:ValueError: urls must start with a leading slash 原因:装饰器路由上多加了个’ . ’ ... 阅读详情

参考:http://blog.youkuaiyun.com/hello_albee/article/details/51638358

Flask路由是如何工作的

整个flask框架(及以Werkzeug类库为基础构建的应用)的程序理念是把URL地址映射到你想要运行的业务逻辑上(最典型的就是视图函数),例如:

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

注意,add_url_rule函数实现了同样的目的,只不过没有使用装饰器,因此,下面的程序是等价的:

# 抬头没有使用路由装饰器,我们在最后用另一种方法添加路由.
def give_greeting(name):
    return 'Hello, {0}!'.format(name)

app.add_url_rule('/greeting/<name>', 'give_greeting', give_greeting)
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

备注:add_url_rule()中3个参数依次是rule、endpoint、view_func.(转载出处的文章内有误,endpoint应该是第二个参数)

假设www.example.org站点定义了以上视图,用户在浏览器中输入以下地址

http://www.example.org/greeting/Mark
 
  • 1
  • 1

Flask的工作就是捕捉这个URL地址,弄清用户想要做什么,并在众多的Python函数中匹配一个可以处理它的函数,回到我们的实例中,URL地址就是

/greeting/Mark
 
  • 1
  • 1

拿着这个地址到路由表中做匹配,flask发现这个地址指向了give_greeting函数。 
然而,当我们用这种最常用的方法创建视图时,flask却向我们隐藏了一些其他的细节信息。在这个场景中,flask并没有直接从URL地址跳转到应该响应它请求的视图函数上:

URL (http://www.example.org/greeting/Mark) 被视图函数处理 ("give_greeting"函数)
 
  • 1
  • 1

事实上,这里还有另一个步骤–把URL地址映射到端点上(URL**–>endpoint–>**viewfunction):

URL (http://www.example.org/greeting/Mark) 映射到端点"give_greeting"上.
指向端点"give_greeting"的请求被视图函数"give_greeting"处理.
 
  • 1
  • 2
  • 1
  • 2

从根本上来说,端点就是程序中一组逻辑处理单元的ID,该ID对应的代码决定了对此ID请求应该作出何种响应。通常,端点与视图函数同名,但是你也可以修改它,例如:

@app.route('/greeting/<name>', endpoint='say_hello')
def give_greeting(name):
    return 'Hello, {0}!'.format(name)
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

现在就成了这样:

URL (http://www.example.org/greeting/Mark) 映射到端点"say_hello"上.
指向端点"say_hello"的请求被视图函数"give_greeting"处理.
 
  • 1
  • 2
  • 1
  • 2

Endpoint有什么作用

端点通常用作反向查询URL地址(viewfunction**–>endpoint–>**URL)。例如,在flask中有个视图,你想把它关联到另一个视图上(或从站点的一处连接到另一处)。不用去千辛万苦的写它对应的URL地址,直接使用URL_for()就可以啦:

@app.route('/')
def index():
    print url_for('give_greeting', name='Mark') # 打印出 '/greeting/Mark'

@app.route('/greeting/<name>')
def give_greeting(name):
    return 'Hello, {0}!'.format(name)
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

备注:url_for()中give_greeting是端点名.

这样做是大有裨益的:我们可以随意改变应用中的URL地址,却不用修改与之关联的资源的代码。

为何要多此一举

那么问题来了:为何要多此一举,为何要先把URL映射到端点上,再通过端点映射到视图函数上,为何不跳过中间的这个步骤? 
原因就是采用这种方法能够使程序更高、更快、更强。例如蓝本。蓝本允许我们把应用分割为一个个小的部分,现在admin蓝本中含有超级管理员级的资源,user蓝本中则含有用户一级的资源。 
蓝本允许咱们把应用分割为一个个以命名空间区分的小部分: 
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')
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

admin.py:

admin = Blueprint('admin', __name__)

@admin.route('/greeting')
def greeting():
    return 'Hello, administrative user!'
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

user.py:

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

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

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

来发实例

from flask import Flask, url_for

app = Flask(__name__)

# We can use url_for('foo_view') for reverse-lookups in templates or view functions
@app.route('/foo')
def foo_view():
    pass

# We now specify the custom endpoint named 'bufar'. url_for('bar_view') will fail!
@app.route('/bar', endpoint='bufar')
def bar_view():
    pass

with app.test_request_context('/'):
    print (url_for('foo_view'))  #/foo
    print (url_for('bufar'))  #/bar
    # url_for('bar_view') will raise werkzeug.routing.BuildError
    print (url_for('bar_view'))  #端点bar_view是没有定义的
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

程序运行结果 
python_endpoint_程序运行结果

更多参考: 
http://www.cnblogs.com/eric-nirnava/p/endpoint.html

(六)Flask之endpoint和url_for()函数 阅读详情

相关推荐

Flask中endpoint的理解(小结)

在flask框架中,我们经常会遇到endpoint这个东西,最开始也没法理解这个到底是做什么的。最近正好在研究Flask的源码,也就顺带了解了一下这个endpoint 首先,我们看一个例子: @app.route('/user/<name>') def user(name): return 'Hello, %s' % name 这个是我们在用flask框架写网站中最常用的。 通过看源码,我们可以发现: 函数等效于 def user(name) return 'Hello, %s' % name app.add_url_rule('/user/<name>', 'user

Flask学习_04_Flask路由endpoint

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

Wyongkang的博客 1071

eNSP-Pro配置又丢了?手把手教你用导出功能防患于未然

本文详细介绍了eNSP-Pro配置防丢失的全套方案,包括运行时内存、虚拟存储设备和宿主机文件系统的配置存储机制,以及多维度备份策略和特殊场景下的恢复技巧。通过优化保存流程、自动化定时导出和版本化管理,帮助网络工程师有效防止配置丢失,提升工作效率。

weixin_42665725的博客 241

flask(十一)----重定向

flask在重定向时通过redirect函数执行重定向的url,底层通过response.headers['location']=location修改response的header,浏览器在收到响应时会先检查status_code是否时30x的状态码,若是,则判定为后台服务要求重定向到其他页面,然后根据‘location‘字段判断重定向的位置,给用户展示的就是重定向后的页面了。 redirect()源码: 1.redirect()重定向: from flask import Flask, req

qq_40132294的博客 6040

工控上位机开发学习路线与核心技术解析

工控上位机开发是工业自动化领域的关键技术,通过计算机软件实现对工业设备的监控与控制。其核心在于掌握工业通信协议(如Modbus、OPC UA)、数据处理算法和可视化开发三大能力。上位机系统需要高效解析设备通信协议,处理实时数据,并提供直观的人机交互界面。在智能制造浪潮下,掌握C#语言和工业协议开发能力成为工程师的核心竞争力。典型应用场景包括生产线监控、设备远程运维等。本文基于工业现场实践经验,详解从协议解析到界面优化的全链路开发要点,特别针对Modbus协议调优、WPF性能优化等高频问题提供解决方案。

weixin_30376083的博客 550

知识图谱与人工智能本体论:构建机器认知的语义基石

本文探讨了知识图谱与人工智能本体论如何作为机器认知的语义基石,让AI从‘知道数据’迈向‘理解知识’。文章详细拆解了本体论的核心构件与构建方法,并阐述了从本体到知识图谱的实践路径,包括知识获取、融合、存储及推理应用,最终分析了其在智能搜索与专家系统等场景中带来的根本性重塑。

nginx7reverse的博客 910

Flask中endpoint的理解

在flask框架中,我们经常会遇到endpoint这个东西,最开始也没法理解这个到底是做什么的。最近正好在研究Flask的源码,也就顺带了解了一下这个endpoint 首先,我们看一个例子: @app.route('/user/') def user(name): return 'Hello, %s' % name 这个是我们在用flask框架写网站中最常用的。 通过看源码,我们可以发现

Boyce_Allen的博客 4204

数字孪生成熟度的L0-L4五级划分,各自特征和应用场景

数字孪生的分级(或成熟度模型)通常用于描述其技术复杂度和功能完备性的演进过程。3D设计模型(CAD)、建筑信息模型(BIM)、产品数字化手册。全自动驾驶系统、自适应智能电网、 “黑灯工厂”的自主调度。多学科模型融合、 “What-if”分析、提供决策建议。IoT设备监控平台、预测性维护(报警)、智慧仪表盘。工艺仿真优化、资产性能管理、手术方案预演、虚拟调试。状态监控、历史回溯、阈值报警、根因分析。可视化、数字化档案。自优化、自适应、目标驱动、高度自治。传统设备、纸质记录的管理模式。无或仅有离线、孤立数据。

2401_82881178的博客 1551

Flask的endpoint的理解

在flask框架中,我们经常会遇到endpoint这个东西,最开始也没法理解这个到底是做什么的。最近正好在研究Flask的源码,也就顺带了解了一下这个endpoint 1、Flask路由是怎么工作 整个flask框架(及以Werkzeug类库为基础构建的应用)的程序理念是把URL地址映射到你想要运行的业务逻辑上(最典型的就是视图函数),例如: from flask import Flask app = Flask(__name__) @app.route("/index/") def index1

weixin_60067160的博客 1240

基于多时间尺度的电动汽车光伏充电站联合分层优化调度(Matlab代码实现)

该研究提出了一种电动汽车光伏充电站的分层优化调度方法,采用日前-日内两阶段协同优化框架。日前阶段通过混合整数规划对多充电站进行全局优化,以平抑电网波动和降低购电成本为目标;日内阶段基于实时数据,采用NSGA-II等算法动态分配充电功率。该方法实现了光伏高效消纳、成本节约和电网负荷平衡的有效统一。

zhangxd212489的博客 518

如何使用ArcGIS Pro制作带基底三维地图

点击运行生成范围线,因为之前对高程进行了夸大,导致生成的范围线和地形边缘不重合,我们打开范围线的图层属性,选择高程选项卡,要素位于选择地面上,如下图所示。目前制作的三维地图下面是空的一片,现在添加一个基底,在工具箱内点击“3D Analyst工具\栅格\转换\栅格范围”,调用栅格范围工具,如下图所示。打开ArcGIS Pro,新建一个局部场景,在高程表面下,地面上点击右键,选择添加高程源图层,将需要制作三维地图的DEM数据加载进来,如下图所示。在要素图层菜单内,类型选择绝对高度,如下图所示。

3978

flask endpoint参数理解

我们在使用装饰器生成路由的时候,有时候会看到别人写了一个endpoint参数,这个到底是个什么东西呢? @app.route('/', endpoint='index') def hello_world(): return 'Hello World!' 我们查看flask源码,关于route参数说明中查找到如下内容: param endpoint: the endpoint for the registered URL rule. Flask itself assumes the name o

小楼一夜听春雨 694

第20期-英伟达笔试题型解析

英伟达作为AI领域的缔造者及硬件基石,是这几年最为炙手可热的公司。英伟达以其高性能GPU设计闻名,硬件工程师岗位的招聘通常包括笔试和技术面试,考察领域涵盖数字电路设计、处理器架构、嵌入式系统和信号处理等。通过搜索公开平台,收集了候选人的面试经历和相关技术问题,,通过分析公开平台收集的笔试面试经验,结合英伟达的GPU架构特点,整理出可能涉及的典型题目,并提供详细解析。 以下是基于英伟达(Nvidia)硬件工程师笔试题型的解析与总结,涵盖核心知识点、解题思路及案例分析。

启芯硬件的博客 746

flask中endpoint的理解

Y23 在此,不再把endpoint方法说的很专业,谈谈个人的理解。 endpoint其实就可以指代django中urls设置路由时的‘name’属性。默认下,endpoint与定义函数名相同。 在我看来,设置endpoint有两个突出的优点:(在此以页面跳转为例) 1、将名字复杂的函数名利用endpoint简单命名。例如我简单定义一个网页 前端,渲染的定义函数名比较长,代码如下: @app1...

杨先生的博客 2547

Spring AI Alibaba 1.x 源码分析-架构设计

本文通过分析Spring AI Alibaba 框架的源码,分析出其原理和架构设计,无论是用于项目开发、技术评估还是团队培训都具有重要价值。

program哲学 489

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

flask中redirect、url_for、endpoint介绍

在 Flask 中,`redirect()` 是一个非常有用的函数,可以使服务器发送一个HTTP响应,指示客户端(通常是浏览器)自动导航到新的 URL。基本上,它是用来**重定向用户到不同的端点的**。 在 Flask 中,你可以使用 `redirect()` 函数重定向用户到不同的端点。这个函数接受一个参数,即用户将被重定向到的 URL。`redirect()` 函数返回一个响应对象,然后可以将其作为 HTTP 响应返回到客户端。

weixin_41777118的博客 1568

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Endpoint(端点)详解

基本定义:类比理解:当不显式指定端点时,Flask会自动使用视图函数名作为端点名: 2. 蓝图中的端点 在蓝图中使用时,端点会自动添加蓝图前缀: 3. 显式指定端点 可以使用参数自定义端点名: 三、Endpoint的核心用途 1. 使用生成URL 2. 模板中的URL生成 3. 跨蓝图引用 四、常见问题解决方案 1. 端点不存在错误(您遇到的错误) 错误示例: 解决方案:当两个路由使用相同的端点名时: 解决方法:命名规范:调试技巧: 项目结构建议: 理解端点的概念对Flask开发至关重要,它不

m0_74107848的博客 913

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Flask入门 之 endpoint

首先,要纠正两个错误! 1.flask是通过endpoint找到viewfunction(视图函数的),并不是通过路由直接找到viewfunction的。 2.是url_for(endpoint)而不是url_for(路由) 为什么很多人会有以上两种想法呢?因为,在构建路由的时候,如果不指定endpoint,系统定义为endpoint和viewfunction一个名字!!!!!!   注...

愿你饱经冷暖,仍保纯真 1109

测开之路一百二十六:flask之获取request请求数据

可以根据flask的request对象获取所有的请求信息 path = request.path # 获取请求地址method = request.method # 获取请求方法ip = request.remote_addr # 请求来源的ipform = request.form # 获取form表单的数据value = request.values # 获取查...

weixin_30617737的博客 395

详细了解Flask框架的入门

Flask 是一个以微核心设计为基础的轻量级 Web 应用框架,它提供了 Web 开发的基础功能,如路由、请求处理和响应构建。这种设计哲学使得 Flask 既简单直观,易于新手上手,又足够灵活,能够满足经验丰富的开发者的需求。开发者可以根据自己的项目需求,选择性地添加各种 Flask 扩展,实现如数据库集成、表单验证等额外功能。Flask 是一个轻量级的 Web 应用框架,它以微核心设计为基础,提供了 Web 开发的基础功能,包括路由、请求处理和响应构建。

Mrsbroken的博客 4389

flask中关于endpoint端点、url_map映射、view_func视图函数,view_functions、及视图函数名是否何以相同的问题?

视图函数中关于url_map视图的映射:应该是[url->methonds->endpoint] 而整个请求的过程,是先通过url地址映射到端点endpoint,然后通过endpoint找到试图函数view_func(扩展:在Flask类里边有一个view_funtions的属性,view_functions属性默认是一个空字典,其作用就是存储endpoint:v...

Allen . Liu 821

Flask之什么是路由、设置路由的两种方法、路由参数的详解(endpoint等)——@app.route()和app.add_url_rule()

一、@app.route() 路由参数 ‘/path’:服务器地址后面的路由地址:/ 代表 根目录;/pathpath可以代表任意路径; methods=[‘GET’,‘POST’];请求方式;表示该路由地址是何种请求方式 ...

我愿做一个聆听者,以学习为伴! 6253
上一篇: object-c的分类和扩展 eg:@interface ViewController()这句话什么意思
下一篇: Python模块包中__init__.py文件的作用
i丹明扬
博客等级 码龄15年 331粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值