tornado分页问题
需要在用户输入/chat_data后展示该页面,页面内容大致如下:
后端使用get及post render chat_data.html,get用于初始化展示,post用于在用户选择区服和公会查询结果的展示。前端需要直接返回区服默认值及公会默认值,并展示对应的数据,同时初始化分页,1到总页数;
现在的问题是:get和post方法中的代码很相近,都是查询数据库,怎么合并一起展示
回答:
提取出一个查询数据库的函数放到request hanlder里面呗?get和post的时候都调这个函数就是了。
回答:
get只返回静态页面html,post做分页数据接口,返回json;
页面里用js去分别加载区服、工会列表,放入select里,同时发送post请求取第一页的chat data,参数都为空.
查询时带参数post就行了;
class ChatDataListForm(Form): qufu_id = IntegerField(validators=[Optional()])
gonghui_id = IntegerField(validators=[Optional()])
#
# draw = IntegerField(validators=[Optional()], default=1)
# page = IntegerField(validators=[Optional()], default=0)
offset = IntegerField(validators=[Optional()], default=0)
limit = IntegerField(validators=[Optional()], default=10)
order_by = StringField(validators=[Optional()])
class ChatDataListHandler(BaseHandler):
def get(self):
self.render('chat-data.html')
def post(self):
form = ChatDataListForm(self.request.arguments)
q = self.session.query(ChatData)
records_total = q.count()
if form.gonghui_id.data is not None:
q = q.filter(ChatData.gonghui_id == form.gonghui_id.data)
if form.qufu_id.data is not None:
q = q.filter(ChatData.qufu_id == form.qufu_id.data)
records_filtered = q.count()
q = q.order_by('id desc')
records = q.offset(form.offset.data).limit(form.limit.data).all()
#records = q.offset((form.page.data) * form.limit.data).limit(form.limit.data).all()
ret = {
'code': 0,
'recordsTotal': records_total,
'recordsFiltered': records_filtered,
'data': records,
'draw': form.draw.data,
}
self.render_json(ret)
类似的再写区服、公会的handler, 这样handler功能较为简单专一,不过需要写些js
以上是 tornado分页问题 的全部内容, 来源链接: utcz.com/a/162415.html