【项目实训】falsk后端连接数据库以及与前端vue进行通信

falsk连接数据库

我们整个项目采用vue+flask+mysql的框架,之前已经搭建好了mysql数据库,现在要做的是使用flask连接到数据库并测试

安装flask

  • 首先安装flask

pip install flask

进行数据库连接

数据库连接需要使用到pymysql库以及flask库

连接数据库的函数如下:

class Database:
    # 设置数据库连接
    host='localhost'
    user='root'
    password = "123456"
    def __init__(self,db):
        connect=pymysql.connect(host=self.host,user=self.user,password=self.password,db=db)
        self.cursor = connect.cursor()
    # 执行sql语句
    def execute(self,command):
        try:
            # 执行command中的sql语句
            self.cursor.execute(command)
        except Exception as e:
            return e
        else:
            return self.cursor.fetchall()

其中包含了连接数据库以及执行sql语句,省去了每次执行sql语句重连数据库的麻烦

编写函数以测试是否连接成功数据库

可以使用以下代码,其中注意Database()中替换为自己的数据库名,sql查询语句根据自己情况编写

sql = Database("xmsx")
result = sql.execute(f"SELECT company FROM companyandjob WHERE job_name='{job}' ")
print(result)

vue与flask通信

前端vue部分

解决跨域问题:

  • 首先编写vue.config.js

设置target为自己的后端flask的接口:

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave:false,
})
// 跨域配置
module.exports = {
  devServer: {                //记住,别写错了devServer//设置本地默认端口  选填
    port: 8080,
    proxy: {                 //设置代理,必须填
      '/api': {              //设置拦截器  拦截器格式   斜杠+拦截器名字,名字可以自己定
        target: 'http://127.0.0.1:8085',     //代理的目标地址
        changeOrigin: true,              //是否设置同源,输入是的
        pathRewrite: {                   //路径重写
          '^/api': ''                     //选择忽略拦截器里面的内容
        }
      }
    }
  }
}
  • 其次编辑index.js(注意,这里是我们项目特有的,我们全局设置了axios,因此不用在每个vue中导入axios

设置baseUrl为后端flaskIP地址

  • 编写前端函数 

这里使用export const 是因为我们将所有的调用后端的函数写在了一个文件中,这样封装性较强,前端需要获取后端数据时调用这个函数即可

  • 在.vue文件中调用访问后端的函数

在methods中使用,并且由于改方法是异步操作,所以使用async声明,并且在异步调用函数的位置声明await,从而获得后端返回的数据。相应的展示在前端

后端flask部分

后端需要与vue通信,同时要与数据库连接,并且接受前端的参数,代码如下:

# 前端显示相应公司后端岗位的优秀面经
@app.route('/api/getExperienceWithOfset',methods=['POST'])
def showExperience():
    if request.method == "POST":
        company = request.json['company']
        # 如果之后添加”前端“岗位,则应前端再传递一个”岗位“信息,从而到数据库中查询相应的数据
        job = request.json['job']
        offset = request.json['offset']
    if request.method == "GET":
        company = request.args.get['company']
        job = request.json['job']
        offset = request.json['offset']
    # 创建Database类的对象sql,test为需要访问的数据库名字 具体可见Database类的构造函数
    sql = Database("xmsx")
    try:
        #执行sql语句 f+字符串的形式,可以在字符串里面以{}的形式加入变量名 结果保存在result数组中
        result = sql.execute(f"SELECT title,content FROM companyandexperience WHERE company='{company}' AND job='{job}' LIMIT 1 OFFSET {offset}")
    except Exception as e:
        return {'status':"error", 'message': "code error"}
    else:
        if not len(result) == 0:
            #返回查询结果,根据需要进行处理
            return {'status':'success','title':result[0][0],'content':result[0][1],}
        else:
            return {'status':'success','title':"无",'content':"空",}

这里我们处理成,接受前端的company,job,offset字段,然后在数据库中查询相应的记录并返回。offset的设置是为了可以在前端实现分页展示。

并且,为了防止频繁的发生error错误,我们设置,如果数据库中查询不到数据,则返回”空“,在前端添加逻辑判断,如果返回的数据内容为”空“则表示没有数据了,则不能再进行翻页操作,并且提示”暂时没有该信息“。

项目中编写的后端函数如下:

  • 根据公司和岗位查询公司要求信息
# 根据公司岗位,这里的岗位是模糊查询,即算法、数据等类别,查询出公司要求,公司职责或描述
@app.route('/api/getCompanyJobInformationWithOfset',methods=['POST'])
def showCompanyJobInformationWithOfset():
  • 根据公司和岗位查询公司优质面经
# 前端显示相应公司后端岗位的优秀面经
@app.route('/api/getExperienceWithOfset',methods=['POST'])
def showExperience():
  • 根据jieba分词统计得到的各公司的高频考点,从数据库中查询一些技术问题作为模拟面试问答
  •  

总结

综上,我们实现了vue+flask+mysql的整体框架。根据不同的前端展示需求,编写不同的后端代码及sql查询即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

原创作品—医疗行业软件界面UI、交互设计

在医疗行业大屏UI设计中,首要的是以用户为中心,深入理解医生、护士、管理层等用户群体的具体需求和工作流程。大屏设计应直观展示关键医疗数据、患者信息、设备状态等,确保用户能够迅速、准确地获取所需信息。同时,功能布局应合理…

字节豆包 MarsCode:AI 开发工具

MarsCode 是豆包旗下的智能编程助手,类似 GitHub Copilot 提供以智能代码补全为代表的核心能力,简单试用了下,免费,使用时需要手机号登录,代码补全还算 ok,聊天功能就有点差了。 还包括一个 AI 原生 IDE&am…

【Qt之·类QTableWidget】

系列文章目录 文章目录 前言一、常用属性二、成员函数2.1 左上角空白区域 三、实例演示总结 前言 一、常用属性 二、成员函数 方法描述selectRow选中行removeRow移除行insertRow插入行rowCount总行数 2.1 左上角空白区域 QTableCornerButton即不属于列表头,也不…

Vue移动端动态表单生成组件

FormCreate 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。支持6个UI框架,适配移动端,并且支持生成任何 Vue 组件。内置20种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定。 帮助文档 | 源码下载…

如何提取mac app中的应用程序图标 x.app图标位置

在macos系统中安装的应用程序 .app的图标都是 以 .icns结尾的,默认位于 .app应用程序包中的Contents/Resources/目录下,只要是在这个目录下的 .icns文件就是这个应用的图标,如:mac版微信的图标就是 /Applications/WeChat.app/Co…

【Java中导出Excel导出多个sheet页】

Java中导出Excel导出多个sheet页 序言如何处理多个sheet页的导出期间遇到了一个sheet页相关的问题,以及解决办法多sheet页导出遇到,第二个sheet页的标题名称会把第一个的覆盖的问题 结语 序言 在日常工作中经常有导出数据文件的需求,避免不了…

pcdn技术如何实现智能调度和负载均衡,以平衡网络负载和延迟?

PCDN技术实现智能调度和负载均衡,以平衡网络负载和延迟的操作,主要依赖于其主动调度、动态优化和负载均衡的工作原理,其二主要依赖于其在CDN的边缘节点上部署代理服务器的方式。以下是其实现过程:以下是具体的实现步骤&#xff1a…

【面试干货】final、finalize 和 finally 的区别

【面试干货】final、finalize 和 finally 的区别 1、final1.1 修饰类1.2 修饰方法1.3 修饰变量 2、finally3、finalize4、总结 💖The Begin💖点点关注,收藏不迷路💖 在Java编程语言中,final、finalize和finally都是关键…

【Unity】Timeline的倒播和修改速度(无需协程)

unity timeline倒播 一、核心: 通过playableDirector.playableGraph.GetRootPlayable(i).SetSpeed(speed)接口,设置PlayableDirector的速度。 二、playableGraph报空 若playableDirector不勾选Play On Awake,则默认没有PlayableGraph,需执行playableDirector…RebuildGr…

基于STM32的简易智能家居设计

一、项目功能概述 1、OLED显示温湿度、空气质量,并可以设置报警阈值 2、设置4个继电器开关,分别控制灯、空调、开关、风扇 3、设计一个离线语音识别系统,可以语音控制打开指定开关、并且可以显示识别命令词到OLED屏上 4、OLED实时显示&#…

仓颉编程语言全攻略:学习秘籍+内测资格申请秘籍!

仓颉官网简介 仓颉编程语言是一款面向全场景智能的新一代编程语言,主打原生智能化、天生全场景、高性能、强安全。融入鸿蒙生态,为开发者提供良好的编程体验。 官网直达:https://developer.huawei.com/consumer/cn/cangjie/ 华为开发者官网…

分文件编译

分文件编译 为什么分文件编译 防止主文件过大,不好修改,简化编译流程 编译 分文件编译代码需要将多个.c文件联合编译 功能函数格式.c #include "函数名.h" 函数 头文件格式.h #ifndef __文件名大写_H__ #define __文件名大写_H__ 功能函数…

关于WebSocket

WebSocket 与传统的 HTTP 协议对比 在实时通信领域,传统的 HTTP 协议存在以下一些问题: 频繁的请求和响应:每次通信都需要建立和关闭连接,带来额外的开销。高延迟:每次通信都需要经过多个网络层的传输,延…

“论模型驱动架构设计方法及其应用”写作框架,软考高级,系统架构设计师

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法,以模型构造、模型转换和精化为核心,提供了一套软件设计的指导规范。在模型驱动架构环境下,通过创建出机器可读和高度抽象的模型实现对不同问题域的描述,这些模型…

「Java开发指南」如何使用Spring注释器实现Spring控制器?(二)

本教程将引导您使用Spring Annotator实现Spring控制器,标准Java类被添加到搭建项目中,Spring Annotator Spring启用Java类。 虽然本教程的重点是Spring控制器,但是Spring Annotator也可以用于Spring服务、组件和存储库。在本教程中&#xff…

吴恩达机器学习作业ex5:正则化线性回归和偏差VS方差(Python实现)详细注释

文章目录 1.正则化线性回归1.1 可视化数据集1.2 正则化线性回归成本函数1.3 正则化线性回归梯度1.4 拟合线性回归 2 偏差-方差2.1 学习曲线 3.多项式回归3.1 学习多项式回归3.2 正则化参数的调整3.3 使用交叉验证集选择 λ3.4 计算测试集误差 1.正则化线性回归 在练习的前半部…

探索 JQuery EasyUI:构建简单易用的前端页面

介绍 当我们站在网页开发的浩瀚世界中,眼花缭乱的选择让我们难以抉择。而就在这纷繁复杂的技术海洋中,JQuery EasyUI 如一位指路明灯,为我们提供了一条清晰的航线。 1.1 什么是 JQuery EasyUI? JQuery EasyUI,简单来…

Xilinx FPGA:vivado实现串口的接收端

补充一些串口里用到的数值的相关知识点 接收端串口时序图: 程序设计: timescale 1ns / 1ps /串口接收端 串行转并行 module uart_rx(input sys_clk ,input rst_n ,input rx_data , //输入…

导出excel带图片

文章目录 前言一、根据图片路径转为图片总结 前言 列表数据导出,带图片,图片为 http://xxxxx/1.jpg 这种 如何处理图片就是重点 一、根据图片路径转为图片 废话不多说,直接上代码 书接上文: 通用导出 // 多个sheetfor (Sheet sheet : writer.getSheets()) {// 循环每一条数据…

构建网络图 (JavaScript)

前序:在工作中难免有一些千奇百怪的需求,如果你遇到构建网络图,或者学习应对未来,请看这边文章,本文以代码为主。 网络图是数据可视化中实用而有效的工具,特别适用于说明复杂系统内的关系和连接。这些图表…