python框架flask入门之路由及简单实现方法


Posted in Python onJune 07, 2020

路由

简单来说,路由就是一个url到函数的映射,通过路由规则,可以使得url被指定的函数进行处理解析。

我们都知道现在的web系统的URL都是可以自定义的,也就是我们可以指定url和具体的业务控制器相关联,而这些就是通过路由来实现的。

flask中集成了路由处理模块,我们只需要简单地使用route装饰器就可以实现路由匹配。

@app.route('/')
def index():
 return 'Index Page'

@app.route('/hello')
def hello():
 return 'Hello, World'

上面的例子中,我们访问浏览器的时候,比如输入http://127.0.0.1/ 就会返回'index page',当输入http://127.0.0.1/hello 就会返回‘Hello World',这就是路由的基本使用。

@app.route('/user/<username>')
def show_user(username):
 return username

@app.route('/post/<int:post_id>')
def show_post(post_id):
 return 'Post %d' % post_id

@app.route('/path/<path:subpath>')
def show_subpath(subpath):
 # show the subpath after /path/
 return 'Subpath %s' % escape(subpath)

从上面的例子我们可以看出,flask的路由还可以进行参数匹配,比如我们可以通过<>来对参数进行获取,可以获取到文章的id,获取到用户名等参数信息,也就是说,我们可以通过路由匹配来对指定的url进行处理。

关于url中斜线(/)的处理当我们在路由中定义了斜线,那么当我们访问没有斜线的url的时候,它会自动添加斜线当我们在路由中没有定义斜线的时候,那么我们访问有斜线的时候,会提示404

@app.route('/test/')
#当我们访问http://127.0.0.1/test的时候,会重定向到http://127.0.0.1/test/
def test():
  return 'test'

@app.route('slashes')
#当我们访问http://127.0.0.1/slashes/的时候,会提示404,无法匹配到路由
def slashes():
 return 'slashes'

下面看下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.输入路径为:"/"

python框架flask入门之路由及简单实现方法

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

python框架flask入门之路由及简单实现方法

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

python框架flask入门之路由及简单实现方法

是不是很神奇~ 接下来让我们看看他是如何实现的吧!

简单实现(废话不多说,直接上码!)

"""
 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就是这样的思路实现的。

效果:

python框架flask入门之路由及简单实现方法

解析实现(3步)

a.当程序启动时,先执行了route()这个装饰器,拿到了所有路径、对应函数并将它们存在map这个字典中,以路径为key,对应函数名为value。(注:在Flask是以Route类来存这些信息的哦,所以还是有些区别的~)

b.当你输入路径或者在浏览器上输入路径,会以key的形式到map字典中匹配,取出value(函数名)。

c.得到value通过getattr()得到函数地址,然后用内置__call__()方法,执行这个函数

总结

到此这篇关于python框架flask入门之路由及简单实现方法的文章就介绍到这了,更多相关python框架flask 路由内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python Django批量导入不重复数据
Mar 25 Python
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
Python 逐行分割大txt文件的方法
Oct 10 Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 Python
[机器视觉]使用python自动识别验证码详解
May 16 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 Python
使用python matploblib库绘制准确率,损失率折线图
Jun 16 Python
新手常见Python错误及异常解决处理方案
Jun 18 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 Python
用python对excel进行操作(读,写,修改)
Dec 25 Python
python数字类型和占位符详情
Mar 13 Python
python框架flask入门之环境搭建及开启调试
Jun 07 #Python
python实现一次性封装多条sql语句(begin end)
Jun 06 #Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 #Python
解决python 执行sql语句时所传参数含有单引号的问题
Jun 06 #Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 #Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 #Python
在python中使用pyspark读写Hive数据操作
Jun 06 #Python
You might like
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
JAVA/JSP学习系列之六
2006/10/09 PHP
一个PHP操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
python 切片和range()用法说明
2013/03/24 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
Django Form常用功能及代码示例
2020/10/13 Python
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
安全事故检讨书
2014/01/18 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
北大自主招生自荐信
2015/03/04 职场文书
Python list列表删除元素的4种方法
2021/11/01 Python
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS