url_for、redirect 跳转的理解

转自https://blog.csdn.net/zyself/article/details/83014342

 

 

 

 

我们用上面的例子来分析删除一条记录的处理过程,程序流程大致是:

客户在页面某条记录点击 “删除”按钮,这个按钮实质是一个包含了id参数的url链接。(比如/tag/del/3,其中3是id参数)
收到访问页面请求,程序直接到tag_del函数块,在该函数中处理相关工作(比如从数据库中删除id=3的数据)
完成处理后,根据逻辑就是重新显示记录列表,因此用url_for 拼接出访问记录列表页面的url(如:/tag/list/1,参考:图片中第一步的说明)
有了url后,redirect重定向到url(这个操作类似用户主动在浏览器中输入该url访问页面,参考第二步说明)
之后,就如客户主动访问页面类似,系统render_template渲染出页面展现给了用户。(参看第三、第四步说明)

附:url_for 、redirect、render 区别

url_for的作用:就是拼接出字符串类型的url。如 url_for() 函数最简单的用法是以视图函数名作为参数, 返回这个视图函数对应的头顶上@语法糖中的URL。url_for除了上面例子中说的拼接外,还可以拼接静态文件,请参考下面附加说明。
redirect 是重定向函数:这个函数的原型是def redirect(location, code=302, Response=None),其中location参数就是要重定向到的url,这个参数可以是直接的提供www.baid.com这样的,也可以url_for(XXXX)从拼接而来的,调用这个函数,就类似用户主动在浏览器中输入该url访问页面。例如 调用return redirect('https://www.baidu.com') 后,用户最终看到的就是页面跳转到了百度。
render渲染模板函数:这个函数是实实在在渲染模板,呈现给最终的用户。

简单说,就是:

url_for 拼接出网页的网址url,类似于拼接字符串
redirect 指示浏览器访问网址,类似用户地址栏输入具体地址访问网页
render 渲染出网页,类似用户输入了地址,按了回车后,浏览器展现出网页页面

附:url_for 是按什么规则拼接网页地址Url的?

url_for原型:def url_for(endpoint, **values)
1、反转url:一般我们通过一个URL就可以执行到某一个函数(@route路由)。如果反过来,我们知道一个函数,怎么去获得这个URL呢?url_for函数就可以帮我们实现这个功能。url_for()函数接收两个及以上的参数,他接收函数名作为第一个参数,第二个参数则接收对应URL里面参数(下面例子中page就是参数),如果还出现其他的参数,则会添加到URL的后面作为查询参数(类似这样:http://localhost:5000/admin/tag/list/1?abc),按这样的规则返回对应的URL。简单的讲就是,就是url_for会自动在视图模板中寻找和自己第一个参数endpoint一样函数,然后函数头顶@route中的url。 如果没有找到,就看下面第二点。
如下面的例子:因为有函数名tag_list和第一个参数一样,所以返回结果就是http://localhost:5000/admin/tag/list/1。当然,前面的http://localhost:5000/admin这一截是蓝图控制的。

 

 

2、直接字符串拼接:如果url_for没有找到和自己第一个参数一样名称的函数,则直接把第一个参数按普通字符串一样和后面的参数拼接。如下面的静态文件就是直接字符串模式拼接的,调用 url_for(‘static’,filename=‘base/image/logo.png’) ,得到的url是:http://localhost:5000/static/base/image/logo.png

 

 

ok

posted @ 2020-04-15 13:52  AnthonyWang  阅读(1355)  评论(0)    收藏  举报