测试开发——flask视图函数与路由 实战重点

开头必须分享一个我的志玲姐姐,太可了!点击此处
在这里插入图片描述

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)

运行结果
在这里插入图片描述

扫描二维码关注公众号,回复: 12653117 查看本文章

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()可配置的参数

  1. endpoint进行URL构建的时候会有用。endpoint的作用是url和view中间设置的一个桥梁
  2. 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)

运行效果:
在这里插入图片描述

  1. 重定向
    方法一:@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)
  1. 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 app

app.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'

注意:

  1. 循环导入的解决方案
    想用的时候再导入
  2. url应该是导入所有的代码,而不是某一个模块

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

猜你喜欢

转载自blog.csdn.net/hanhanwanghaha/article/details/114002564