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)
上一篇: (╥╯^╰╥) 一元三次方程求解
下一篇: 一元三次方程的实数根