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中使用HTMLParser解析HTML的教程
Apr 29 Python
python机器人行走步数问题的解决
Jan 29 Python
Python3用tkinter和PIL实现看图工具
Jun 21 Python
opencv python 基于KNN的手写体识别的实例
Aug 03 Python
numpy中loadtxt 的用法详解
Aug 03 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
py-charm延长试用期限实例
Dec 22 Python
如何基于pythonnet调用halcon脚本
Jan 20 Python
python编写俄罗斯方块
Mar 13 Python
python两个list[]相加的实现方法
Sep 23 Python
linux系统下pip升级报错的解决方法
Jan 31 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
PHP date函数参数详解
2006/11/27 PHP
php代码运行时间查看类代码分享
2011/08/06 PHP
检查php文件中是否含有bom的函数
2012/05/31 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
php实现zip文件解压操作
2015/11/03 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
JS+CSS实现Li列表隔行换色效果的方法
2015/02/16 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
Python读取实时数据流示例
2019/12/02 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
介绍一下XMLHttpRequest对象
2012/02/12 面试题
校园达人秀策划书
2014/01/12 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
导游词之张家界
2019/10/31 职场文书
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python
Python 数据可视化工具 Pyecharts 安装及应用
2022/04/20 Python
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL