为什么此Flask函数采用错误参数?

时间:2019-06-16 14:05:18

标签: python flask http-status-code-404

我正在学习python,正在尝试建立一个网站。我到了需要处理错误的地步,但我不明白Flask文档中提供的示例:

{ "$lookup": {
  "from": "likes",
  "let": { "storyID": "$storyID" },
  "pipeline": [
    { "$match": { "$expr": { "$eq": ["$$storyID", "$storyID"] }}}
  ],
  "as": "likes1"
}},
{ "$addFields": {
  "likes.total": { "$size": "$likes1" },
  "likes.byMe": { "$ne": [{ "$indexOfArray": ["$likes1.user.id", user_id] }, -1] }
}},
{ "$project": { "likes1": 0 }}

为什么需要键入{ "$lookup": { "from": "likes", "let": { "storyID": "$storyID" }, "pipeline": [ { "$match": { "$expr": { "$eq": ["$$storyID", "$storyID"] }}}, { "$facet": { "total": [{ "$count": "count" }], "byMe": [{ "$match": { "$expr": { "$eq": ["$user.id", user_id] }}}] }} { "$project": { "total": { "$ifNull": [{ "$arrayElemAt": ["$total.count", 0] }, 0 ] }, "byMe": { "$ne": [{ "$size": "$byMe" }, 0] } }} ], "as": "likes" }}, { "$unwind": "$likes" } 而不是@app.errorhandler(404) def not_found(error): return render_template('error.html'), 404

1 个答案:

答案 0 :(得分:1)

@app.errorhandler()未注册常规视图。它注册一个error handler。错误处理程序被传递给错误对象,因此它们可以确定如何最好地产生备用视图。从文档中:

  

错误处理程序是在引发错误类型时返回响应的函数,类似于视图是在请求URL匹配时返回响应的函数。 它已传递正在处理的错误实例,很可能是HTTPException

(加粗强调)

request对象上找不到此错误信息,因为类似的错误是由处理当前请求的普通视图产生的错误引起的。

正常路径为:

  • 请求进入
  • Flask找到运行的正确视图并调用它
  • 该视图遇到问题,并通过调用abort(404)
  • 引发404 not found错误
  • Flask找到一个匹配的错误处理程序,并将其与错误对象一起
  • 错误处理程序响应将发送回浏览器。