web框架-flask方式添加路由


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

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

1. 装饰器工厂示例:

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

2. 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)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值