在flask框架中,我们经常会遇到endpoint这个东西,最开始也没法理解这个到底是做什么的。最近正好在研究Flask的源码,也就顺带了解了一下这个endpoint

1、Flask路由是怎么工作

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

from flask import Flask
app = Flask(__name__)@app.route("/index/")
def index1():return '{"key1":1,"key2":2}'

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

def index3():return '{"key1":1,"key2":2}'
app.add_url_rule("/index/",view_func=index3)

2、add_url_rule的介绍

这个add_url_rule函数在文档中是这样解释的:

 def add_url_rule(self,rule: str,endpoint: t.Optional[str] = None,view_func: t.Optional[t.Callable] = None,provide_automatic_options: t.Optional[bool] = None,**options: t.Any,) 

add_url_rule有如下参数:

rule – the URL rule as string
endpoint – the endpoint for the registered URL rule. Flask itself assumes the name of the view function as endpoint
view_func – the function to call when serving a request to the provided endpoint
options – the options to be forwarded to the underlying Rule object. A change to Werkzeug is handling of method options. methods is a list of methods this rule should be limited to (GET, POST etc.). By default a rule just listens for GET (and implicitly HEAD). Starting with Flask 0.6, OPTIONS is implicitly added and handled by the standard request handling.

抛开options这个参数不谈,我们看看前三个参数。
rule:这个参数很简单,就是匹配的路由地址
view_func:这个参数就是我们写的视图函数
endpoint:这个参数就是我今天重点要讲的,endpoint

很多人认为:假设用户访问http://www.example.com/user/ericflask会找到该函数,并传递name='eric',执行这个函数并返回值。
但是实际中,Flask真的是直接根据路由查询视图函数么?

在Flask的内部,每个核心对象都会维护二张表

url_map: 维护的是url和endpoint的映射关系

view_functions: 维护的是endpoint和function的映射关系

所以我们可以看出:这个url_map存储的是urlendpoint的映射!
回到flask接受用户请求地址并查询函数的问题。实际上,当请求传来一个url的时候,会先通过rule找到endpoint(url_map),然后再根据endpoint再找到对应的view_func(view_functions)。通常,endpoint的名字都和视图函数名一样。
这时候,这个endpoint也就好理解了:

实际上这个endpoint就是一个Identifier,每个视图函数都有一个endpoint, 当有请求来到的时候,用它来知道到底使用哪一个视图函数

在实际应用中,当我们需要二条路由路径显示同一个页面的时候,就可以在定义的方法的下面同时使用二个add_url_rule方法,路由地址分别写为" / " 和"  /home ",endpoint分别显示" index "与" index2 ",最后的view_func同时写成一样的index2就行了,最后二条路地址就可以显示同一个页面,

def index2():return "hello world"
app.add_url_rule("/",endpoint="index",view_func=index2)
app.add_url_rule("/home",endpoint="index2",view_func=index2)

这是在根目录下显示的效果:

这是在/home目录下显示的效果:

endpoint 没有明显的定义的话,就会使用函数名字作为endpoint
endpoint在view_functions表需要全局唯一
endpoint函数名可以重复

Flask的endpoint的理解相关推荐

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

    翻译整理自Stack Overflow:http://stackoverflow.com/questions/19261833/what-is-an-endpoint-in-flask 原文中用到了m ...

  2. flask之Markup()的理解

    Markup方法是对HTML的一种安全标记,并将其转化为str类型 其目的是为了防止XSS攻击 XSS攻击是指利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意 ...

  3. 理解SIGNED endpoint

    endpoint <理解endpoint vs API > signed <理解signature on API Requests> <理解digital signatu ...

  4. Flask入门到实战

    文章目录 1. Flask初识 1. Flask概述 2. wsgi 3. 安装Flask 4. werkzurg 5. 第一个Flask应用 2. 配置文件的使用 1. 配置文件导入原理 2. 配置 ...

  5. 学习Flask主站源码,原来可以这样学!

    flask-website,是flask曾经的主站源码,使用flask制作,包含模版渲染,数据库操作,openID认证, 全文检索等功能.对于学习如何使用flask制作一个完备的web站点,很有参考价 ...

  6. flask部署(大体了解)

    框架学习目标: 如何编写视图 如何处理请求 如何构造响应 falsk简介 flask用Python语言基于Werkzeug工具箱编写的轻量极Web开发框架. flask本身相当于一个内核,其他几乎 所 ...

  7. 从HTTP请求-响应循环探索Flask的基本工作方式

    本文基于 <Flask Web开发实战>第2章<Flask与HTTP>删减改写而来,作为该书的样章分享. HTTP(Hypertext Transfer Protocol,超文 ...

  8. Flask框架学习整理——从零开始入门Flask

    文章目录 Flask框架 一. 简介 二. 概要 三. 知识点(附代码) 1. Flask基础入门 1)路由route的创建: 2)endpoint的作用 3)request对象的使用 4)请求钩子b ...

  9. web框架总结(django、flask)

    1.MVC解读 M:Model,模型,和数据库进行交互 V:View,视图,负责产生Html页面 C:Controller,控制器,接收请求,进行处理,与M和V进行交互,返回应答. 1.用户点击注 2 ...

最新文章

  1. 未安装在此服务器场中,无法添加到该范围
  2. Tomcat相关面试题,看这篇就够了!保证能让面试官颤抖!
  3. mysql varchar 1024_mysql中的数据类型
  4. 关于使用 git 命令行来和“码云”账号上的项目互通过程的基础步骤
  5. FZU 1914 Funny Positive Sequence
  6. 集合(collection)
  7. 矢量归一化_关于LRL矢量的一点分析
  8. oracle 11g 数据库恢复技术 --rman catalog
  9. spark dataframe学习记录
  10. 深入了解clientXY,offsetXY,pageXY的区别
  11. linux 下svn安装
  12. 炫酷文字消失动画网站404页面源码
  13. 优动漫PAINT小技巧——描边功能的使用
  14. 个人虚拟化集群搭建教程
  15. 矩阵微分与向量函数Taylor展开
  16. 计算机素质教育论文800,关于素质教育的作文800字
  17. Go语言小程序开发快速入门——一、用Gin框架实现简单的信息获取
  18. 分享2022武体考研一战上岸学习心得
  19. 美团招聘视觉算法实习生
  20. leetcode 字母异位词分组(js实现)

热门文章

  1. 《虚拟聊天室(模仿QQ)》实验报告
  2. 前端方案(时间/图片/PWA/微信公众号/图片前端压缩/动画与过渡/新兴方案/屏幕适配)
  3. 【管理研习社】给CEO们推荐一些书
  4. SIP 协议消息应答代码解释详录
  5. 抓取在线书店信息:从在线书店获取图书信息及价格
  6. 智慧物流之RFID仓库管理系统解决方案-新导智能
  7. 【虚幻引擎】UE4 Windows下打包Linux版本的包
  8. Word2016文档“比较”功能介绍及其Bug处理(Bug能让人睡不着觉)
  9. uni.downloadFile的400状态码
  10. numpy中的max和maximum