Flask--路由使用

文章目录

      • 多url的使用
      • 动态路由参数
      • route()参数

多url的使用

  • 1个视图函数可以绑定多个路由关系
@app.route('/index')
@app.route('/')
def index():
    return 'index'

# 打印路由表
print(app.url_map)  

>console
Map([<Rule '/index' (OPTIONS, GET, HEAD) -> index>,
     <Rule '/' (OPTIONS, GET, HEAD) -> index>,
     <Rule '/static/' (OPTIONS, GET, HEAD) -> static>])
  • 装饰器视图函数应该放在最外层,否则里面的装饰器不会生效
@decorater  # 无效
@app.route('/')
@decorater  # 有效
def index():
    # if name:
    #     return name
    return 'no name'
  • 视图函数包裹的装饰器不能return其他值,否则会被包装成返回函数
def decorater(func):
    def wrapper(*args, **kwargs):
        import time
        print(time.time())
        return func(*args, **kwargs)  # 视图函数装饰器仅能返回视图函数功能
    return wrapper
  • /*//*的区别
  • @app.route(’/index/’), 使用/index路径访问时,重定向到/index/,使用/index/正常访问
  • @app.route(’/index’), 使用/index路径访问时,正常访问,使用/index/访问报错404
  • 访问计数
from flask import Flask


app = Flask(__name__)


def count(f):
    app.config['num'] = 0
    def wrapper(*args, **kwargs):
        app.config['num'] += 1
        print(app.config['num'])
        return f(*args, **kwargs)
    return wrapper


@app.route('/')
@count
def index():
    return 'index'


if __name__ == '__main__':
    app.run(debug=True)  

动态路由参数

  • 指定不同的参数来加载不同的数据
@app.route('/house/')
def house_detail(content):
    return '您请求的房源信息是:%s' % content
 
* 参数需要放在两个尖括号中间  <>
* 视图函数中需要放和url中参数同名的参数
  • 支持的参数类型
  • str(默认), 不能包含‘/’
  • int
  • float
  • path,可以包含‘/’
  • uuid
# int 参数
@app.route('/house/')
def house_detail(house_id):
    return '您请求的房源编号是:%d' % house_id

# path 参数
@app.route('/getpath//')
def hello_path(url_path):
    return 'path: %s' % url_path

# uuid 参数
@app.route('/getuuid/')
def get_uuid():
    a = uuid.uuid4()
    return str(a)

route()参数

  • methods:定义请求方法,默认GET
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        do_the_login()
    else:
        show_the_login_form()
  • redirect_to:永久重定向(访问/index时重定向到/hello)
@app.route('/index', redirect_to='hello')
def index():
    return 'index'

@app.route('/hello')
def hello():
    return 'hello'
  • endpoint:暂时没理解

https://www.jianshu.com/p/0611f044efc4

  • defaults:动态参数漏传容错处理
@app.route('/hello/', defaults={
     'id': None})
@app.route('/hello/')
def hello(id):
    return f'hello {id}'
 
@app.route('/hello/')
@app.route('/hello/')
def hello(id=None):
    return f'hello {id}'

你可能感兴趣的:(Flask,flask,python)