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路由实现内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PyQt5主窗口动态加载Widget实例代码

    PyQt5主窗口动态加载Widget实例代码

    这篇文章主要介绍了PyQt5主窗口动态加载Widget实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Python实现一键下载并整合统计年鉴Excel文件

    Python实现一键下载并整合统计年鉴Excel文件

    这篇文章主要为大家详细介绍了如何使用Python实现一键下载并整合统计年鉴Excel文件,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-04-04
  • Django集成Redis数据库的操作指南

    Django集成Redis数据库的操作指南

    本文将详细介绍如何在 Django 项目中集成 Redis 数据库,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • python矩阵基本运算的实现

    python矩阵基本运算的实现

    本文主要介绍了python 矩阵的基本运算,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Python检测网站链接是否已存在

    Python检测网站链接是否已存在

    Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。通过本文给大家介绍Python检测网站链接是否已存在的相关内容,需要的朋友一起学习吧
    2016-04-04
  • Python数据分析库PyGWalker的强大交互式功能界面探索

    Python数据分析库PyGWalker的强大交互式功能界面探索

    这篇文章主要介绍了Python数据分析库PyGWalker的强大交互式功能界面探索有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python蛇形方阵的实现

    Python蛇形方阵的实现

    本文主要介绍了Python蛇形方阵的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • python实现换位加密算法的示例

    python实现换位加密算法的示例

    今天小编就为大家分享一篇python实现换位加密算法的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python中关于面向对象私有属性方法的详细讲解

    Python中关于面向对象私有属性方法的详细讲解

    在实际开发中,对象的某些属性或方法可能只希望在对象的内部被使用,而不希望在外部被访问到,私有属性就是对象不希望公开的属性,私有方法就是对象不希望公开的方法
    2021-10-10
  • python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)

    python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)

    这篇文章主要介绍了python3模拟百度登录并实现百度贴吧签到示例,需要的朋友可以参考下
    2014-02-02

最新评论