首页 > 其他分享 >Flask 学习-20. route 路由中的 endpoint 参数

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

时间:2022-08-27 18:22:08浏览次数:60  
标签:endpoint 20 函数 Flask URL url 参数 hello

前言

@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 的值。

标签:endpoint,20,函数,Flask,URL,url,参数,hello
From: https://www.cnblogs.com/yoyoketang/p/16631105.html

相关文章

  • TMC2209步进驱动芯片基本配置及使用
    TMC2209是用于两相步进电机的超静音电机驱动器IC。TMC2209与许多传统驱动器以及TMC2208引脚兼容。TRINAMICs先进的StealthChop2斩波器可确保电机无噪音运行,实现最......
  • P5911 [POI2004]PRZ——状压dp
    一样,从\(n\le16\)启发用状压dp思路本质上与UVA11825Hackers'Crackdown异曲同工,不过可以通过预处理处理出一组人的集合时间复杂度最坏为\(O(2^{2n})\),当任何一个集合......
  • 20220827 使用EasyExcel导出复杂表格
    1、前言突然有个比较复杂的表格导出需求,写着挺好玩的,记录一下。需要实现的表格如图所示:先分析一下表格,可以看出大致分了四个区域:①第2-8行,②第9行,③第10-14行,④第15行。......
  • 适用于铁轨系统的多传感器融合SLAM(RAL 2022)
    https://mp.weixin.qq.com/s?__biz=MzIxOTczOTM4NA==&mid=2247553524&idx=2&sn=12fe2d7633ce51109976bacde02f62ec&chksm=97d4f463a0a37d75f496e3830ca2253e6cd3cfc035e611......
  • Diary -「NOI 2022」尘降
      又一次,以这样一种身份来到国赛赛场。起跑线延长出赛场外,我将于此开始又一场已知“无用”的竞技。虚无中我的尘埃盲目漂泊摇晃  时间回到数个月前的省选,\(600......
  • 2022网鼎杯网鼎杯web669wp
    大致思路:1.任意文件读取2.session伪造3.untar目录穿越,任意文件写4.yaml反序列化5.sudidd提权任意文件读取题目代码importosimportreimportyamlimporttime......
  • 谢启鸿高代II(20级)每周一题(部分)解答及想法
    复习期间解了部分题目,未来可能更新完整。引用链接:https://www.cnblogs.com/torsor/p/14447946.html[S03]设\(V=M_n(\mathbb{C})\)是n阶复方阵全体构成的集合.(1)将\(V\)......
  • 2022 百度之星 初赛第一场
    题目都比较简单,OJ和评测机很坑。应该是有若干台评测机,但只有一台是正常速度,最后一题交了34发才过。A洞穴考虑每轮找到当前距离最远的一对点,他们必定都是叶子,任意选其......
  • 2022 HDU多校4
    LinkwithBracketSequenceII(区间DP)Problem有一个长度为\(n\)的括号序列,括号种类有\(m\)种,现在这个括号序列丢失了一些括号,问可能的合法括号序列个数(和)可以匹配......
  • springboot+docker发布项目20220827
    1、springboot打包项目 1)、application-dev.yml     对应配置修改 2)、项目package 生成包    3)、生成包         4)、运行......