Flask 路由的两种方式
路由系统常用方式
@app.route('/user/<username>')
@app.route('/post/<int:post_id>')
@app.route('/post/<float:post_id>')
@app.route('/post/<path:path>')
@app.route('/login', methods=['GET', 'POST'])
常用路由系统有以上五种,所有的路由系统都是基于一下对应关系来处理:
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
示例
from flask import Flask, render_template
app = Flask(__name__)
# 配置文件
# app.config.from_object('settings.DevelopmentConfig')
'''
# 路由方式
1.执行decorator = app.route('/index', methods=['GET', 'POST'])
2.@decorator
- decorator(index)
'''
# 路由方式一(常用)
@app.route('/index', methods=['GET', 'POST'])
def index():
return 'index'
# 路由方式二(不常用)
def order():
return 'order'
app.add_url_rule('/order', view_func=order)
if __name__ == '__main__':
app.run()
Flask 别名与反向生成url
from flask import Flask, url_for
app = Flask(__name__)
'''
https://www.cnblogs.com/wupeiqi/articles/7552008.html
url_for: 反向生成url
endpoint: 起别名
注意只有别名较长的情况下去起别名方便
不起别名默认是函数名字
'''
@app.route('/index', methods=['GET', 'POST'], endpoint='n1')
def index():
v1 = url_for('n1')
v2 = url_for('n2')
v3 = url_for('n3')
print(v1, v2, v3)
return 'index'
@app.route('/login', methods=['GET', 'POST'], endpoint='n2')
def index():
return 'login'
@app.route('/logout', methods=['GET', 'POST'], endpoint='n3')
def index():
return 'logout'
if __name__ == '__main__':
app.run()
转化器
from flask import Flask
app = Flask(__name__)
'''
https://www.cnblogs.com/wupeiqi/articles/7552008.html
默认常用url转换器
'''
@app.route('/index/<int:nid>', methods=['GET', 'POST'])
def index(nid):
print(nid)
return 'index'
if __name__ == '__main__':
app.run()
自定义转换器
from flask import Flask, url_for
from werkzeug.routing import BaseConverter
app = Flask(__name__)
'''
自定义正则匹配
'''
class RegexConverter(BaseConverter):
"""
自定义URL匹配正则表达式
"""
def __init__(self, map, regex):
super(RegexConverter, self).__init__(map)
self.regex = regex
def to_python(self, value):
"""
路由匹配时,匹配成功后传递给视图函数中参数的值
:param value:
:return:
"""
return int(value)
def to_url(self, value):
"""
使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
:param value:
:return:
"""
val = super(RegexConverter, self).to_url(value)
return val
# 添加到自定义转换器添加
app.url_map.converters['xxx'] = RegexConverter
@app.route('/index/<xxx("\d+"):nid>', methods=['GET', 'POST'])
def index(nid):
print(nid, type(nid))
v = url_for('index', nid=nid)
print(v)
return 'index'
if __name__ == '__main__':
app.run()
重定向url
from flask import Flask
app = Flask(__name__)
'''
redirect_to 重定向url
'''
@app.route('/login', methods=['GET', 'POST'], redirect_to='/new')
def login():
return '旧登录'
@app.route('/new', methods=['GET', 'POST'])
def new():
return '新登录'
if __name__ == '__main__':
app.run()
子域名
from flask import Flask
'''
subdomain 子域名
'''
app = Flask(__name__)
app.config['SERVER_NAME'] = 'example.com'
@app.route("/", subdomain="<username>")
def index(username):
print(username)
return 'xxxxxx'
if __name__ == '__main__':
app.run()
flask装饰器的使用
from flask import Flask
from functools import wraps
app = Flask(__name__)
def wapper(func):
@wraps(func)
def inner(*args, **kwargs):
print('before')
return func(*args, **kwargs)
return inner
@app.route('/index', methods=['GET', 'POST'])
@wapper
def index():
return 'index'
@app.route('/order', methods=['GET', 'POST'])
@wapper
def order():
return 'order'
if __name__ == '__main__':
app.run()