初识FlaskMySQL实现前后端通信 全栈开发之路——后端篇(1)

全栈开发一条龙——前端篇
第一篇:框架确定、ide设置与项目创建
第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。
第三篇:setup语法,设置响应式数据。
第四篇:数据绑定、计算属性和watch监视
第五篇 : 组件间通信及知识补充
第六篇:生命周期和自定义hooks
第七篇:路由
第八篇:传参
第九篇:插槽,常用api和全局api。

从本篇开始,我们进入后端的学习,本篇将讲述flask的基本写法以及后端与数据库的互联和数据通信。

文章目录

  • 一、简介与库
  • 二、基本示范
    • 1.manager主页文件
    • 2.测试获取
    • 3.加入数据库
  • 三、数据库
    • 1.配置数据库
    • 2.查询数据库
    • 3.后端传输数据库数据给前端

一、简介与库

我们的后端选择Flask。
Flask是一个轻量级Web应用框架,适用于开发小型至中型的Web应用,有以下优点。

  1. 简单易学:Flask的API设计简洁明了,学习和上手容易。
  2. 轻量级灵活:核心功能精简。开发者可以根据需要选择适合自己项目的扩展,使得框架更加灵活。
  3. 易于扩展:Flask提供了丰富的扩展库,可以轻松集成常用的功能,如数据库访问、表单验证、身份认证等。
  4. 开发者可以根据需求选择适合自己项目的扩展,快速实现功能。
  5. 模板引擎支持:使得前后端分离更加方便。
  6. 多种数据库支持:如SQLite、MySQL、PostgreSQL等。
  7. 自动化测试:Flask提供了测试客户端和测试工具,方便开发者进行自动化测试。

要使用flask,先安装一下这几个flask相关库,版本不限。

二、基本示范

1.manager主页文件

我们打开python ide(pycharm/vscode等都行)
我们先创建manage.py文件(我的在social下),作为我们主页面的后端文件。

from flask import Flask,jsonify
from flask_cors import CORS

我们先导入库,jsonify将py数据转换为json数据,传给前端接口
CORS:跨域,因为有浏览器的同源策略,不同协议、域名、端口不能通信,我们要用cors来通信

app = Flask(__name__)
app.config["JSON_AS_ASCII"] = False

先建立对象,然后转码,老外跟我们用的不一样,不改会乱码,如果有中文你要加上。

CORS(app,cors_allowed_orgins = "*")

CORS配置跨域,*表示所有人

@app.route('/', methods=['GET'])
def index():
    res = {"msg" : "你好,这里是后端入口"}
    return jsonify(res)

以上代码是配置路由 ,/是首页 methods表示请求方式:get查 post增 delete删 put改


if __name__ == "__main__":
     app.run(debug=True, host = "0.0.0.0",port = 5000)

最后启动服务。
完整代码

from flask import Flask,jsonify
from flask_cors import CORS

app = Flask(__name__)

app.config["JSON_AS_ASCII"] = False
CORS(app,cors_allowed_orgins = "*")

@app.route('/', methods=['GET'])
def index():
    res = {"msg" : "你好,这里是后端入口"}
    return jsonify(res)

#启动flask

if __name__ == "__main__":
     app.run(debug=True, host = "0.0.0.0",port = 5000)
   # app.run(debug=True)

我们执行它

这样就成功了。上面哪个是本地访问的地址,后面那个是局域网访问地址,你手机如果和电脑是一个wifi,可以在浏览器输入尝试一下后面那个,可以收到数据。

注意,你这里最好用命令行cd到manager所在位置,使用python 文件运行服务,这样不会占有你ide的使用空间

2.测试获取

我们写一个test尝试获取一下上面写的manage接口

#接口测试
import requests

#发起http请求

class HttpApiTest:
    def test_get(self,url,data={}):
        res = requests.get(url=url , params=data)

        return res.text
    
if __name__ == "__main__":
    httpapi = HttpApiTest()
    res = httpapi.test_get("http://localhost:5000")
    res = res.encode('utf-8').decode('unicode_escape')
    print(res)


manage服务窗口显示以上内容,说明收到了请求

test处收到了数据,说明manage服务是有效的。

我们也可以加个传参试试
test:

 res = httpapi.test_get("http://localhost:5000",data={"id":"123"})

manage:

    id = request.args.get("id",None)
    print("id:"+id)


发现是成功的。

3.加入数据库

在social(与manage同级的文件夹)下再建立data文件,实例化数据库:

from flask_sqlalchemy import SQLAlchemy
import pymysql

pymysql.install_as_MySQLdb()

db = SQLAlchemy()

然后在manage中
RuntimeError: Either ‘SQLALCHEMY_DATABASE_URI’ or ‘SQLALCHEMY_BINDS’ must be set.
导入

#导入数据库
from data import db

配置数据库地址

app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:此处填你数据库的密码:写你的端口号/写你的数据库名字"

配置数据库自动提交

app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True

最后初始化操作,把配置好的app放进db就可以了。

db.init_app(app)

完成后重新启动manage服务

这么显示说明没问题。

三、数据库

1.配置数据库

我们要先下载MySQL,这个网上说明很多,而且因人而异,就不多说了,想要轻松下载,这里可以给出一条思路:先用XAMPP,可以一键下载mysql和tomcat等,然后下载Navicat来管理,我这里使用的是sql的原生管理系统,是英文的:MySQL Workbench。

我们通过Mysql的workbench进入,
点击
创建如下表单


然后我们右键user,点击第一个select rows limits 1000,在表格中输入内容
再点击apply,就能成功创建数据了。

2.查询数据库

我们再manage中加入

    userlist = db.session.execute( "select * from user" ).fetchall()
    print(userlist)

然后再让test发请求,试图看看userlist是什么样的,但遇到以下问题:


这是由于版本更新后语法不一样导致的,我们导入一个库

from sqlalchemy import text

然后把访问数据库改为:

  userlist = db.session.execute( text("select * from user") ).fetchall()

就好了,再次发请求,可以看到我们刚刚加入的内容。

3.后端传输数据库数据给前端

接下来,让我们建立接口,可以有效给前端传输数据库中的数据。
思路很简单,同样的,将userlist 给jsonify处理以下,然后发给后端,操作起来却问题重重。这里给出最后的解决方案以及思路讲解,具体困难在哪里请参考我写的debug日志,这里我们开始讲成功代码。

from flask import Flask,jsonify,request
from flask_cors import CORS
from sqlalchemy import text

#建立对象
app = Flask(__name__)

app.config["JSON_AS_ASCII"] = False
#导入数据库
from data import db
# 配置数据库
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:Aa289558916@localhost:3306/test_data"
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True
#初始化操作
db.init_app(app)

CORS(app,cors_allowed_orgins = "*")


def list_row2list_dic(list_row):  
    dic_temp = {}
    list_dic = []
    for x in list_row:
        listda = []
        listidx= []
        for dx in x:    
            listda.append(dx)
        xx = x._key_to_index        
        for idx in xx:
            listidx.append(idx)
        dic_temp=dict(zip(listidx,listda))
        list_dic.append(dic_temp)
    return list_dic

@app.route('/', methods=['GET'])
def index():
    res = {"msg" : "你好,这里是后端入口"}
    
    id = request.args.get("id",None)
    print("id:"+id)

    raw_userlist = db.session.execute( text("select * from user") ).fetchall()
    userlist = list_row2list_dic(raw_userlist)
    d2js={"data":userlist}
    return jsonify(d2js)


#启动flask

if __name__ == "__main__":
     app.run(debug=True, host = "0.0.0.0",port = 5000)

我们先将获取到的list转化为dict类型,然后把dict类型的数据再做成dict类型的列表,如下图所示

然后,我们给这个列表打上data的标签,送入jsonify,最后成果如图:

这样就是我们网站要的数据格式啦~

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

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

相关文章

拥有一台服务器可以做哪些有趣又实用的事情?

在接触云服务器这个概念你以前,你是不是在想: 可能是,云服务器,这个产品的存在,它可以为你做些什么实用的事情吗? 或者是,云服务器这个看似高大上的科技产品,其实可以为我们的生活…

AI智能体|手把手教你申请一个Kimi(Moonshot)的API KEY

大家好,我是无界生长。 今天分享一下如何申请一个Kimi(Moonshot)的API KEY,为后面Kimi(Moonshot)接入微信机器人做铺垫。学会了的话,欢迎分享转发! 前提 拥有一个Kimi(Moonshot)账号 使用手机号注册即可,新用户可免费…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑协变量因素的多能微电网两阶段分布鲁棒优化调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

ARM架构安全特性之标准安全 API

安全之安全(security)博客目录导读 目录 一、机密计算软件 二、Arm机密计算固件架构 三、认证校验 四、Veraison项目 五、独立于语言的安全API 六、平台抽象安全项目(Platform AbstRaction for SECurity project) 七、可移植平台安全API 八、…

黄仁勋炉边对话:创业的超能力与英伟达的加速计算之旅

在TiECon 2024大会上,英伟达的创始人兼CEO黄仁勋与风投公司Mayfield的管理合伙人纳文查德哈进行了一场深入的炉边对话。黄仁勋不仅分享了英伟达的创业故事,还谈到了他对创业和加速计算的深刻见解。下面是我对这次对话的总结,希望能给正在创业…

10.nginx模板(开启监控取值页面)

nginx模板(开启监控取值页面) 1.开启监控页面 vim nginx.conflocation /nginx_status {stub_status;} systemctl restart nginx.server网页展示 导入模板&#xff0c;nginx监控模板zbx_nginx_template.xml <?xml version"1.0" encoding"UTF-8"?…

高级查询(子查询)

可以使用的范围&#xff1a; 子查询是一个嵌套在SELECT、INSERT、UPDATE、DELETE语句或其他子查询中的查询。 任何允许使用表达式的地方都可以使用子查询。 子查询也称为内部查询或内部选择&#xff0c;而包含子查询的语句也称为外部查询或外部选择 子查询的特点和优势 可以…

(undone) 什么是马尔可夫链?Markov Chain

参考视频1&#xff1a;https://www.bilibili.com/video/BV1ko4y1P7Zv/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 参考视频2&#xff1a;https://www.bilibili.com/video/BV1xg4y1K7z4/?spm_id_from333.788&vd_source7a…

js前端获取农历日期

对于公历来说&#xff0c;直接 new 一个 Date 就能获取到&#xff0c;而对于农历来讲可就很难了&#xff0c;因为农历需要有许多复杂计算&#xff0c;虽然一般用的甚少&#xff0c;但对于某些场景来说还是会需要的&#xff0c;那么怎样获取农历日期呢&#xff1f; 这里推荐一个…

AI视频教程下载:基于OpenAl、LangChain、 Replicate开发AI应用程序

欢迎来到令人兴奋的 AI 应用世界&#xff01;在这门课程中&#xff0c;你将学习到创建一个能够与用户互动、理解自然语言、处理音频输入&#xff0c;甚至分析图像的真正智能应用所需的技能和技术。 AI 工具和技术 你将获得使用几个知名 AI API 和技术的实际经验。这些行业领先…

群晖NAS本地搭建Bitwarden密码管理服务并实现远程同步密码托管

文章目录 1. 拉取Bitwarden镜像2. 运行Bitwarden镜像3. 本地访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问Bitwarden7. 固定公网地址8. 浏览器密码托管设置 Bitwarden是一个密码管理器应用程序&#xff0c;适用于在多个设备和浏览器之间同步密码。自建密码管理软件bitwarde…

什么是Data Lakehouse Architecture(DLA)?企业为何要创建DLA

公司捕获和存储的数据比以往任何时候都多&#xff0c;因为它们依赖数据来做出关键的业务决策、改进服务或产品&#xff0c;或为最终用户&#xff08;客户&#xff09;提供更好的服务。了解各种大数据存储技术对于为商业智能&#xff08;BI&#xff09;、数据分析和机器学习&…

记录一次 vue2 前端项目整合过程

整合成功效果图 具体说明&#xff1a; 项目A是现在的vue2前端项目&#xff0c;项目B是一个开源的工作流前端&#xff0c;项目后端代码已经整合了&#xff0c;就不多提了。这里主要记录下前端整合的过程和思路。 1、开源工作流里面的功能&#xff0c;拷贝到自己对应的vue2项目里…

密探渗透工具v1.08测试版

目录 前言 免责声明 工具开发者: 工具项目地址: 1.作者做工具的缘起 2.功能介绍 3.工具的更新日志 4.安装与使用 4.1 工具下载 4.2 在jdk8环境下运行: 4.3 运行界面 4.4 资产测绘功能(fofa,鹰图和Quake) 4.5 指纹识别功能 ​编辑 4.6 敏感信息与接口扫描 4.7 文…

移动端自动化测试工具 Appium 之自定义报告

文章目录 一、背景二、具体实现1、保存结果实体2、工具类3、自定义报告监听类代码4、模板代码4.1、report.vm4.2、执行xml 三、总结 一、背景 自动化测试用例跑完后报告展示是体现咱们价值的一个地方咱们先看原始报告。 上面报告虽然麻雀虽小但五脏俱全&#xff0c;但是如果用…

更适合户外使用的开放式耳机,佩戴舒适音质悦耳,虹觅HOLME NEO体验

随着气温的逐渐升高&#xff0c;不管是在室内工作娱乐&#xff0c;还是到户外运动健身&#xff0c;戴上一款合适的耳机都会帮我们隔绝燥热与烦闷&#xff0c;享受音乐与生活。现在市面上的耳机类型特别多&#xff0c;我很喜欢那种分体式的开放耳机&#xff0c;感觉这种耳机设计…

C语言——模拟实现库函数atoi

1. atoi atoi&#xff1a;将字符串转换为整数。 1. 头文件 <string.h> 2. 声明&#xff1a; 1. 如果字符串开始有空格&#xff0c;直接跳过。 2. - 会影响打印的数字的正负。 3. 只打印数字字符&#xff0c;遇到非数字字符就停止。 4. 如果转换之后的数字大于 …

商城小程序系统与C#.net商城小程序系统源码_OctShop

在移动互联网与电商的时代&#xff0c;商城小程序系统已经成为了众多企业和商家开展电商业务的重要工具。OctShop将以商城小程序系统、C#商城小程序系统源码和.net 商城小程序系统为主题&#xff0c;探讨这些系统的特点和优势。 一、商城小程序系统是什么 商城小程序系统是一种…

嵌入式STM32中I2C控制器外设详解

STM32中的I2C外设主要负责IIC协议与外界进行通信,就像USART外设一样,我们在学习的过程中,需要抓住I2C应用的重点。 STM32在使用I2C协议时,可以通过两种方式, 一是软件模拟协议 意思是使用CPU直接控制通讯引脚的电平,产生出符合通讯协议标准的逻辑。例如,像点亮LED那样…

HTML静态网页成品作业(HTML+CSS)——动漫哆啦A梦网页(3个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有3个页面。 二、作品演示 三、代…