自主学习 之 flask路由

前言

不知情时踩过的坑,说多了都是泪。
本文不讲书上有的内容,讲讲实际碰到,但是在网上没有看到相关例子的(可能我的思路太奇特)。

访问404

常见会抛出404的:
1.数据库查询first_or_404()
2.路由地址错误

路由地址错误:

情形一:为空

设置多个路由很方便,于是因为需要,我写了如下代码:

@test.route('/testDatas',defaults={'modulename':'','classname':'','funname':''},methods=['GET', 'POST'])
@test.route('/testDatas/<modulename>,<classname>,<funname>',methods=['GET','POST'])
def testDatas(modulename,classname,funname):
    ...
    return render_template('test/testDatas.html',modulename=modulename,classname=classname,funname=funname)

模板中调用方式一:

{{url_for(‘e9Testdata.testDatas’,modulename=newname,classname=classname,funname=funname}}

没问题。

在第一次采用调用方式一后,modulename有新的值了,其他值未更新,于是采用第二种:

{{url_for(‘e9Testdata.testDatas’)}}

结果是404。

我就在那想为什么,猜测是不是因为值为空的原因(平常写代码习惯默认值赋空值了)。于是修改代码:

@test.route('/testDatas',defaults={'modulename':'0','classname':'0','funname':'0'},methods=['GET', 'POST'])
@test.route('/testDatas/<modulename>,<classname>,<funname>',methods=['GET','POST'])
def testDatas(modulename,classname,funname):
    ...
    return render_template('test/testDatas.html',modulename=modulename,classname=classname,funname=funname)

果然,这样就ok了。

情形二:int类型,负数识别问题

视图中的路由:

@interface.route('/interface/<tab>/<int:menu>/<int:page>/<int:per_page>

模板中传参:

{{url_for('interface.show_interface',tab='case',menu=-1,page=1,per_page=10)}}

结果:报404

原因:menu=-1,传入的-1,在路由转换时并不会把它认为是-1。(可查看routing.py中的匹配)

总结

1.参数值不能为空。为空的时候地址就是/testDatas/newname%2C%2C,路由处理时会丢掉空的(routing.py),于是就找不到对应的视图函数了。
2.int类型参数值不能为负数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值