当前位置: 首页 > news >正文

Flask 学习-20. route 路由中的 endpoint 参数

前言

@app.route 中的 endpoint 参数,就相当于django中的name参数,用来反向生成URL。

url_for() 函数

url_for() 函数用于构建指定函数的 URL。它把函数名称作为第一个参数。它可以接受任意个关键字参数,每个关键字参数对应 URL 中的变量。未知变量 将添加到 URL 中作为查询参数。

为什么不在把 URL 写死在模板中,而要使用反转函数 url_for() 动态构建?

  • 反转通常比硬编码 URL 的描述性更好。
  • 你可以只在一个地方改变 URL ,而不用到处乱找。
  • URL 创建会为你处理特殊字符的转义和 Unicode 数据,比较直观。
  • 生产的路径总是绝对路径,可以避免相对路径产生副作用。
  • 如果你的应用是放在 URL 根路径之外的地方(如在 /myapplication 中,不在 / 中), url_for() 会为你妥善处理。

例如,这里用url_for() 函数通过视图函数名称,反向获取到访问的url地址

from flask import url_for, Flask


app = Flask(__name__)


@app.route('/api/v1/hello')
def hello_view():
    # 数据库交互
    # 实例化 Students 模型对象
    print(url_for('hello_view'))
    return {"code": "0", "msg": "success"}


if __name__ == '__main__':
    app.run()

url_for('hello_view') 通过视图函数,可以反向得到 url 地址 /api/v1/hello

endpoint 参数

上面了解了 url_for() 函数的使用,接着看 endpoint 参数的使用,endpoint 相当于给视图函数取一个别名

@app.route('/api/v1/hello', endpoint="hello")
def hello_view():
    # 数据库交互
    # 实例化 Students 模型对象
    print(url_for('hello_view'))
    return {"code": "0", "msg": "success"}

当加了 endpoint 参数, url_for() 函数如果获取视图函数名称会报错

Could not build url for endpoint 'hello_view'. Did you mean 'hello' instead?

也就是只能通过endpoint 设置的名称来反向获取视图函数的url地址了

@app.route('/api/v1/hello', endpoint="hello")
def hello_view():
    # 数据库交互
    # 实例化 Students 模型对象
    print(url_for('hello'))
    return {"code": "0", "msg": "success"}

此时通过hello 名称可以获取到 url 地址 ‘/api/v1/hello’。

总结:
url_for() 相当于 django 中的 reverse() 函数,endpoint 参数相当于 django 中的 name 参数。
如果我们不指定endpoint,则 endpoint 默认等于视图函数名, 如果指定了endpoint参数,那么url_for() 需传endpoint 的值。

相关文章:

  • bp神经网络反向传播推导,bp神经网络的传递函数
  • Flask 学习-21. 项目配置通过.env环境变量启动开发/生产环境
  • 图像识别和机器视觉区别,比较两幅图像的相似度
  • Jetson Orin平台Jetpack5.0.2 VIFALC_TDSTATE问题调试
  • Elastic search的日期问题
  • DOM基础应用
  • 足疗APP
  • 一张图进阶 RocketMQ - 消息存储
  • kafka生产者如何提高吞吐量
  • 基于神经网络的智能系统,神经元网络控制的作用
  • npm——整理前端包管理工具(cnpm、yarn、pnpm)
  • 基于Vue+Element UI+Node+MongoDB的医院门诊预约挂号系统
  • Linux系统中使用vim编写C语言代码实现过程
  • Spire.Cloud 私有化部署教程(三) - Windows 系统
  • c++面试题总结
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 10个最佳ES6特性 ES7与ES8的特性
  • CEF与代理
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • CSS 三角实现
  • HTTP--网络协议分层,http历史(二)
  • Java的Interrupt与线程中断
  • Protobuf3语言指南
  • SAP云平台里Global Account和Sub Account的关系
  • Spark RDD学习: aggregate函数
  • springboot_database项目介绍
  • supervisor 永不挂掉的进程 安装以及使用
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 阿里云购买磁盘后挂载
  • 笨办法学C 练习34:动态数组
  • 关于List、List?、ListObject的区别
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 深入浅出webpack学习(1)--核心概念
  • 使用权重正则化较少模型过拟合
  • 通过几道题目学习二叉搜索树
  • 我有几个粽子,和一个故事
  • hi-nginx-1.3.4编译安装
  • 数据库巡检项
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # Maven错误Error executing Maven
  • #pragma pack(1)
  • (02)Hive SQL编译成MapReduce任务的过程
  • (03)光刻——半导体电路的绘制
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (Matlab)使用竞争神经网络实现数据聚类
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (原)本想说脏话,奈何已放下
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决