ValueError: View function did not return a response

新手在学 flask 开发 T.T ,看到《 python web 开发》第十章的用户资料, 在搞 管理员级别的资料编辑器 那里出问题了, 视图函数抛出异常,不能返回响应 。百度,谷歌, sof 无果。找好久了没解决,心塞 所以来寻求帮助,谢谢能提供帮助的人

检查过好几遍了,views.py,forms.py,模板都没发现问题
折腾了一晚上都没搞定,T.T 简直要哭了


解决过程:

后来求助于网络社区,在网友’sdg’帮助下才找到问题,感谢~~
http://cocode.cc/t/valueerror-view-function-did-not-return-a-response/7283/2

检查用户权限的自定义装饰器出问题了decorators.py:

from functools import wraps
from flask import abort
from flask_login import current_user
from .models import Permission

def permission_required(permission):
     def decorator(f):
          @wraps(f)
          def decorated_function(*args, **kwargs):
               if not current_user.can(permission):
                    abort(403)
                    return f(*args, **kwargs)  # 此行缩进错误,应在if语句外
          return decorated_function
     return decorator

def admin_required(f):
     return permission_required(Permission.ADMINISTER)(f)

修正后decorators.py:

from functools import wraps
from flask import abort
from flask_login import current_user
from .models import Permission

def permission_required(permission):
     def decorator(f):
          @wraps(f)
          def decorated_function(*args, **kwargs):
               if not current_user.can(permission):
                    abort(403)
               return f(*args, **kwargs)
          return decorated_function
     return decorator

def admin_required(f):
     return permission_required(Permission.ADMINISTER)(f)

总结:

  • 自己粗心大意,切勿急躁
  • python代码缩进问题,网友都建议缩进用4个空格,用1个tab代替风险太大,因为各家的编辑器对tab键定义存在差异,很容易出问题

不过我还有一问题,为什么错误页面抛出的是 视图函数 View function 的问题,
而不会抛出装饰器那边的错误,例如( IndentationError ):
@admin_required → def permission_required(permission)

使用 app.route 注册视图时,装饰器也是视图函数的一部分,所以会提示 View function did not return a response。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值