Python的Flask路由实现实例代码

 更新时间:2023年08月09日 10:24:34   作者:zyanwei2018  
这篇文章主要介绍了Python的Flask路由实现实例代码,在启动程序时,python解释器会从上到下对代码进行解释,当遇到装饰器时,会执行,并把函数对应的路由以字典的形式进行存储,当请求到来时,即可根据路由查找对应要执行的函数方法,需要的朋友可以参考下

路由简介

  • 路由定义

处理url和函数之间绑定关系的程序

  • 路由作用

路由控制访问的路径 ,路径能访问到什么是由后端来控制的

路由实现

装饰器添加路由表实现路由

  • 采用装饰器添加路由功能在程序运行时,自动添加路由表
  • Flask即采用这种模式

函数装饰器方式添加路由映射表

# 路由映射表
path_map = {}
def route(url, **kwargs):
    def decorator(f):
        path_map[url] = f
        return f
    return decorator
@route('/')
def hello():
    return 'hello'
@route('/index')
def index():
    return 'index'
print(path_map)
>{'/': <function hello at 0x7fa103cfee50>, '/index': <function index at 0x7fa103cfedc0>}

类装饰器方式添加路由映射表

# 路由装饰器
class WsgiApp(object):
    def __init__(self):
        # 定义路由表
        self.routes = {}
    def route(self, path=None):
        def decorator(func):
            self.routes[path] = func
            return func
        return decorator
    def __call__(self, environ, start_response):
        path = environ.get('PATH_INFO')
        if path is None or path not in self.routes.keys():
            status = "400 Not Found"
            header = [('Content-Type', 'text/plain; charset=utf-8')]
            start_response(status, header)
            return [b'Page Not Found']
        else:
            status = "200 OK"
            header = [('Content-Type', 'text/plain; charset=utf-8')]
            start_response(status, header)
            resp = self.routes.get(path)
            if resp is None:
                status = "400 Not Found"
                header = [('Content-Type', 'text/plain; charset=utf-8')]
                start_response(status, header)
                return [b'Page Not Found']
            else:
                return [resp().encode()]
app = WsgiApp()
# 视图函数
@app.route('/')
def hello():
    return 'hello'
@app.route('/login')
def login():
    return 'login'
@app.route('/change')
def change():
    return 'update pwd'
if __name__ == '__main__':
    # 启动服务
    from wsgiref.simple_server import make_server
    server = make_server('127.0.0.1', 8888, app)
    server.serve_forever()

集中管理路由表实现路由

手动添加路由映射表来 集中管理 路由。

  • Django等大型项目一般采用这种方式。
  • 使用时自己去添加路由映射表和对应的视图函数
from wsgiref.simple_server import make_server
def hello():
    return 'hello'
def login():
    return 'login'
def change():
    return 'update pwd'
# 路由表
path_dict = {'/': hello,
             '/login': login,
             '/change': change
             }
def app(environ, start_response):
    path = environ.get('PATH_INFO')
    if path is None or path not in path_dict.keys():
        status = "400 Not Found"
        header = [('Content-Type', 'text/plain; charset=utf-8')]
        start_response(status, header)
        return [b'Page Not Found']
    else:
        status = "200 OK"
        header = [('Content-Type', 'text/plain; charset=utf-8')]
        start_response(status, header)
        resp = path_dict.get(path)
        if resp is None:
            status = "400 Not Found"
            header = [('Content-Type', 'text/plain; charset=utf-8')]
            start_response(status, header)
            return [b'Page Not Found']
        else:
            return [resp().encode()]
if __name__ == '__main__':
    server = make_server('127.0.0.1', 8888, app)
    server.serve_forever()

flask路由实现

在启动程序时,python解释器会从上到下对代码进行解释,当遇到装饰器时,会执行,并把函数对应的路由以字典的形式进行存储,当请求到来时,即可根据路由查找对应要执行的函数方法
url_map = {
    # '/index': index
}
def route(option):
    def inner(func,*args, **kwargs):
        # return func(*args, **kwargs)
        url_map[option['path']] = func
    return inner
@route({'path': '/index'})
def index(request):
    pass
  •  这里的url_map作为存储维护路由函数对应关系的映射空间
  • 当python解释器从上到下解释到@route这一行时,会自动执行route({‘path’: ‘/index’}),将inner作为返回值,此时@route({‘path’: ‘/index’})等同于@inner并装饰index函数
  • 继续执行index=inner(index),url_map即存储’/index’路由对应的index函数

到此这篇关于Python的Flask路由实现实例代码的文章就介绍到这了,更多相关Flask路由实现内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python+OpenCV 实现图片无损旋转90°且无黑边

    Python+OpenCV 实现图片无损旋转90°且无黑边

    今天小编就为大家分享一篇Python+OpenCV 实现图片无损旋转90°且无黑边,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python 用struct模块解决黏包问题

    python 用struct模块解决黏包问题

    这篇文章主要介绍了python 用struct模块解决黏包问题,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • Python实现多并发访问网站功能示例

    Python实现多并发访问网站功能示例

    这篇文章主要介绍了Python实现多并发访问网站功能,结合具体实例形式分析了Python线程结合URL模块并发访问网站的相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • 如何基于Python和Flask编写Prometheus监控

    如何基于Python和Flask编写Prometheus监控

    这篇文章主要介绍了如何基于Python和Flask编写Prometheus监控,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Python devel安装失败问题解决方案

    Python devel安装失败问题解决方案

    这篇文章主要介绍了Python devel安装失败问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • django项目中新增app的2种实现方法

    django项目中新增app的2种实现方法

    这篇文章主要介绍了django项目中新增app的2种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python二进制转化为十进制数学算法详解

    Python二进制转化为十进制数学算法详解

    这篇文章主要介绍了Python二进制转化为十进制数学算法,同时在这里也给大家分享一个好用的内置函数map(),需要的朋友可以参考下
    2023-01-01
  • python  Matplotlib绘图直线,折线,曲线

    python  Matplotlib绘图直线,折线,曲线

    这篇文章主要介绍了python  Matplotlib绘图直线,折线,曲线,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 跟老齐学Python之用while来循环

    跟老齐学Python之用while来循环

    while,翻译成中文是“当...的时候”,这个单词在英语中,常常用来做为时间状语,while ... someone do somthing,这种类型的说法是有的。
    2014-10-10
  • 使用Python AIML搭建聊天机器人的方法示例

    使用Python AIML搭建聊天机器人的方法示例

    这篇文章主要介绍了使用Python AIML搭建聊天机器人的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07

最新评论