首页 > temp > python入门教程 >
-
python使用 flask+vue 制作前后端分离图书信息管理系统
哈喽兄弟们,今天咱们来用Python实现一个前后端分离的图书信息管理系统。
制作前后端分离图书信息管理系统的思路:
1、前端部分
首先,我们可以使用 VueJS 作为前端框架,并通过 Vue CLI 工具进行创建和管理项目。
2、后端部分
后端部分我们可以采用 Python Flask 框架,这个框架是一个轻量级的Web框架,十分适合快速开发API接口。
3、前端和后端交互
前后端的交互可以采用 Restful API 设计的方式进行,例如创建一个图书列表接口,前端只需要发送一个 GET 请求给后端,后端通过查询数据库,返回 JSON 格式的数据给前端。
4、数据库
为了方便管理图书信息,我们可以使用关系型数据库 MySQL 存储和管理相关数据。
5、部署
可以使用 Docker 将前后端应用部署在同一个容器内,或者使用 CI/CD 工具将前后端应用分别部署在不同的服务器上。
总的来说,通过使用以上技术栈,我们就可以实现一个前后端分离的图书信息管理系统。
素材+代码
![](data:image/png;base64,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)
素材和完整代码,视频讲解,都在文末最后一段代码里
效果展示
后端部分
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(() => { }); }
好了,今天的分享就差不多到这里了!
对下一篇大家想看什么,可在评论区留言,看到我会更新的。
喜欢就关注一下博主,或点赞收藏评论一下我的文章吧!!!
出处:https://www.cnblogs.com/hahaa/p/17514984.html