VVK*_*mar 3 python flask python-3.x
如果 url 查询字符串拼写错误,如何抛出异常?
这是获取特定用户的 url:
http://127.0.0.1:5000/v1/t/user/?user_id=1。如果持续下去,http://127.0.0.1:5000/v1/t/user/它将给出用户列表。
如果user_id查询字符串中的拼写错误(例如错误)怎么办use_id=1,或者不是传递整数值,而是传递字符串值,user_id我希望在这种情况下我应该返回 404 页面。我不认为内部request.args.get()会抛出?如果我必须处理这种情况该怎么办?
page_index = request.args.get('index', 1, type=int)
max_item = request.args.get('max', 1, type=int)
userID = request.args.get('user_id', type=int)
Run Code Online (Sandbox Code Playgroud)
您可以创建一个自定义错误处理程序:
@app.errorhandler(404)
def page_not_found(error):
return render_template('404.html', title = '404'), 404
Run Code Online (Sandbox Code Playgroud)
如果未设置参数,则使用abort引发此问题:user_id
from flask import abort
userID = request.args.get('user_id', type=int)
if not userID:
abort(404)
Run Code Online (Sandbox Code Playgroud)
请记住,除非您给它默认参数,否则request.args.get返回默认值:None
foo = request.args.get('bar', default='Something')
Run Code Online (Sandbox Code Playgroud)
编辑:澄清。
如果您指定type参数,则如果请求中传递的值不是所述类型,request.args.get则将返回此参数。None
例如:
incoming_data['user_id'] = request.args.get('user_id' , type=int)
print('Got: ', incoming_data['user_id'])
Run Code Online (Sandbox Code Playgroud)
将导致:
# request: /?user_id=1
Got: 1
# request: /?user_id=test
Got: None
# request: /?
Got: None
Run Code Online (Sandbox Code Playgroud)
根据我在评论中链接的其他答案,您可以相应地构建过滤器:
filter_data = {key: value for (key, value) in incoming_data.items()
if value}
result = MyModel.query.filter_by(**filter_data)
Run Code Online (Sandbox Code Playgroud)
filter_datauser_id仅当 URL 参数中传递的内容是整数时才会包含密钥。
| 归档时间: |
|
| 查看次数: |
19276 次 |
| 最近记录: |