flask前后端项目--实例-前端部分:-4-vue-Element Plus

news2024/11/17 2:41:21

flask前后端项目--实例-前端部分:-4-vue-Element Plus组件添加事项

一、实验测试步骤

1.Element Plus添加

1.先备份App.VUE,然后修改app.vue的内容,数据来源资Element Plus的表格table

2. 数据来源资Element Plus的表格table

3. 运行服务,展示界面数据,说明复制的数据是正确

 


二、实际项目代码

实施前记得备份修改的数据

2.1修改前端魔板内容,展示的内容

<template>
  <div style="margin: 0 auto;width: 100%">
    <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>
      <el-table-column label="书名" prop="book_name"></el-table-column>
      <el-table-column label="类型" prop="book_type"></el-table-column>
      <el-table-column label="价格" prop="book_prize"></el-table-column>
      <el-table-column label="作者" prop="book_author"></el-table-column>
      <el-table-column label="出版社" prop="book_publisher"></el-table-column>
      <el-table-column label="操作" align="right" 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>

2.2代码部分内容:

<script setup>
  import axios from "axios";
  import {reactive,ref,onMounted} from "vue";
  import {ElMessageBox}from 'element-plus'

  const books=reactive([])

  //请求后端数据,像后端请求数据
  const getStudent=()=>{
    axios.get("http://127.0.0.1:5000/books",).then(
        res=>{
          //删除旧的数据
          books.splice(0,books.length)
          //解压新的数据并且添加
          books.push(...res.data.results)
          console.log("更新数据")
        }
    )

  }

  //在页面上删除数据
  const handleDelete=(index,scope)=>{
    console.log(index,scope)
    axios.delete("http://127.0.0.1:5000/books/${scope.id}").then(

        ()=>{getStudent()}

    )
  }

  //页面加载完毕后再获取后台数据,生命周期的一个钩子函数
  onMounted(()=>{
    getStudent()
  })


</script>

三、展示界面

3.1后台启动:

3.2.前台运行

3.3界面展示--已经从后端获取了数据

 


 备注内容信息

3.4备注:---前端

 

前端APP.vue中所有代码

<script setup>
  import axios from "axios";
  import {reactive,ref,onMounted} from "vue";
  import {ElMessageBox}from 'element-plus'

  const books=reactive([])

  //请求后端数据,像后端请求数据
  const getStudent=()=>{
    axios.get("http://127.0.0.1:5000/books",).then(
        res=>{
          //删除旧的数据
          books.splice(0,books.length)
          //解压新的数据并且添加
          books.push(...res.data.results)
          console.log("更新数据")
        }
    )

  }

  //在页面上删除数据
  const handleDelete=(index,scope)=>{
    console.log(index,scope)
    axios.delete("http://127.0.0.1:5000/books/${scope.id}").then(

        ()=>{getStudent()}

    )
  }

  //页面加载完毕后再获取后台数据,生命周期的一个钩子函数
  onMounted(()=>{
    getStudent()
  })


</script>

<template>
  <div style="margin: 0 auto;width: 100%">
    <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>
      <el-table-column label="书名" prop="book_name"></el-table-column>
      <el-table-column label="类型" prop="book_type"></el-table-column>
      <el-table-column label="价格" prop="book_prize"></el-table-column>
      <el-table-column label="作者" prop="book_author"></el-table-column>
      <el-table-column label="出版社" prop="book_publisher"></el-table-column>
      <el-table-column label="操作" align="right" 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>

<style scoped>

</style>

 man.js代码

import {createApp, reactive} from 'vue'
import './style.css'
import App from './App.vue'


import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'




createApp(App).use(ElementPlus).mount('#app')
// createApp(App).mount('#app')

 

3.5后端所有代码--后端代码组织结构

 后端提供的接口代码:

extension.py
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS


db=SQLAlchemy()


#跨域请求的问题
cors=CORS()

# 所有的其他扩展 文件都是在这里编写

 models.py
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_price = db.Column(db.Float, nullable=False)
    author = db.Column(db.String(255))
    book_publisher=db.Column(db.String(255))



    # 初始化数据,制作数据
    @staticmethod
    def init_db():
        res=[
            (1,'001','猪儿八级天宫','小说',100,'猪八戒','xx出版'),
            (2,'002','孙悟空天宫','小说',000,'孙悟空','xx出版'),
        ]

        for ret in res:
            book=Book()
            book.id=ret[0]
            book.book_number=ret[1]
            book.book_name=ret[2]
            book.book_type=ret[3]
            book.book_price=ret[4]
            book.author=ret[5]
            book.book_publisher=ret[6]

            db.session.add(book)

        db.session.commit()

app.py

from flask import Flask,request
from flask.views import MethodView

from extension import db,cors
from  models import Book


app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///books.sqlite'
app.config['SQLAlCHEMY_TRACK_MODIFICATIONS']=False
db.init_app(app)
cors.init_app(app)



# api提供类
class BookApi(MethodView):
    def get(self,book_id):
        #没有传查询的参数,就是默认查询所有
        if not book_id:
            books:[Book]=Book.query.all()

            # 列表推导式,从books中取出数据分别赋值给book对象的不同字段,形成给book对象赋值过程
            results=[
                {
                 'id':book.id,
                 'book_name':book.book_name,
                 'book_type':book.book_type,
                 'book_price':book.book_price,
                 '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_price': book.book_price,
                'book_number': book.book_number,
                'book_publisher': book.book_publisher,
                'author': book.author,

            }

        }


    def post(self):
        # json上传数据的过程
        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_price=form.get('book_price')
        book.author=form.get('author')
        book.book_publisher=form.get('book_publisher')

        db.session.add(book)
        db.session.commit()

        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':'数据delete成功!'
        }

    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_price=request.json.get('book_price')
        book.book_number=request.json.get('book_number')
        book.book_publisher=request.json.get('book_publisher')
        book.author=request.json.get('author')
        db.session.commit()

        return {
            'status': 'success',
            'message': '数据update成功!'
        }



# api提供类的注册的连接,测试可以参考下面的url进行测试

book_view=BookApi.as_view('book_api')
app.add_url_rule('/books',defaults={'book_id':None},view_func=book_view,methods=['GET',])
app.add_url_rule('/books',view_func=book_view,methods=['POST',])
app.add_url_rule('/books/<int:book_id>',view_func=book_view,methods=['GET','PUT','DELETE'])






@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'


@app.route("/login")
def login():
    return "login"

#生成数据库文件,在程序目录下可以找bools。sqlite这个数据库
#然后再终端中运行‘flask create ’这个命令,就是可以最终生成数据库了
#如果提示报错,多生成几次

@app.cli.command()
def create():
    db.drop_all()
    db.create_all()
    Book.init_db()


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

023_SSS_Neural 3D Video Synthesis from Multi-view Video(CVPR2022)

Neural 3D Video Synthesis from Multi-view Video(CVPR2022) 本文提出了一种新的3D视频生成方法&#xff0c;这种方法能够以紧凑但富有表现力的表示形式表示动态真实世界场景的多视图视频记录&#xff0c;从而实现高质量的视图合成和运动插值。 1. Introduction 本文的主要…

百度地图 ( 一 ) 显示地图

1.百度地图 百度地图开放平台 https://lbsyun.baidu.com/ 使用百度地图时导入JavaScript包 <script type"text/javascript" src"http://api.map.baidu.com/api?v2.0&ak您的密钥"></script>1.1.如何申请 ak 密钥 在 开发平台 找 控制…

ChatGPT注册流程

1.访问官网点击 Sign up https://chat.openai.com/auth/login 2.输入你的邮箱 3.点击Continue下一步: 4.输入密码继续下一步&#xff1a; 5.然后你的邮箱会受到一封邮件&#xff08;如果没收到请检查垃圾邮箱&#xff09;&#xff1a; 6.点击验证邮箱按钮&#xff0c;会跳到…

MySQL 5.7中文乱码与远程链接问题

MySQL 5.7中文乱码与远程链接问题1. MySQL 5.7中文乱码2. 远程链接问题3. 不区分表大小写4. 超过最大连接数5. 时区问题5. GROUP BY 问题配置集合重启MySQL1. MySQL 5.7中文乱码 当我们直接在数据库里面输入中文时&#xff0c;保存后出现&#xff1a; Incorrect string value&…

LeetCode 第 244 场周赛题解

前言 这是 2021-06-06 的一场 LeetCode 周赛&#xff0c;本场周赛的题目相较而以往而言比较简单&#xff0c;基本上想到点上就可以做出来&#xff0c;主要涉及到矩阵的旋转、贪心、滑动窗口、前缀和、二分查找等知识点。 第 244 场周赛链接&#xff1a;https://leetcode-cn.c…

SpringBoot+Vue实现前后端分离的学校快递站点管理系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

机器人开发--雷达lidar

机器人开发--雷达lidar1 介绍2 分类2.1 整体分类2.2 机械式&#xff08;三角&ToF&#xff09;三角测距激光雷达ToF测距激光雷达3 机械式单线ToF激光雷达3.1 扫描原理3.2 不同材料反射率3.3 核心参数参考1 介绍 激光雷达&#xff08;英文&#xff1a;Laser Radar &#xff…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java制造类企业erp23725

面对老师五花八门的设计要求&#xff0c;首先自己要明确好自己的题目方向&#xff0c;并且与老师多多沟通&#xff0c;用什么编程语言&#xff0c;使用到什么数据库&#xff0c;确定好了&#xff0c;在开始着手毕业设计。 1&#xff1a;选择课题的第一选择就是尽量选择指导老师…

第十四周周报

学习目标&#xff1a; 一、论文“Vector Quantized Diffusion Model for Text-to-Image Synthesis”的Code 二、猫狗识别、人脸识别模型 学习内容&#xff1a; Code 学习时间&#xff1a; 12.4-12.9 学习产出&#xff1a; 一、论文Code 正向过程&#xff1a; 先通过Tam…

Python——学生管理系统

实现学生系统的增&#xff0c;删&#xff0c;查&#xff0c;打印所有学生功能&#xff0c;分别介绍使用列表存储和使用文件存储的代码 使用列表存储 import sys students []def menu():print("1. 新增学生")print("2. 显示学生")print("3. 查找学生…

【OpenCV学习】第10课:形态学操作的应用-图像去掉干扰线丶干扰点

仅自学做笔记用,后续有错误会更改 理论 去干扰线干扰点的操作方法&#xff0c; 大体上与第9课所说的提取水平/垂直线一致&#xff0c; 只是把核改为矩形&#xff0c; 不要线型就行&#xff0c;反正都是通过开操作来实行的。 操作流程&#xff1a; 输入图像&#xff08;一般是…

python数据分析:湖南省第七次人口普查可视化

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~ 今天案例难度指数: ☆☆☆ 准备 环境使用&#xff1a; Anaconda (python3.9) –> 识别我们写的代码 开发工具&#xff1a; jupyter notebook –> 代码编辑功能敲代码的工具 相关模块&#xff1a; pandas pyechart…

[附源码]计算机毕业设计基于Web的绿色环保网站Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

c# .net iot树莓派/香橙派用到物联网包Iot.Device.bindings 支持设备说明文档

c# .net iot树莓派&#xff08;进口&#xff0c;贵&#xff09;/香橙派&#xff08;国产&#xff0c;功能相同&#xff0c;性价比高&#xff09;用到物联网包Iot.Device.bindings 支持设备说明文档 我们c# .net iot开发树莓派/香橙派都需要用到Iot.Device.bindings、System.De…

RNA-seq 详细教程:假设检验和多重检验(8)

学习目标 了解模型拟合的过程比较两种假设检验方法&#xff08;Wald test vs. LRT&#xff09;了解多重测试校正的重要性了解用于多重测试校正的不同方法1. 模型拟合和假设检验 DESeq2 工作流程的最后一步是对每个基因进行计数并将其拟合到模型中并测试差异表达。 Hypothesis t…

osgEarth各个示例分析目录

概述 由于数字地球项目需要osgEarth的代码知识&#xff0c;故决定学习osgEarth的示例&#xff0c;示例中有很多可以借鉴的内容。以下是分析目录&#xff0c;完全是随机进行的&#xff0c;并没有什么上下文逻辑。 每一篇代码边学习边分析&#xff0c;如果有错误&#xff0c;请…

【Java面试】说说JVM的内存结构以及他们那些会产生内存溢出?

文章目录内存结构内存溢出的产生内存结构 对于JVM的内存结构&#xff0c;我将按照上面两张图配合来讲。 Java Source就是我们的Java源代码&#xff0c;经过JVM编译器编译之后变为Java Class也称Java字节码文件。当我们运行java命令对字节码文件进行运行的时候&#xff0c;将会…

深度学习-三维卷积神经网络(3DCNN)

1. 3DCNN理解 2D卷积仅仅考虑2D图片的空间信息&#xff0c;所以只适用于单张2D图片的视觉理解任务。在处理3D图像或视频时&#xff0c;网络的输入多了一个维度&#xff0c;输入由(c,height,width)(c,height,width)(c,height,width)变为了(c,depth,height,width)(c,depth,height…

计算机毕业设计django基于python学生考试成绩数据分析与可视化系统

项目介绍 随着社会的逐步发展,计算机网络技术对人们工作、生活影响是全面且深入的。基于计算机网络的管理系统越来越受到人们的欢迎,人们可以通过基于网络的管理系统进行实时数据信息查询、管理数据信息等,给人们的生活、工作带来便利。 在学校的日常管理工作中,学生成绩的统计…

【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)

需要源码或运行有问题请点赞关注收藏后评论区留言私信~~~ 一、imgaug简介 imguag使一个用于机器学习实验中图像增强的Python依赖库&#xff0c;支持Python2.7和Python3.4以上的版本&#xff0c;它支持多种图像增强技术&#xff0c;并允许轻松地组合这些技术&#xff0c;具有简…