欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

web框架-flask方式添加路由

程序员文章站 2022-05-09 13:33:19
...

和Django框架添加的方式不一样,flask框架用到了装饰器添加。
其好处是不用再把每一个路径以及函数手动添加到列表中,而是利用装饰器,在创建函数的时候,就把函数以及对应的路径添加到我们的路由列表中

1 只需要定义一个空的列表
2 定义一个装饰器工厂函数
装饰器工厂函数的作用就是给装饰器提供一个环境变量(参数),把参数设置为路径,然后装饰器获得函数的引用名,就可以添加到我们的路由列表中了

示例:

    g_route_list = []

    # 装饰器工厂函数
    def route(url):
        # 装饰器函数
        def warpper(func):
            # 使用装饰器工厂提供的环境变量 path
            # 使用装饰器函数提供的环境便利 func
            # 使用path func将路由信息添加到路由列表中
            # 这里要注意,每个路由都是一个个的元祖
            g_route_list.append((url, func))

            def inner(*args, **kwargs):
                return func(*args, **kwargs)
            return inner
        return warpper

web框架——flask实现的路由:

import time
import re

# 指定模板文件资源 所在的根目录
TEMPLATE_ROOT = "./template"

# 在路由列表中 每一条叫做路由  (路径,路径对应的执行的函数)
# 路由列表  [(),(),()]   这种路由的添加方式是django使用的
g_route_list = []

# 装饰器工厂函数
def route(url):
    # 装饰器函数
    def warpper(func):
        # 使用装饰器工厂提供的环境变量 path
        # 使用装饰器函数提供的环境便利 func
        # 使用path func将路由信息添加到路由列表中
        g_route_list.append((url, func))

        def inner(*args, **kwargs):
            return func(*args, **kwargs)
        return inner
    return warpper


# 使用装饰器工厂添加路由的方式 是flask使用的
@route('/gettime.py')
def gettime(path_info):
    """当用户请求/gettime.py的时候执行该函数代码"""
    return time.ctime()

@route('/center.py')
def center(path_info):
    """当用户请求/index.py的时候执行该函数代码"""
    # 读取模板文件
    # /index.py ----》 /index.html
    path_info = path_info.replace(".py", ".html")

    with open(TEMPLATE_ROOT + path_info) as file:
        html = file.read()

    # 将模板文件的数据进行 替换 --正则替换 {%content%}
    data_from_mysql = "这是从数据库中查询出来的相关信息"
    html = re.sub(r"\{%content%\}",data_from_mysql,html)

    return html

@route('/update.py')
def update(path_info):
    """当用户请求/index.py的时候执行该函数代码"""
    # 读取模板文件
    # /index.py ----》 /index.html
    path_info = path_info.replace(".py", ".html")

    with open(TEMPLATE_ROOT + path_info) as file:
        html = file.read()

    # 将模板文件的数据进行 替换 --正则替换 {%content%}
    data_from_mysql = "这是从数据库中查询出来的相关信息"
    html = re.sub(r"\{%content%\}",data_from_mysql,html)

    return html

@route('/index.py')
def index(path_info):
    """当用户请求/index.py的时候执行该函数代码"""
    # 读取模板文件
    # /index.py ----》 /index.html
    path_info = path_info.replace(".py", ".html")

    with open(TEMPLATE_ROOT + path_info) as file:
        html = file.read()

    # 将模板文件的数据进行 替换 --正则替换 {%content%}
    data_from_mysql = "这是从数据库中查询出来的相关信息"
    html = re.sub(r"\{%content%\}",data_from_mysql,html)

    return html


def app(environ, start_response):

    # 获取到用户请求路径
    path_info = environ['PATH_INFO']
    print("%s request %s" % (time.ctime(), path_info))
    # 打印路由列表信息
    print(g_route_list)

    for url,func in g_route_list:
        if path_info == url:
            start_response('200 OK', [('Content-Type', 'text/html'),
                                           ("Server", "PythonWebServer")])
            return func(path_info)

    else:
        # app函数的返回值就是响应体
        start_response('404 Not Found', [('Content-Type', 'text/html'),
                                  ("Server", "PythonWebServer")])
        return 'Hello World!!!!!' + str(environ)
相关标签: web框架 falsk