当前位置: 首页 > 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++面试题总结
  • CentOS 7 防火墙操作
  • create-react-app项目添加less配置
  • Golang-长连接-状态推送
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java超时控制的实现
  • js数组之filter
  • js正则,这点儿就够用了
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • scrapy学习之路4(itemloder的使用)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • SQLServer之索引简介
  • Vue ES6 Jade Scss Webpack Gulp
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 电商搜索引擎的架构设计和性能优化
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 关于extract.autodesk.io的一些说明
  • 突破自己的技术思维
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • !!java web学习笔记(一到五)
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (4)logging(日志模块)
  • (zt)最盛行的警世狂言(爆笑)
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转载)虚函数剖析
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET Micro Framework初体验
  • .Net MVC4 上传大文件,并保存表单
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET命令行(CLI)常用命令
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @Async注解的坑,小心
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法