Django View中跳转的陷阱

举报
feichaiyu 发表于 2019/12/15 23:07:45 2019/12/15
【摘要】 Django中在view中对接口做重定向常用的有两种方式。 - shortcuts.redirect 可以传入url或者view name,view name可以指定view的app方便加速查找 - HttpResponseRedirect 传入url直接做重定向两种方式虽然都可以做跳转,但在不同场景中不当的使用可能带来性能问题 从上图可以看出,shortcuts.redirect这种方式的...

Django中在view中对接口做重定向常用的有两种方式。 - shortcuts.redirect 可以传入url或者view name,view name可以指定view的app方便加速查找 - HttpResponseRedirect 传入url直接做重定向

两种方式虽然都可以做跳转,但在不同场景中不当的使用可能带来性能问题 

1576422386819263.jpg

从上图可以看出,shortcuts.redirect这种方式的跳转耗时达到了3秒多,传入的url参数大致如下

'/api/v4/wap_service/obj_detail_view/?partner=test&obj_id=v3232nids_owqjrnrek'

细看了一下shortcuts.redirect代码,发现它的逻辑要更复杂一些,识别跳转的过程分三步。 - 如果传入的是model并且定义了get_absolute_url方法,则会按照该方法中定义的url跳转 - 假设传入的是view并尝试根据view解析(reverse)出url。怎么解析呢,正则匹配所有的url pattern,找出对应的url - 如果前面两项都失败了,则直接假设传入的字符串是url并做跳转

有意思的是shortcuts.redirect最终还是会构造HttpResponseRedirect对象来完成跳转,只不过如果一开始你就知道传入的参数是url的话,那它做的工作就会多了两步,其中有一步还是正则表达式来匹配。

可以确定的是,带着参数的url你去做reverse来识别view的时候,肯定是失败的。也就是说前两部都是没有意义的,遍历所有的url pattern自然是耗时的,url越长效果越明显。

如果明确是根据url跳转的话,直接借助HttpResponseRedirect就行了,简单明了。


转载声明:本文转载自异步社区

原文链接:https://www.epubit.com/articleDetails?id=Nf15beccd-6a15-449e-88ec-442ac269bcea


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。