路由(route)
什么是路由
- 客户端将请求发送给web服务器,web服务器再将请求发送给flask程序实例,程序实例需要知道每个url请求要运行哪些代码,所以需要建立一个 url 到 python函数的映射,处理url和函数之间的关系的程序就是路由。
- 在Flask中,路由是通过
@app.route
装饰器来表示的。
路由的体现
路由的基本表示
# app可以自定义
@app.route('/')
def index():
reutrn "xxx"
@app.route('/login')
def login():
return 'xxx'
带参数的路由
- 基本带参路由
@app.route('/show/<name>')
def show(name):
# 在函数中 name 表示的就是地址栏上传递过来的数据
return 'xxx'
- 带多个参数的路由
@app.route('/show/<name1>/<name2>')
def show2(name1,name2):
reutrn 'xxx'
- 指定参数类型的路由
# <int:age>:表示age参数时一个整型的数值而并非默认的字符串
# Flask 中所支持的类型转换器
@app.route('/show/<name>/<int:age>')
def show(name,age):
return 'xxx'
- Flask中所支持的类型转换器
# 类型转换器 作用
# 缺省 字符串型,但不能有/(斜杠)
# int: 整型
# float: 浮点型
# path: 字符串型,可以有 / (斜杠)
- 示例程序
from flask import Flask
app = Flask(__name__)
@app.route('/show1/<name>')
def show(name):
return "<h1>姓名为:%s</h1>" % name
@app.route('/show2/<name>/<age>')
def show1(name,age):
return "<h1>姓名为:%s,年龄是:%s </h1>" % (name,age)
@app.route('/show3/<name>/<int:age>')
def show2(name,age):
return "<h1>指定类型->姓名为:%s,年龄是:%d </h1>" % (name,age)
if __name__ == "__main__":
app.run(debug = True)
多URL的路由匹配
允许在一个视图处理函数中设置多个url路由规则
@app.route('/')
@app.route('/index')
def index():
reutrn "xxx"
- 示例程序
from flask import Flask
app = Flask(__name__)
@app.route('/')
@app.route('/index')
@app.route('/<int:page>')
# 缺省参数默认值设置为 None
def index(page = None):
if page is None:
page = 1
return 'The page is %d' % page
if __name__ == "__main__":
app.run(debug = True)
路由中设置HTTP请求方法
Flask路由规则也允许设置对应的请求方法,只有将匹配上请求方法的路径交给视图处理函数去执行
# @app.route('/post',methods=['GET'])
# 只有post请求方式允许访问 localhost:5000/post
@app.route('/post',methods=['POST'])
def post():
return 'xxxx'
URL的反向解析
- 正向解析
程序自动解析,根据@app.route()
中的访问路径来匹配处理函数 - 反向解析
通过视图处理函数的名称自动生成视图处理函数的访问路径
# 此函数,用于反向解析 url
# 第一个参数:指向函数名(通过@app.route()修饰的函数)
# 后续的参数:对应要构建的url上的变量
url_for()
# 静态文件反向解析
url_for('static',filename='style.css')
- 示例
@app.route('/')
def index():
return "Index"
url_for('index') # 结果为:/
@app.route('/show/<name>')
def show(name):
reutrn "name:%s" % name
url_for('show',name='zsf') # 结果为:/show/zsf
网友评论