默认代码
from flask import Flask
# 创建flask应用对象
# __name__表示当前模块的名字
# flask 以这个模块所在目录为总目录,默认这个目录的static为静态目录,templates为模板目录
app = Flask(__name__)
@app.route("/")
def index():
"""定义的视图函数"""
return "hello flask"
if __name__ == "__main__":
# 启动flask程序
app.run(debug=True)
1、查看所有路由
通过url_map可以查看整个flask的路由信息
print(app.url_map)
2、利用methods
限制访问方式
@app.route("/post_only", methods=["POST"])
def post_only():
return "post only page"
3、同一路由装饰多个视图函数
@app.route("hello")
def hello():
return "hello1"
@app.route("hello")
def hello2():
return "hello2"
此时依旧显示hello1
。因为同一路由可能以不同的method
访问。
4、同一视图多个路由装饰器
@app.route("hi1")
@app.route("hi2")
def hi():
return "hi!"
此时两个路径都可以访问过去。
5、重定向 与 url_for
反解析
from flask import Flask,redirect
······
@app.route("/login")
def login():
# url="/"
url=url_for("index")
return redirect(url)
6、动态路由
路由传递的参数默认当做string处理,这里指定int,尖括号
中冒号后面
的内容是动态的。
@app.route('/user/<int:id>')
def userinfo(id):
return 'the ID is %d'%id
不加尖括号,是默认的字符串规则
7、自定义转换器
from flask import Flask
from werkzeug.routing import BaseConverter
# 定义自己的转换器
class Regex_url(BaseConverter):
def __init__(self,url_map,*args):
# 调用父类的初始化方法
super(Regex_url,self).__init__(url_map)
# 将正则表达式的参数保存在对象的属性中,flask会使用这个属性来进行路由的正则匹配
self.regex=args[0]
# 自己可设置最终返回值
def to_python(self,value):
return value
# 设置url_for的返回值
def to_url(self,value)
return value
app=Flask(__name__)
# 将自定义的转换器添加到flask应用中
app.url_map.converters['re']=Regex_url
@app.route('/user/<re("[a-z]{3}"):ID>')
def zhq_demo(id):
return 'the ID is %d'%d