Python Flask框架路由简单实现
Python Flask框架路由的简单实现
也许你听说过Flask框架。也许你也使用过,也使用的非常好。但是当你在浏览器上输入一串路由地址,跳转至你所写的页面,在Flask中是怎样实现的,你是否感到好奇? 如果你不清楚,那就往下看看吧 ~
Flask demo代码
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return '<a href="/home">Hello World!</a>'
@app.route("/home")
def home():
return "这个是主页"
@app.route("/login")
def login():
return "这个是登录" if __name__ == '__main__':
app.run(debug=True)
当你在浏览器地址上输入路径,进入不同视图函数。
1.输入路径为:"/"

2.输入路径为:"/home"

3.输入路径为:"/login"

是不是很神奇~ 接下来让我们看看他是如何实现的吧!
Flask原理
- 当启动 app.run()后, @app.route()装饰器会将 路径信息、函数信息 传入 self.add_url_rule(rule, endpoint, f, **options)

- self.add_url_rule(rule,endpoint, f,**potions) 接收到路径信息、函数信息封装打包放进全局的 self.url_map.add(rule)


- 这个时候的全局的self.url_map里面的信息为

- 当请求url进来会到 self.url_map匹配然后执行相应的方法函数,返回相应的方法结果。知道是这样的流程 我们就可以得到下面的结果
简单实现(废话不多说,直接上码!)
"""
Flask 路由简单实现
map: {"/home":"home", "/login":"login", ...}
"""
map = dict()
def route(path):
def decorator(f):
print(path, f.__name__, "<-----------start---------->")
map[path] = f.__name__
return f
return decorator
class TestFlaskRoute:
def __init__(self, path):
self.path = path
def find_url(self):
try:
getattr(TestFlaskRoute, map.get(self.path)).__call__(self)
except:
print("\033[031m 没有这个路径! \033[0m ")
@route("/login")
def login(self, *args, **kwargs):
print("\033[036m 这个是登录! \033[0m")
pass
@route("/home")
def home(self, *args, **kwargs):
print("\033[036m 这个是主页! \033[0m")
pass
@route("/")
def index(self, *args, **kwargs):
print("\033[036m Hello World! \033[0m")
pass
@route("/call")
def phone(self, *args, **kwargs):
print("\033[036m 这个是", self.path, "! \033[0m")
pass
if __name__ == '__main__':
while True:
url = input("请输入URL路径:")
app = TestFlaskRoute(url)
app.find_url()
在这里我们用模拟浏览器输入方式来完成,当我们输入"/",它会去找对应路径下 index() 执行 ; 输入"/home",它会去找对应路径下 home() 执行;输入"/login", 它会去找对应路径下 login() 执行,怎样是不是很神奇,是不是很像Flask。其实Flask就是这样的思路实现的。
效果:

解析实现(3步)
a.当程序启动时, 先执行了route()这个装饰器,拿到了所有路径、对应函数并将它们存在map这个字典中,以路径为key, 对应函数名为value。(注:在Flask是用全局 self.url_map 来存这些路由方法信息的哦,我们这里简单实现用的是字典,所以还是有些区别的~)
b.当你输入路径或者在浏览器上输入路径,会以key的形式到map字典中匹配,取出value(函数名)。
c. 得到value通过getattr()得到函数地址, 然后用内置__call__()方法,执行这个函数
结束语
明白了Flask路由实现原理了吗,如果有错误的地方欢迎评论下方指出!
Python Flask框架路由简单实现的更多相关文章
- Linux ubantu中安装虚拟/使用环境virtualenv以及python flask框架
今天学习了python flask框架的安装过程以及使用案例,感觉网上讲的东西都没有从我们这种初学者的角度去考虑(哈哈),最后还是奉上心得: 1.安装virtualenv $ sudo apt-get ...
- #3使用html+css+js制作网页 番外篇 使用python flask 框架 (I)
#3使用html+css+js制作网页 番外篇 使用python flask 框架(I 第一部) 0. 本系列教程 1. 准备 a.python b. flask c. flask 环境安装 d. f ...
- python flask框架学习——开启debug模式
学习自:知了课堂Python Flask框架——全栈开发 1.flask的几种debug模式的方法 # 1.app.run 传参debug=true app.run(debug=True) #2 设置 ...
- python flask框架学习(二)——第一个flask程序
第一个flask程序 学习自:知了课堂Python Flask框架——全栈开发 1.用pycharm新建一个flask项目 2.运行程序 from flask import Flask # 创建一个F ...
- python flask框架学习(一)——准备工作和环境配置与安装
Flask装备: 学习自:知了课堂Python Flask框架——全栈开发 1.Python版本:3.6 2.Pycharm软件: 3.安装虚拟环境: (1)安装virtualenv: pip ins ...
- #3使用html+css+js制作网页 番外篇 使用python flask 框架 (II)
#3使用html+css+js制作网页 番外篇 使用python flask 框架 II第二部 0. 本系列教程 1. 登录功能准备 a.python中操控mysql b. 安装数据库 c.安装mys ...
- Python Flask框架
Python有很多Web框架,可谓是百家争鸣,我这里列出几个比较叼的几个框架 Django 市场占有率最高,官方文档几近完美,但是适合比较大的项目,小项目会显得累赘. Tornado ...
- python flask框架详解
Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务.本文参考自Flask官方文档, 英文不好的同学也可以参考中文文档 1.安装flask pi ...
- Python——Flask框架——程序的结构
一.项目结构 |-flasky |-app Flask程序一般都保存在这里 |-templates/ |-static/ |main/ |-__init__.py |-errors.py |-form ...
随机推荐
- Pdf和Office相关归集
Spire 支持Pdf.Office等的诸多操作,使用方便,需收费,免费版本仅支持10页以内的操作,在 这里 可以下载库. 优点 测试过打印效果佳,操作简便. 缺点 PDF打印慢,免费版本仅支持10页 ...
- 二、Jmeter 后置处理器(BeanShell PostProcessor)
1.新建JDBC Request,如下图所示: 重要的参数说明: Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable N ...
- 二进制安装kubernetes(二) kube-apiserver组件安装
根据架构图,我们的apiserver部署在hdss7-21和hdss7-22上: 首先在hdss7-200上申请证书并拷贝到21和22上: 创建证书文件: # cd /opt/certs # vi c ...
- Redis 持久化(Persistence)
作为内存数据库,Redis 依然提供了持久化机制,其主要目的有两个: 安全:保证进程崩溃后数据不会丢失 备份:方便数据迁移与快速恢复 Redis 同时提供两种持久化机制: RDB 快照:数据库在某个时 ...
- css3 & content & attr & data-*
css3 & content & attr & data-* content: attr(data-value); https://github.com/oliviale/CS ...
- how to export svg form web page in js
how to export svg form web page in js https://stackoverflow.com/questions/2483919/how-to-save-svg-ca ...
- React & Desktop App
React & Desktop App https://proton-native.js.org/#/ https://github.com/kusti8/proton-native
- c++ 遍历当前程序的线程
#include <iostream> #include <Windows.h> #include <Psapi.h> #include <TlHelp32. ...
- 千万不要错过VAST,NGK算力的下一个财富机会!
我们把目光投向NGK市场,近来,NGK接连新币,推出了SPC后,又有VAST.在目前市场上债券收益率已经趋近于零的情况下,世界上的大多数央行都在试图让本国货币贬值,所以在此时寻找其他保值资产是合理的. ...
- 知名金融媒体采访行业大咖,多方推动BGV茁壮成长
近来,多家知名金融媒体如纽约金融时报.伦敦金融时报等采访NGK官方代表洛索斯夫,以及美国当地行业大咖马库斯等人. 受访的NGK官方代币洛索斯夫回答道,近期官方将会推出NGK的书籍<NGK公链底层 ...