Flask的endpoint的理解
在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/eric
,flask
会找到该函数,并传递name='eric'
,执行这个函数并返回值。
但是实际中,Flask
真的是直接根据路由查询视图函数么?
在Flask的内部,每个核心对象都会维护二张表
url_map: 维护的是url和endpoint的映射关系
view_functions: 维护的是endpoint和function的映射关系
所以我们可以看出:这个url_map
存储的是url
与endpoint
的映射!
回到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的理解相关推荐
- Flask中'endpoint'(端点)的理解
翻译整理自Stack Overflow:http://stackoverflow.com/questions/19261833/what-is-an-endpoint-in-flask 原文中用到了m ...
- flask之Markup()的理解
Markup方法是对HTML的一种安全标记,并将其转化为str类型 其目的是为了防止XSS攻击 XSS攻击是指利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意 ...
- 理解SIGNED endpoint
endpoint <理解endpoint vs API > signed <理解signature on API Requests> <理解digital signatu ...
- Flask入门到实战
文章目录 1. Flask初识 1. Flask概述 2. wsgi 3. 安装Flask 4. werkzurg 5. 第一个Flask应用 2. 配置文件的使用 1. 配置文件导入原理 2. 配置 ...
- 学习Flask主站源码,原来可以这样学!
flask-website,是flask曾经的主站源码,使用flask制作,包含模版渲染,数据库操作,openID认证, 全文检索等功能.对于学习如何使用flask制作一个完备的web站点,很有参考价 ...
- flask部署(大体了解)
框架学习目标: 如何编写视图 如何处理请求 如何构造响应 falsk简介 flask用Python语言基于Werkzeug工具箱编写的轻量极Web开发框架. flask本身相当于一个内核,其他几乎 所 ...
- 从HTTP请求-响应循环探索Flask的基本工作方式
本文基于 <Flask Web开发实战>第2章<Flask与HTTP>删减改写而来,作为该书的样章分享. HTTP(Hypertext Transfer Protocol,超文 ...
- Flask框架学习整理——从零开始入门Flask
文章目录 Flask框架 一. 简介 二. 概要 三. 知识点(附代码) 1. Flask基础入门 1)路由route的创建: 2)endpoint的作用 3)request对象的使用 4)请求钩子b ...
- web框架总结(django、flask)
1.MVC解读 M:Model,模型,和数据库进行交互 V:View,视图,负责产生Html页面 C:Controller,控制器,接收请求,进行处理,与M和V进行交互,返回应答. 1.用户点击注 2 ...
最新文章
- 未安装在此服务器场中,无法添加到该范围
- Tomcat相关面试题,看这篇就够了!保证能让面试官颤抖!
- mysql varchar 1024_mysql中的数据类型
- 关于使用 git 命令行来和“码云”账号上的项目互通过程的基础步骤
- FZU 1914 Funny Positive Sequence
- 集合(collection)
- 矢量归一化_关于LRL矢量的一点分析
- oracle 11g 数据库恢复技术 --rman catalog
- spark dataframe学习记录
- 深入了解clientXY,offsetXY,pageXY的区别
- linux 下svn安装
- 炫酷文字消失动画网站404页面源码
- 优动漫PAINT小技巧——描边功能的使用
- 个人虚拟化集群搭建教程
- 矩阵微分与向量函数Taylor展开
- 计算机素质教育论文800,关于素质教育的作文800字
- Go语言小程序开发快速入门——一、用Gin框架实现简单的信息获取
- 分享2022武体考研一战上岸学习心得
- 美团招聘视觉算法实习生
- leetcode 字母异位词分组(js实现)
热门文章
- 《虚拟聊天室(模仿QQ)》实验报告
- 前端方案(时间/图片/PWA/微信公众号/图片前端压缩/动画与过渡/新兴方案/屏幕适配)
- 【管理研习社】给CEO们推荐一些书
- SIP 协议消息应答代码解释详录
- 抓取在线书店信息:从在线书店获取图书信息及价格
- 智慧物流之RFID仓库管理系统解决方案-新导智能
- 【虚幻引擎】UE4 Windows下打包Linux版本的包
- Word2016文档“比较”功能介绍及其Bug处理(Bug能让人睡不着觉)
- uni.downloadFile的400状态码
- numpy中的max和maximum