背景
项目中常见的分页功能,代码如下:
# 收藏列表
@blog_base_blueprint.route('/resource_like_list/<int:user_id>', methods=['POST'])
def getResourceLikeList(user_id):
page_size = request.form.get('page_size', default=2)
page_num = request.form.get('page_num', default=1)
offset = (page_num - 1) * page_size
print(offset)
print(page_num)
print(page_size)
logs = models.ResourceLikeLog.query.filter_by(user_id=user_id).filter_by(delete_flag=0).order_by(models.ResourceLikeLog.id.desc()).offset(
offset).limit(page_size)
return jsonify({
'code': 1,
'msg': '成功',
'data': [log.to_format() for log in logs]
})
项目启动时可以使用,但是我在postman中传了page_num的参数,然后就报异常TypeError: unsupported operand type(s) for -: 'str' and 'int'
;
根据异常信息,是类型的的问题,需要将str转为int,这里还是很好处理的,在接受参数的时候,处理一下就可以喽。
request.form.get()
点到源码,
def get(self, key, default=None, type=None):
"""Return the default value if the requested data doesn't exist.
If `type` is provided and is a callable it should convert the value,
return it or raise a :exc:`ValueError` if that is not possible. In
this case the function will return the default as if the value was not
:param key: The key to be looked up.
:param default: The default value to be returned if the key can't
be looked up. If not further specified `None` is
returned.
:param type: A callable that is used to cast the value in the
:class:`MultiDict`. If a :exc:`ValueError` is raised
by this callable the default value is returned.
"""
try:
rv = self[key]
except KeyError:
return default
if type is not None:
try:
rv = type(rv)
except ValueError:
rv = default
return rv
能看到这个方法的参数:有默认值,还有一个参数类型的参数,用来强制转换参数类型,调整代码为:
page_size = request.form.get('page_size', default=2, type=int)
page_num = request.form.get('page_num', default=1, type=int)