python使用 flask+vue 制作前后端分离图书信息管理系统

Flask+VUE 实现页面增删改查显示开发+测试(图文教程附源码) 环境搭建博文: Flask+mysql接口增删改查博文: 本篇文章接着上面的图书项目book增删改查实现 vue 创建新项目 :vue create book 初始化 :vue init webpack book 中间要是提示要安装脚手架,按照提示执行命令即可 新建项目成功后,目录结构如下: ... 阅读详情

哈喽兄弟们,今天咱们来用Python实现一个前后端分离的图书信息管理系统。

制作前后端分离图书信息管理系统的思路:

1、前端部分

首先,我们可以使用 VueJS 作为前端框架,并通过 Vue CLI 工具进行创建和管理项目。

2、后端部分

后端部分我们可以采用 Python Flask 框架,这个框架是一个轻量级的Web框架,十分适合快速开发API接口。

3、前端和后端交互

前后端的交互可以采用 Restful API 设计的方式进行,例如创建一个图书列表接口,前端只需要发送一个 GET 请求给后端,后端通过查询数据库,返回 JSON 格式的数据给前端。

4、数据库

为了方便管理图书信息,我们可以使用关系型数据库 MySQL 存储和管理相关数据。

5、部署

可以使用 Docker 将前后端应用部署在同一个容器内,或者使用 CI/CD 工具将前后端应用分别部署在不同的服务器上。

总的来说,通过使用以上技术栈,我们就可以实现一个前后端分离的图书信息管理系统。

素材+代码

效果展示

后端部分

flask: https://flask.palletsprojects.com/en/2.1.x/

flask-sqlalchemy: https://flask-sqlalchemy.palletsprojects.com/en/2.x/

flask-cors: https://flask-cors.readthedocs.io/en/latest/

flask 快速上手

from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world(): # put application's code here
return 'Welcome Books!'

数据库部分

# -*- coding: utf-8 -*-
from extension import db
class Book(db.Model):
__tablename__ = 'book'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
book_number = db.Column(db.String(255), nullable=False)
book_name = db.Column(db.String(255), nullable=False)
book_type = db.Column(db.String(255), nullable=False)
book_prize = db.Column(db.Float, nullable=False)
author = db.Column(db.String(255))
book_publisher = db.Column(db.String(255))
@staticmethod
def init_db():
rets = [
(1, '001', '活着', '小说', 39.9, '余华', '某某出版社'),
(2, '002', '三体', '科幻', 99.8, '刘慈欣', '重庆出版社')
]
for ret in rets:
book = Book()
book.id = ret[0]
book.book_number = ret[1]
book.book_name = ret[2]
book.book_type = ret[3]
book.book_prize = ret[4]
book.author = ret[5]
book.book_publisher = ret[6]
db.session.add(book)
db.session.commit()

使用之前需要 flask create 初始化一下数据

接口部分

RESTful API 最佳实践(阮一峰) : https://www.ruanyifeng.com/blog/2018/10/restful-api-best-practice
s.html

Method Views for APIs: https://flask.palletsprojects.com/en/2.1.x/views/#method-views-for-apis

from flask import Flask, request
from flask_cors import CORS
from flask.views import MethodView
from extension import db
from models import Book
app = Flask(__name__)
CORS().init_app(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///books.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
@app.cli.command()
def create():
db.drop_all()
db.create_all()
Book.init_db()
@app.route('/')
def hello_world(): # put application's code here
return 'Welcome Books!'
class BookApi(MethodView):
def get(self, book_id):
if not book_id:
books: [Book] = Book.query.all()
results = [
{
'id': book.id,
'book_name': book.book_name,
'book_type': book.book_type,
'book_prize': book.book_prize,
'book_number': book.book_number,
'book_publisher': book.book_publisher,
'author': book.author,
} for book in books
]
return {
'status': 'success',
'message': '数据查询成功',
'results': results
}
book: Book = Book.query.get(book_id)
return {
'status': 'success',
'message': '数据查询成功',
'result': {
'id': book.id,
'book_name': book.book_name,
'book_type': book.book_type,
'book_prize': book.book_prize,
'book_number': book.book_number,
'book_publisher': book.book_publisher,
'author': book.author,
}
}
def post(self):
form = request.json
book = Book()
book.book_number = form.get('book_number')
book.book_name = form.get('book_name')
book.book_type = form.get('book_type')
book.book_prize = form.get('book_prize')
book.author = form.get('author')
book.book_publisher = form.get('book_publisher')
db.session.add(book)
db.session.commit()
# id, book_number, book_name, book_type, book_prize, author,
book_publisher
return {
'status': 'success',
'message': '数据添加成功'
}
def delete(self, book_id):
book = Book.query.get(book_id)
db.session.delete(book)
db.session.commit()
return {
'status': 'success',
'message': '数据删除成功'
}
def put(self, book_id):
book: Book = Book.query.get(book_id)
book.book_type = request.json.get('book_type')
book.book_name = request.json.get('book_name')
book.book_prize = request.json.get('book_prize')
book.book_number = request.json.get('book_number')
book.book_publisher = request.json.get('book_type')
book.author = request.json.get('book_type')
db.session.commit()
return {
'status': 'success',
'message': '数据修改成功'
}
book_api = BookApi.as_view('book_api')
app.add_url_rule('/books', view_func=book_api, methods=['GET', ], defaults=
{'book_id': None})
app.add_url_rule('/books', view_func=book_api, methods=['POST', ])
app.add_url_rule('/books/<int:book_id>', view_func=book_api, methods=['GET',
'PUT', 'DELETE'])

前端部分

vite: https://vitejs.cn/

vue3: https://v3.cn.vuejs.org/

Element Plus: https://element-plus.gitee.io/zh-CN/

axios: https://axios-http.com/docs/intro

项目创建

C:\Users\xxp\Desktop>npm init vite@latest
√ Project name: ... book-fontend
√ Select a framework: » vue
√ Select a variant: » vue
Scaffolding project in C:\Users\xxp\Desktop\book-fontend...
Done. Now run:
cd book-fontend
npm install
npm run dev

项目初始化

npm install element-plus
npm install axios

初始化 element-plus

import {createApp} from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
const app = createApp(App)
app.use(ElementPlus)
app.mount('#app')

页面创建

表单数据显示

<template>
<div style="margin: 0 auto;width: 50%;">
<h1 style="text-align: center">图书管理系统</h1>
<!-- 添加图书按钮 -->
<el-button type="primary" @click="add_dialog_visible = true" size="small">添
加图书</el-button>
<!-- 数据表格 -->
<el-table :data="books" style="margin: 20px auto;">
<el-table-column label="编号" prop="book_number"/>
<el-table-column label="书名" prop="book_name"/>
<el-table-column label="类型" prop="book_type"/>
<el-table-column label="价格" prop="book_prize"/>
<el-table-column label="作者" prop="author"/>
<el-table-column label="出版社" prop="book_publisher"/>
<el-table-column align="right" label="操作" width="200px">
<template #default="scope">
<el-button size="small" @click="handleEdit(scope.$index, scope.row)">
编辑
</el-button>
<el-button
size="small"
type="danger"
@click="handleDelete(scope.$index, scope.row)"
>
删除
</el-button
>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script setup>
import axios from 'axios'
import {reactive, ref, onMounted} from "vue";
import {ElMessageBox} from 'element-plus'
const books = reactive([])
const getStudents = () => {
axios.get("http://localhost:5000/books",).then(res => {
books.splice(0, books.length)
books.push(...res.data.results)
console.log('更新数据')
})
}
// 页面渲染之后添加数据
onMounted(() => {
getStudents()
})
// 删除数据
const handleDelete = (index, scope) => {
axios.delete(`http://localhost:5000/books/${scope.id}`).then(() => {
getStudents()
})
}
</script>

添加数据

html表单

<!-- 添加图书页面 -->
<el-dialog
title="添加图书"
v-model="add_dialog_visible"
width="30%"
:before-close="handleClose"
>
<el-form
ref="ruleFormRef"
:model="book_form"
status-icon
label-width="120px"
class="demo-ruleForm"
>
<el-form-item label="编号" prop="book_number">
<el-input v-model="book_form.book_number" autocomplete="off"/>
</el-form-item>
<el-form-item label="书名" prop="book_name">
<el-input v-model="book_form.book_name" autocomplete="off"/>
</el-form-item>
<el-form-item label="类型" prop="book_type">
<el-input v-model="book_form.book_type" autocomplete="off"/>
</el-form-item>
<el-form-item label="价格" prop="book_prize">
完整源码文档:加V:python1018 备注【LL】快速通过领取
<el-input v-model.number="book_form.book_prize" autocomplete="off"/>
</el-form-item>
<el-form-item label="作者" prop="author">
<el-input v-model="book_form.author" autocomplete="off"/>
</el-form-item>
<el-form-item label="出版社" prop="book_publisher">
<el-input v-model="book_form.book_publisher" autocomplete="off"/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm(ruleFormRef)">提交</elbutton>
<el-button @click="resetForm(ruleFormRef)">重置</el-button>
</el-form-item>
</el-form>
</el-dialog>

JavaScript

/*表单添加*/
const add_dialog_visible = ref(false)
const ruleFormRef = ref()
const book_form = reactive({
book_number: "",
book_name: "",
book_type: "",
book_prize: "",
author: "",
book_publisher: "",
id: "",
})
// 表单提交事件
const submitForm = (formEl) => {
完整源码文档:加V:python1018 备注【LL】快速通过领取
axios.post('http://localhost:5000/books', book_form).then(() => {
add_dialog_visible.value = false
formEl.resetFields()
getStudents()
})
}
// 重置表单
const resetForm = (formEl) => {
formEl.resetFields()
}
// 关闭弹窗前确认
const handleClose = (done) => {
ElMessageBox.confirm('确认关闭?')
.then(() => {
done();
})
.catch(() => {
});
}

好了,今天的分享就差不多到这里了!

对下一篇大家想看什么,可在评论区留言,看到我会更新的。

喜欢就关注一下博主,或点赞收藏评论一下我的文章吧!!!

打通Vue3+Flask(python3)+Mysql-实现简单数据交互 一般是右键新建数据库,然后选中数据库,选择创建新的表,然后设计需要的字段,注意的是每一个表需要设计主键(选中行,右键创建新的索引-PRIMARY)。(建议下载长期支持版本,版本不宜过低,比如18,20),Vue.js(npm install -g @vue/cli,下载速度慢可以设置淘宝镜像)。5、接下来,输入cd vueproject,进入当前项目目录,输入npm i,下载项目所需要的依赖。我这里是中文版,如果有需要,可以在设置里面的插件,下载中文包,然后重启pycharm即可,插件如下。 阅读详情

相关推荐

Python实现图书信息管理系统,从零开始用flask+vue做一个前后端分离的案例

大学生必备~

kakA的博客 2033

FLASK+VUE--前后端分离(一)- Flask基础讲解之路由、视图函数----注册登录代码实现

一、Flask简易介绍 1、Flask是目前十分流行的web框架,它是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。 2、微框架中的“微”是指Flask旨在保持代码简洁且易于扩展。 3、框架的简易理解及区别: 目前Python的web框架有很多。除了Flask,还有django等等 django是目前Python的框架中使用度最高的,但是Django如同java大多数被用于大型网站的开发。 Flask但对于大多数的小型网站的开发Flask就可以满足,和其他

万物皆有灵 2万+

带你用Python制作一个图书信息管理系统。轻松从零开始做一个前后端分离的案例

Python实现图书信息管理系统,从零开始用flask+vue做一个前后端分离的案例手把手教你制作图书信息管理系统

aliYz的博客 1291

flask+vue全栈部署方式

新公司项目技术栈用的falsk+vue,在这里记录一下部署方式,以备以后回顾。 我这边的是用systemctl+nginx+gunicorn+virtualenv的架构进行部署的。大概介绍一下,systemctl是一个后台进程管理的工具,nginx是进行反向代理的工具,gunicorn是一个 Python 的高性能 WSGI HTTP 服务器。 ps:上面的介绍也只是简介,详细资料可自查。这种时候,我总会想起来我初中历史老师说了“中国开始沦为半殖民地半封建社会”后,却从不解释什么是“殖民地”而我又不懂却只是

菜鸟的博客 2万+

使用 Python 和可视化编程控制树莓派机械臂myCobot

这些模块包括逻辑、循环、数学、文本、列表、颜色、变量、函数以及控制机械臂的函数等等,所以用户可以轻松入门编程,只需单击右上角的运行就可以启动程序,做一些有趣的应用。可以搭配任意摄像头进行图像识别,具有4个 USB 端口,可以通过 Raspberry Pi 的微型 HDMI 端口连接到显示器. 最后,40 个GPIO 接头可以进行更多扩展应用,机械臂每个接口都有清晰的标记,面板上还有一个电源开关和一个直流电源插孔。您现在可以将机器人放在地板或桌子上,并用力拧紧吸盘,以确保机械臂的底座在操作过程中不会移动。

m0_62456998的博客 3953

如何在项目中集成bpmn-process-designer

文章目录一、bpmn-process-designer是什么?二、使用步骤1.将下面地址的代码下载到本地2.替换dependencies和devDependencies3.拷贝package目录4.在main.js引入代码5.拷贝src5.拷贝App.vue代码注意事项 一、bpmn-process-designer是什么? bpmn-process-designer是一个基于 bpmn.js,Vue 2.x 和 ElementUI 开发的流程设计器(前端部分),支持监听器,扩展属性,表单等配置,可自由扩展

weixin_43550766的博客 9450

PYTHON制作前后端分离的图书信息管理系统(flask+vue)

嗨喽,大家好呀~这里是爱看美女的茜茜呐本次案例,使用 flask、vue、elements-plus、axios制作一个基于 restful api 的前后端分离的图书信息管理案例。

m0_72282564的博客 1147

SPRD Android 14 通过属性控制系统设置显示双栏或者单栏

SPRD Android 14 通过属性控制系统设置显示双栏或者单栏

m0_60898338的博客 1117

python在线图书馆信息管理系统flask-django-nodejs-php

本系统主要包括以下功能模块:首页、个人中心、用户管理、图书类型管理、图书信息管理、图书借阅管理、图书归还管理、图书入库管理、留言反馈、系统管理等模块,通过这些模块的实现能够基本满足日常图书管理的操作。

QQ511008285的博客 760

Nacos 从困惑到蒙圈(9)Nacos 适配 达梦数据库【最新版】

介绍Nacos适配达梦数据库的详细步骤,包括对最新版本的支持改造。

甘蓝的专栏 1369

读懂 403 Forbidden, the request has been blocked by UCON.:它不是浏览器渲染问题,而是后端安全闸门在拦截

摘要 403 Forbidden 错误表明服务器理解请求但拒绝执行,通常与权限或访问控制有关。当错误信息显示 "blocked by UCON" 时,说明请求被 SAP 体系中的统一连接管控框架拦截。UCON 采用白名单机制限制外部调用,通过记录、评估、强制三阶段流程实施管控。常见触发场景包括 HTTP 服务与通信场景配置不一致、白名单未更新等。排查时应通过 DevTools 确认服务器响应,使用 curl 排除浏览器干扰,并比较不同环境的行为差异。解决方案通常涉及调整配置传输顺序或更新

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 222

基于python在线图书馆信息管理系统flask-django-nodejs-php

本系统主要目的是全面实现在线图书信息管理系统数字化,管理员对于用户的所有信息能够全部掌握,而用户能够对自己的图书借阅信息能够有一个直观的了解。随着科学技术的飞速发展,在线图书信息管理系统也要不断完善其工作流程的繁杂性、多样化、管理复杂等存在的问题。所以要通过计算机胜任图书借阅管理的工作,使在线图书信息管理系统更加准确、方便及快捷。

QQ_511008285的博客 1134

基于python CNN卷积神经网络模型实现6类别垃圾分类 毕业设计 附完整代码数据

基于python CNN卷积神经网络模型实现6类别垃圾分类 毕业设计 附完整代码数据

1659

nodejs+vue在线图书馆信息管理系统flask-django-python

科学技术日新月异的如今,计算机在生活各个领域都占有重要的作用,尤其在信息管理方面,在这样的大背景下,学习计算机知识不仅仅是为了掌握一种技能,更重要的是能够让它真正地使用到实践中去,以创新的视角去不断方便人们的生活,推动对新知识的学习,培养自学能力,锻炼动手实践的本领。

QQ1963288475的博客 970

CloudCompare 二次开发(17)——点云添加均匀分布的随机噪声

使用CloudCompare编程实现点云添加随机噪声。

点云侠的博客 835

人工智能智能体研究综述:从理论架构到前沿应用

AI Agent,即人工智能智能体,是指能够在特定环境中自主感知、推理、决策并执行行动以实现特定目标的智能系统[1]。自主性反应性主动性(Pro-activeness)和社会性fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;AI Agent核心特征自主性 Autonomy反应性 Reactivity主动性 Pro-activeness。

nmdbbzcl的博客 898

基于nodejs在线图书馆信息管理系统flask-django-python

随着科学技术的飞速发展,在线图书信息管理系统也要不断完善其工作流程的繁杂性、多样化、管理复杂等存在的问题。所以要通过计算机胜任图书借阅管理的工作,使在线图书信息管理系统更加准确、方便及快捷。

QQ_1963288475的博客 947

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【附源码】基于flask框架校园二手图书交易系统 (python+mysql+论文)

其次,该系统的开发将有助于培养学生的环保意识和节约意识,让他们在享受便利的同时,也能够为保护环境、节约资源做出贡献。总之,开发一个校园二手图书交易系统不仅可以满足学生的交易需求,还能促进校园文化的发展,具有很高的实用价值和社会意义。特别强调的是,系统必须使用MySQL 5.7版本,以确保与特定功能和性能优化的兼容性。在数据库管理工具的选择上,使用了Navicat 11,这是一个用户友好且功能强大的数据库管理软件,它支持多种数据库系统,包括MySQL,并提供了图形化界面,使得数据库的管理和维护工作更加便捷。

海彤程序设计 831

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

[开题报告]flask框架淑里書外书店设计(python+程序+论文)

在数字化阅读日益普及的今天,实体书店作为城市文化的重要载体,其角色与功能正经历着深刻的变革。淑里書外书店设计项目应运而生,旨在探索如何在保持传统书店文化底蕴的同时,融入现代设计理念与科技元素,打造一个既满足读者阅读需求,又兼具社交、休闲与文化交流功能的复合型文化空间。随着人们对精神生活品质要求的提高,传统书店亟需转型升级,以独特的空间布局、丰富的图书资源及个性化的服务体验吸引顾客,成为城市中不可或缺的文化地标。

sheji713的博客 1152

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【附源码】基于flask框架的图书管理系统 (python+mysql+论文)

在技术选型上,结合当前前端和后端技术的发展态势,采用HTML+CSS+JavaScript+Vue作为前端开发技术,利用Python+Flask作为后端开发技术,并选择MySQL 5.7作为数据库系统,以支持高效的数据处理和稳定的系统运行。在数据库管理工具的选择上,使用了Navicat 11,这是一个用户友好且功能强大的数据库管理软件,它支持多种数据库系统,包括MySQL,并提供了图形化界面,使得数据库的管理和维护工作更加便捷。以上选题背景和意义内容是根据本选题撰写,非本作品实际的选题背景、意义或功能。

浩焱毕设程序源码 785

基于python+flask框架的图书管理系统(开题+程序+论文) 计算机毕设

因此,开发一套集图书管理、借阅、归还、用户管理等功能于一体的图书管理系统,成为提升图书馆服务质量、优化资源配置、实现信息化管理的迫切需求。该系统应能够全面覆盖图书管理的各个环节,包括图书类型的分类管理、图书信息的详细记录、图书借阅与归还流程的自动化处理、用户信息的有效管理以及图书入库的便捷操作等。本研究的意义在于,一方面,通过图书管理系统的开发与应用,能够显著提升图书馆的工作效率和服务质量,减少人力成本,实现图书资源的快速检索与精准定位,为读者提供24小时不间断的在线服务;

zhihao501的博客 1166

python-flask计算机毕业设计网上书店信息管理系统(程序+开题+论文)

本研究的主要目的是开发一个功能完善、操作简便、性能稳定的网上书店信息管理系统,具体目标包括:一是构建用户管理系统,实现用户注册、登录、信息维护等功能,保障用户信息安全;然而,随着图书种类和数量的急剧增加,以及用户需求的多样化,如何有效管理图书信息、提升用户体验、优化库存配置成为网上书店面临的重要挑战。实现图书信息的编辑、查询和删除功能,支持按书名、作者、ISBN等多种方式检索,提高数据检索效率。:根据图书内容、风格、用途等特征,设计合理的分类体系,如文学、科技、教育、艺术等大类,并在大类下进一步细分小类。

小齐学长_计算机毕设 905

基于python+flask框架的基于web网上书店系统(开题+程序+论文) 计算机毕设

该系统旨在通过优化图书展示、提升搜索效率、简化购买流程等手段,为用户提供更加个性化、高效化的在线购书体验,同时帮助书店管理者实现图书信息的有效管理和库存的科学控制。通过这些目标的实现,最终推动网上书店行业的健康发展,促进图书文化的广泛传播。此外,通过精准的用户行为分析,还能为书店提供有价值的市场数据,指导其优化库存结构,精准营销,从而进一步提升市场竞争力。:构建详细的图书信息数据库,包括书名、作者、出版社、ISBN、价格、库存量等关键信息,并支持图书信息的增删改查操作,确保图书信息的及时更新与准确性。

zhihao503的博客 1179

python+flask计算机毕业设计二手图书零售系统(程序+开题+论文)

14] 郭婺, 郭建, 张劲松, 石翠萍, 刘道森, 刘超. "基于Python的网络爬虫的设计与实现"[J]. 信息记录材料, 2023, 24 (04): 159-162.[9] 陈佳佳, 邱晓荣, 熊宇昊, 段莉华. "基于Python的人脸识别技术研究"[J]. 电脑知识与技术, 2023, 19 (08): 34-36+39.[8] 孙强, 李建华, 李生红. "基于Python的文本分类系统开发研究"[J]. 计算机应用与软件, 2011, 28(03): 13-14.

Node.js毕设程序源码 1057
上一篇: Python告别pip手动安装模块,实现全自动安装第三方库,彻底解放你的双手
下一篇: ikun猛戳进来丨使用Python打造属于你的ikun音乐播放器,简直不要太好用
轻松学Python
博客等级 码龄7年 6547粉丝 255原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值