python:一看就会,一写就废的 Flask 框架(二)消息路由及重定向
常用的两种写法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_ro
路由
常用的两种写法
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
注意:对于永久重定向,如果你的浏览器设置保存缓存数据,在你访问过一次后,如你想对该网址重新重定向,则需要清除浏览器缓存
更多推荐
所有评论(0)