路由

常用的两种写法

1、@app.route(’’)

2、app.add_url_route( rule, endpoint=None, view_func=None, provide_automatic_options=None,**options)

通过查看源码发现@app.route()实现也是 app.add_url_route()

@app.route(’’)源码
在这里插入图片描述
下面就以 app.add_url_route() 为例参数说明

1、rule:路由分发的请求路径

  • ① 静态参数路由:/index /base 等
  • ② 动态参数路由: /index/ 在路由中使用了<变量名>的路由称为动态路由

2、methods 请求方法,常用方法 methods=[‘get’,‘post’],请求方式不区分大小写,不设置默认为GET

3、endpoint=’’:给路由起个别名

  • endpoint不指定默认为视图函数名(view_func.name
  • 设置endpoint,在使用 url_for() 获取路由路径时需要传入设定的值,未设置endpoint,使用 url_for() 则为函数名

4、defaults={key:value}

默认参数设置,必须在视图函数中定义一个形参来接收

5、strict_slashes=True/False

设置路由路径匹配是否为严格模式,默认为严格路由匹配模式

如果你访问 http://127.0.0.1:5000/index

若不设置 strict_slashes,则默认strict_slashes=True , 访问 http://127.0.0.1:5000/index/,会报404错误

若设置 strict_slashes=False, 可以正常访问 http://127.0.0.1:5000/index/

6、view_func:函数名

指定该路由调用的函数

路由分类

路由可以分为静态路由和动态路由两种

静态路由

url 和 url处理方法一一对应

如:

@app.route('/login', methods=['POST', 'GET'])

@app.route('/index/hello', methods=[ 'GET', 'POST',)

app.add_url_rule(rule='/index/shouye', methods=['get'], endpoint='index_get', defaults={'id': 123},view_func=index)

动态路由

url是动态的,不确定的,多个 url 对应一个 处理方法

如:

@app.route('/success/<name>/<address>/<int:age>')
app.add_url_rule(rule='/success/<name>/<address>/<int:age>', view_func=success)

以上动态路由支持多个 url ,如下等

http://localhost:5000/success/admid/xian/18

http://localhost:5000/success/oppo/shanghai/19

http://localhost:5000/success/vivo/beijing/20

注意:动态路由 url 默认为字符串,非字符串需注明类型,例如上面的 <int:age>

url 构建

示例如下

from flask import Flask, url_for

app = Flask(__name__)

def index(id):
    print(url_for(endpoint='index_get', _external=True, oppo='wb',vivo='bb'))
    return "你好%d"%id

app.add_url_rule(rule='/index', methods=['get'], endpoint='index_get', defaults={'id': 123},view_func=index)

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

使用 url_for() 构建 url 得到 url = http://127.0.0.1:5000/index?oppo=wb&vivo=bb

在这里插入图片描述
在这里插入图片描述

注意:app.add_url_rule() 一定要放在 app.run(debug=True) 语句之前执行,否则会报 404

重定向

重定向分为永久性重定向和暂时性重定向

永久性重定向

永久性重定向多用于旧网址被废弃要转到一个新的网址进行访问

暂时性重定向

多用于暂时性跳转,例如当网站的登录权限过期,当你刷新页面访问时会重定向到登陆页面

有以下两种写法

1、def redirect(location, code=302, Response=None):

	location 参数是应该重定向响应的URL
	
	statuscode 发送到浏览器标头,默认为302
	
	response 参数用于实例化响应

2、url_add_rule(redirect_to=’’)

下面以永久重定向为例

from flask import Flask, url_for, redirect

app = Flask(__name__)
@app.route('/my_redirect')
def my_redirect():
    return '重定向页面'

app.add_url_rule(rule='/abc', methods=['get'], endpoint='redirect_get', strict_slashes=False,
                 redirect_to='/my_redirect')

@app.route('/oppo')
def oppo():
    return redirect(url_for('my_redirect'))

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

访问 http://127.0.0.1:5000/abc 和 http://127.0.0.1:5000/oppo 都会重定向到 http://127.0.0.1:5000/my_redirect
在这里插入图片描述
注意:对于永久重定向,如果你的浏览器设置保存缓存数据,在你访问过一次后,如你想对该网址重新重定向,则需要清除浏览器缓存

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐