开头必须分享一个我的志玲姐姐,太可了!点击此处
flask视图函数与路由的关系
- 一、视图函数与路由 实战重点
- 1.1 一个视图函数可以绑定多个URL地址
- 1.2 视图装饰器应该放到最外层
- 1.3所实现的装饰器要返回视图函数的返回值
- 二、动态路由
- 1. 用url匹配
- 2. 通过传参
- 三、路由重定向
- 四、路由注册机制
- 4.1 集中注册机制
- 4.2 装饰器注册
- 五、app.route()可配置的参数
- 六、视图函数的分离(非常重要)
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)
一、视图函数与路由 实战重点
1.1 一个视图函数可以绑定多个URL地址
1.2 视图装饰器应该放到最外层
引入装饰器,装饰器要放到@app.route()里面
1.3所实现的装饰器要返回视图函数的返回值
比如说我这里直接返回“hello”,此时“hello”就会返回到前端去,就意味着视图函数的返回值就没有用了
运行结果:
装饰器正确返回视图函数的返回值:
运行结果:
二、动态路由
1. 用url匹配
将id动态地放到url里面 就可以查到id对应的case 例如http://127.0.0.1:5000/test/hello
from flask import Flask# 编写了一个测试用例名称,我们测试返回的结果就是测试用例的名称app = Flask(__name__)#定义路由 <尖括号里面的可以改变> 将id动态地放到url里面 就可以查到id对应的case 例如http://127.0.0.1:5000/test/hello
@app.route('/test/<id>')
def get_case(id):return f'{id}' #字符串格式化if __name__ == '__main__':app.run(debug=True)
运行结果
2. 通过传参
from flask import Flask, request# 编写了一个测试用例名称,我们测试返回的结果就是测试用例的名称app = Flask(__name__)#定义路由
@app.route('/test')
def get_case():id = request.args.get("id")return f'{id}' #字符串格式化if __name__ == '__main__':app.run(debug=True)
运行结果
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)
三、路由重定向
/test/和/test是两个不同的url
from flask import Flask# 编写了一个测试用例名称,我们测试返回的结果就是测试用例的名称app = Flask(__name__)@app.route('/test2/')
def get_case():return "有斜杠,输入url的时候加不加那个/都可以"@app.route('/test1')
def get_case_1():return "没有斜杠,输入的时候不可以有/"if __name__ == '__main__':app.run(debug=True)
至于加不加,演示一下就OK了
四、路由注册机制
路由:url与视图函数的绑定关系 每个绑定关系都会单独命一个名字(这个东西就叫做端点)
app.url_map() 专门用来存储路由关系
from flask import Flask# 编写了一个测试用例名称,我们测试返回的结果就是测试用例的名称app = Flask(__name__)print(app.url_map)@app.route('/test')
def get_case():return "有斜杠,输入url的时候加不加那个/都可以"print(app.url_map)if __name__ == '__main__':app.run(debug=True)
如果项目比较大的话,比如有200个Url,就最好用集中注册机制,如果Url没几个,就用装饰器注册(@app.route())
4.1 集中注册机制
app.add_url_rule('/a',view_func=get_case)
app.add_url_rule('/b',view_func=get_case_b)
4.2 装饰器注册
@app.route()
五、app.route()可配置的参数
- endpoint进行URL构建的时候会有用。endpoint的作用是url和view中间设置的一个桥梁
- methds,默认有get,head,option
from flask import Flask# 编写了一个测试用例名称,我们测试返回的结果就是测试用例的名称app = Flask(__name__)print(app.url_map)@app.route('/test',methods=['POST'],endpoint='tests')
def get_case():return "有斜杠,输入url的时候加不加那个/都可以"print(app.url_map)if __name__ == '__main__':app.run(debug=True)
运行效果:
- 重定向
方法一:@app.route(redirect_to=’/’) 不会去执行视图函数
@app.route(redirect_to='/')
from flask import Flask# 编写了一个测试用例名称,我们测试返回的结果就是测试用例的名称app = Flask(__name__)
@app.route('/')
def index():return 'this is index'print(app.url_map)@app.route('/test',methods=['POST'],endpoint='tests',redirect_to='/')
def get_case():print("判断一下这个函数有没有运行")return "有斜杠,输入url的时候加不加那个/都可以"print(app.url_map)if __name__ == '__main__':app.run(debug=True)
方法二:视图函数里面redirect()
from flask import Flask, redirect# 编写了一个测试用例名称,我们测试返回的结果就是测试用例的名称app = Flask(__name__)
# @app.route('/')
# def index():
# return 'this is index'
#
# print(app.url_map)@app.route('/test',methods=['POST'],endpoint='tests')
def get_case():print("判断一下这个函数有没有运行")return redirect('/')print(app.url_map)if __name__ == '__main__':app.run(debug=True)
- defaults默认值
默认参数:1. defaults={‘id’:3}
视图函数 id=3
from flask import Flask, redirect# 编写了一个测试用例名称,我们测试返回的结果就是测试用例的名称app = Flask(__name__)
@app.route('/')
def index():return 'this is index'print(app.url_map)@app.route('/test',methods=['GET'],endpoint='tests',defaults={'id':3})
def get_case(id):print('11')print(f'hello{id}')return redirect('/')print(app.url_map)if __name__ == '__main__':app.run(debug=True)
六、视图函数的分离(非常重要)
举个简单例子
route_variable.py
from flask import Flask, redirect# from route_one.urls import *
# 循环导入的解决方案
# 想用的时候再导入app = Flask(__name__)# url应该是导入所有的代码,而不是某一个模块
from route_one.urls import *if __name__ == '__main__':app.run(debug=True)
urls.py
from route_one import views
from route_one.route_variable import appapp.add_url_rule('/',view_func=views.index)
app.add_url_rule('/cases',view_func=views.cases)
views.py
def index():return 'this is index'def cases():return 'this is cases'
注意:
- 循环导入的解决方案:
想用的时候再导入 - url应该是导入所有的代码,而不是某一个模块
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)