路由
使用装饰器修饰的视图函数,就是controller控制器,内部需要尽量简洁,复杂逻辑可以封装到其他模块进行引用。
定义路由
@app.route
这种方法是首选
@app.route(‘/‘)
def index():
return ‘
hello world
‘app.add_url_rule
app.add_url_rule(‘路径如/‘,’func_name即视图函数名称’,endpoint默认会是视图函数的名称)
实际上@app是封装了这个方法的装饰器。
如果基于类的视图,即即插视图时,需要用到他。
路由动态参数
即路由内部的<>内部的部分,可以是普通的参数名,也可以是类型加参数名,例如/user/
string | (缺省值) 接受任何不包含斜杠的文本 |
---|---|
int | 接受正整数 |
float | 接受正浮点数 |
path | 类似 string ,但可以包含斜杠 |
uuid | 接受 UUID 字符串 |
例如是一个动态的url,通过传参向数据库请求获取相应的数据,那么可以通过使用path
的数据类型来做多级url,因为该数据类型允许多个/
符号,而默认的是string
类型,不包括/
@app.route("/api_v1/<path:subpath>")
def api_v1(subpath):
# print(subpath)
import pandas as pd
from sqlalchemy import create_engine
conn = create_engine("mysql://username:passwd@host/db",encoding='utf8', echo=True)
print(pd.read_sql("select '{}'".format(subpath),conn))
return "<html><h1>{}</h1></html>".format(subpath)
查看所有路由信息
flask route
命令行flask route
有Endpoint、Methods和Rule
static是默认的
app.url_map
代码内查看,可以print(app.url_map),是一个Flask封装的Map对象
遍历所有的路径和视图函数:
for i in app.url_map.iter_rules():
print(“path={},view_func={}”.format(i.endpoint,i.rule)
视图函数
return
return要么是返回一个字符串打印到网页页面上,要么是模板响应。