首页 > tornado分页问题

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

【热门文章】
【热门文章】