当前位置:   article > 正文

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

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

falsk连接数据库

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

安装flask

  • 首先安装flask

pip install flask

进行数据库连接

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

连接数据库的函数如下:

  1. class Database:
  2. # 设置数据库连接
  3. host='localhost'
  4. user='root'
  5. password = "123456"
  6. def __init__(self,db):
  7. connect=pymysql.connect(host=self.host,user=self.user,password=self.password,db=db)
  8. self.cursor = connect.cursor()
  9. # 执行sql语句
  10. def execute(self,command):
  11. try:
  12. # 执行command中的sql语句
  13. self.cursor.execute(command)
  14. except Exception as e:
  15. return e
  16. else:
  17. return self.cursor.fetchall()

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

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

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

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

vue与flask通信

前端vue部分

解决跨域问题:

  • 首先编写vue.config.js

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

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

设置baseUrl为后端flaskIP地址

  • 编写前端函数 

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

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

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

后端flask部分

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

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

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

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

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

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

总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/770976
推荐阅读
相关标签
  

闽ICP备14008679号