您现在的位置是:首页 > 编程 > 

Flask与Vue分页功能实现

2025-07-27 07:32:20
Flask与Vue分页功能实现 在本篇文章中,我们将实现一个简单的分页功能,后端使用 Flask 提供数据,前端使用 Vue.js 显示数据,并且通过 Element UI 进行分页组件的交互。具体实现包括 Flask 视图函数的分页逻辑、Vue 前端分页组件的实现和前后端数据交互。1. 后端:Flask分页实现首先,确保你的 Flask 环境已经设置好,并安装了相关依赖:代码语言:bash复制p

Flask与Vue分页功能实现

在本篇文章中,我们将实现一个简单的分页功能,后端使用 Flask 提供数据,前端使用 Vue.js 显示数据,并且通过 Element UI 进行分页组件的交互。具体实现包括 Flask 视图函数的分页逻辑、Vue 前端分页组件的实现和前后端数据交互。

1. 后端:Flask分页实现

首先,确保你的 Flask 环境已经设置好,并安装了相关依赖:

代码语言:bash复制
pip install flask flask-sqlalchemy
视图函数 operation_log_view

Flask 中使用 paginate 方法来实现分页查询。我们将在视图函数中处理分页的逻辑,接受来自前端的分页参数,然后返回分页数据。

代码语言:python代码运行次数:0运行复制
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///logs.db'
['SQLALCHEMY_TRACK_MODIFICATIOS'] = False
db = SQLAlchemy(app)

class OperationLog(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, nullable=False)
    operation_time = db.Column(db.DateTime, nullable=False)
    operation_type = db.Column(db.String(50), nullable=False)

@app.route('/operation_log_view', methods=['POST'])
def operation_log_view():
    """操作日志分页接口"""
    page_number = request.json.get('page_number')
    page_count = request.json.get('page_count')

    if not all([page_number, page_count]):
        return jsonify({'status': 'error', 'data': '参数不能为空'})

    page_number = int(page_number)
    page_size = int(page_count)

    # 查询操作日志并进行分页
    operation_logs_pagination = (
        OperationLog._by(_time.desc())
        .paginate(page_number, page_size, False)
    )
    # 获取分页数据
    operation_logs = operation_logs_pagination.items
    # 获取分页信息
    total_pages = operation_logs_pagination.pages
    # 获取当前页码
    current_page = operation_logs_pagination.page

    # 返回操作日志列表
    message = [
        {
            'operation_time': _time,
            'operation_type': _type,
        } for log in operation_logs
    ]

    return jsonify({'status': 'ok', 'data': message, 'total_pages': total_pages, 'current_page': current_page})

if __name__ == '__main__':
    app.run(debug=True)

2. 前端:Vue + Element UI分页实现

在前端,我们使用 Vue.js 和 Element UI 来创建分页组件,并与后端进行交互,获取分页数据。

首先,确保你的项目中已经安装了 Vue 和 Element UI。如果没有安装,可以通过以下命令安装:

代码语言:bash复制
npm install element-ui axios
Vue 组件代码

Vue 组件中,handleCurrentChange 方法会在用户切换页码时触发,发送请求给后端,获取对应的分页数据。

代码语言:html复制
<template>
  <div>
    <!-- 操作日志表格 -->
    <el-table :data="operationRecord">
      <el-table-column prop="operation_time" label="操作时间" width="180">
      </el-table-column>
      <el-table-column prop="operation_type" label="操作类型" width="120">
      </el-table-column>
      <!-- 你可以根据需要继续添加其他列 -->
    </el-table>

    <!-- 分页组件 -->
    <div class="pagination">
      <el-pagination
        layout="prev, pager, next"
        :current-page="currentPage"
        :page-count="totalPages"
        :page-size="pageCount"
        @current-change="handleCurrentChange"
      >
      </el-pagination>
    </div>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {    
    return {
      operationRecord: [],  // 存储操作日志数据
      currentPage: 1,  // 当前页码
      pageCount: 15,   // 每页显示的记录数
      totalPages: 1,   // 总页数
    };
  },
  methods: {
    // 页码变化时触发,重新请求数据
    handleCurrentChange(currentPage) {
       = currentPage;
      this.getOperationRecord();
    },

    // 获取操作日志数据
    getOperationRecord() {
      ct params = {
        page_number: ,
        page_count: this.pageCount,
      };

      axios.post('/operation_log_view', params)
        .then((respe) => {
          ct { data } = respe;
          if (data.status === 'ok') {
             = data.data;  // 更新操作记录数据
             = _pages;  // 更新总页数
          }
        })
        .catch((error) => {
          ('获取数据失败', error);
        });
    },
  },
  created() {
    // 组件创建时自动请求第一页数据
    this.getOperationRecord();
  },
};
</script>

<style scoped>
.pagination {
  margin-top: 20px;
  text-align: center;
}
</style>

. 路由配置

在 Flask 中,我们通过路由将视图函数与 URL 绑定。operation_log_view 视图函数已经通过 @app.route('/operation_log_view', methods=['POST']) 绑定到了 /operation_log_view 路径。前端通过 axios.post 向该路径发送请求。

4. 运行项目

  1. 运行 Flask 后端服务:
代码语言:bash复制
python app.py
  1. 启动 Vue 项目:
代码语言:bash复制
npm run serve
  1. 访问 Vue 项目并进行分页操作,你应该能够看到分页组件,并能够正确显示操作日志数据。

5. 总结

  • 后端使用 Flask 和 SQLAlchemy 实现分页,通过 paginate 方法查询数据并返回。
  • 前端使用 Vue.js 和 Element UI 实现分页组件,配合 axios 发送请求和接收分页数据。
  • 当用户切换页码时,Vue 会自动触发请求,更新数据并显示分页。

通过这种方式,我们实现了一个简单的分页功能,能够高效地从后端获取数据并在前端进行分页显示。

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1219407.html

相关标签:无
上传时间: 2025-07-25 12:33:14
留言与评论(共有 14 条评论)
本站网友 manageengine
14分钟前 发表
'data'
本站网友 草坪贴图
9分钟前 发表
1
本站网友 精神压力
16分钟前 发表
发送请求给后端
本站网友 新韩娱
15分钟前 发表
page-size="pageCount" @current-change="handleCurrentChange" > </el-pagination> </div> </div> </template> <script> import axios from 'axios'; export default { data() { return { operationRecord
本站网友 南海是哪个省
28分钟前 发表
next"
本站网友 我就是社工库
21分钟前 发表
确保你的项目中已经安装了 Vue 和 Element UI
本站网友 mywi
16分钟前 发表
request
本站网友 头号人物
16分钟前 发表
重新请求数据 handleCurrentChange(currentPage) { = currentPage; this.getOperationRecord(); }
本站网友 美女小妞
6分钟前 发表
代码语言:html复制<template> <div> <!-- 操作日志表格 --> <el-table
本站网友 东方之珠ktv
25分钟前 发表
_type
本站网友 张定国
13分钟前 发表
'current_page'
本站网友 西安宝马案
25分钟前 发表
// 存储操作日志数据 currentPage
本站网友 汗蒸房加盟
8分钟前 发表
你应该能够看到分页组件