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 ...
随机推荐
- 煎蛋网爬虫之JS逆向解析img路径
图片使用js onload事件加载 <p><img src="//img.jandan.net/img/blank.gif" onload="janda ...
- Python模块——Openpyxl(EXCEL)操作
一.安装模块 pip install openpyxl 二.文件的操作 2.1文件创建 from openpyxl import Workbook #创建新的excle文件 wk = Workbook ...
- leetcode347 python
通过维护最小堆排序,使用heapq模块 一般使用规则:创建列表 heap = [] 函 数 ...
- 基于OpenCV全景拼接(Python)SIFT/SURF
一.实验内容: 利用sift算法,实现全景拼接算法,将给定的两幅图片拼接为一幅. 二.实验环境: 主机配置: CPU :intel core i5-7300 2.50GHZ RAM :8.0GB 运行 ...
- LaTex公式在线转图片
Reference https://latex.codecogs.com/gif.latex?THE_FORMULAR 注: 请不要包含空格 或者 将整段url放到浏览器里, 会产生空格等字符的替换, ...
- 关于 TCP 三次握手和四次挥手,满分回答在此
尽人事,听天命.博主东南大学研究生在读,热爱健身和篮球,正在为两年后的秋招准备中,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 C ...
- Tailwind CSS in Action
Tailwind CSS in Action Tailwind CSS是一个高度可定制的低级CSS框架,它为您提供了构建定制设计所需的所有构造块,而无需烦恼要覆盖的烦人的自以为是的样式 https:/ ...
- Linux bash shell All In One
Linux bash shell All In One Linux https://tinylab.gitbooks.io/shellbook/content/zh/chapters/01-chapt ...
- Web 全栈开发 MySQL 面试题
Web 全栈开发 MySQL 面试题 MySQL MySQL 读写分离 读写分离原理 MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先部署主从复制,只有主从复制完了,才能在此基础上进行 ...
- NGK:APP一站式挖矿高收益项目
NGK是10月中旬刚上线的公链项目,采用手机挖矿形式.NGK数字增益平台,200美金即可入场,收益可观,分为静态和动态两种,投资算力收益超高.邀请好友挖矿还有额外的返佣. NGK立志为所有人创造无差别 ...