文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python+Vue实现简单的前后端分离

2023-08-31 08:31

关注

准备工作

  1. 安装Node环境
  2. 安装Python环境

注意:项目整个过程需要从后往前,即先数据库->后端->前端;启动流程也是先启动后端项目,再启动前端项目
完整项目地址:地址

前端

开发工具:Visual Studio Code(推荐)、WebStorm

打开cmd,安装Vue脚手架,命令如下:

npm install -g @vue/cli

创建Vue2项目,名为vue-axios

vue create vue-axios

选择Manually select features进行创建,回车
在这里插入图片描述
目前只勾选Router,回车
在这里插入图片描述
选择2.x,回车
在这里插入图片描述
选择如下,回车,等待下载依赖
在这里插入图片描述
下载完成后,进入到项目内

cd vue-axios

安装axios库

npm install axios --save

安装Element UI库

npm i element-ui -S

在src下新建utils文件夹,将request.js放于src/utils/下,request.js是axios的二次封装,如下:

import axios from 'axios'const request = axios.create({    baseURL: 'http://127.0.0.1:666',  // 注意!! 这里是全局统一加上了 后端接口前缀 前缀,后端必须进行跨域配置!    timeout: 5000})// request 拦截器// 可以自请求发送前对请求做一些处理// 比如统一加token,对请求参数统一加密request.interceptors.request.use(config => {    config.headers['Content-Type'] = 'application/json;charset=utf-8';    // config.headers['token'] = user.token;  // 设置请求头    return config}, error => {    return Promise.reject(error)});// response 拦截器// 可以在接口响应后统一处理结果request.interceptors.response.use(    response => {        let res = response.data;        // 如果是返回的文件        if (response.config.responseType === 'blob') {            return res        }        // 兼容服务端返回的字符串数据        if (typeof res === 'string') {            res = res ? JSON.parse(res) : res        }        return res;    },    error => {        console.log('err' + error) // for debug        return Promise.reject(error)    })export default request

修改main.js,进行注册

import Vue from 'vue'import App from './App.vue'import router from './router'import request from "@/utils/request"import ElementUI from 'element-ui';import 'element-ui/lib/theme-chalk/index.css';// 关闭生产模式下的提示Vue.config.productionTip = false// 设置axios为Vue的原型属性Vue.prototype.$axios = requestVue.use(ElementUI);new Vue({  router,  render: function (h) { return h(App) }}).$mount('#app')

删除多余的组件,如在src/views和src/components下的vue组件;在src/views新建Home.vue组件:

修改App.vue,如下:

其中reset.css如下:

* {    margin: 0;    padding: 0;    box-sizing: border-box;}

修改src/router/index.js如下:

import Vue from 'vue'import VueRouter from 'vue-router'Vue.use(VueRouter)const routes = [  {    path: '/',    name: 'home',    component: () => import('@/views/Home.vue')  },]const router = new VueRouter({  mode: 'history',  base: process.env.BASE_URL,  routes})export default router

打开终端或cmd,输入如下命令启动项目

npm run serve

在浏览器输入http://localhost:8080/即可打开首页,默认查询全部数据,如下:
在这里插入图片描述
添加页面:
在这里插入图片描述
编辑页面:
在这里插入图片描述
删除页面:
在这里插入图片描述
基本的增删改查均已实现,全部采用接口请求的方式进行实现,在开发者工具的网络工具栏下,可以看到前端发送的请求,如下:
在这里插入图片描述
以及后端响应数据的预览结果:
在这里插入图片描述

后端

开发环境:PyCharm(推荐)、Visual Studio Code

打开cmd,安装flask库,命令如下:

pip install flask

安装flask_cors库,命令如下:

pip install flask_cors

安装pymysql库,命令如下:

pip install pymysql

创建Python项目,名为python-flask

新建json_response.py,统一json返回格式

# 统一的json返回格式class JsonResponse(object):    def __init__(self, code, msg, data):        self.code = code        self.msg = msg        self.data = data    # 指定一个类的方法为类方法,通常用self来传递当前类的实例--对象,cls传递当前类。    @classmethod    def success(cls, code=200, msg='success', data=None):        return cls(code, msg, data)    @classmethod    def fail(cls, code=400, msg='fail', data=None):        return cls(code, msg, data)    def to_dict(self):        return {            "code": self.code,            "msg": self.msg,            "data": self.data        }

新建json_flask.py,使flask支持返回JsonResponse对象

from flask import Flask, jsonifyfrom json_response import JsonResponseclass JsonFlask(Flask):    def make_response(self, rv):        # 视图函数可以直接返回: list、dict、None        if rv is None or isinstance(rv, (list, dict)):            rv = JsonResponse.success(rv)        if isinstance(rv, JsonResponse):            rv = jsonify(rv.to_dict())        return super().make_response(rv)

新建config.py,数据库操作

# 数据库操作类import pymysqlDB_CONFIG = {"host": "127.0.0.1","port": 3306,"user": "root","passwd": "123456","db": "test","charset": "utf8"}class SQLManager(object):# 初始化实例方法def __init__(self):self.conn = Noneself.cursor = Noneself.connect()# 连接数据库def connect(self):self.conn = pymysql.connect(host=DB_CONFIG["host"],port=DB_CONFIG["port"],user=DB_CONFIG["user"],passwd=DB_CONFIG["passwd"],db=DB_CONFIG["db"],charset=DB_CONFIG["charset"])self.cursor = self.conn.cursor(cursor=pymysql.cursors.DictCursor)# 查询多条数据def get_list(self, sql, args=None):self.cursor.execute(sql, args)return self.cursor.fetchall()# 查询单条数据def get_one(self, sql, args=None):self.cursor.execute(sql, args)return self.cursor.fetchone()# 执行单条SQL语句def modify(self, sql, args=None):row = self.cursor.execute(sql, args)self.conn.commit()return row > 0# 执行多条SQL语句def multi_modify(self, sql, args=None):rows = self.cursor.executemany(sql, args)self.conn.commit()return rows > 0# 关闭数据库cursor和连接def close(self):self.cursor.close()self.conn.close()

新建app.py,主程序

from flask import requestfrom flask_cors import *from json_flask import JsonFlaskfrom json_response import JsonResponsefrom config import *import json# 创建视图应用app = JsonFlask(__name__)# 解决跨域CORS(app, supports_credentials=True)db = SQLManager()# 编写视图函数,绑定路由@app.route("/all", methods=["GET"])  # 查询(全部)def all():    result = db.get_list(sql='select * from user')    return JsonResponse.success(msg='查询成功', data=result)@app.route("/add", methods=["POST"])  # 添加(单个)def add():    data = json.loads(request.data)  # 将json字符串转为dict    isOk = db.modify(sql='insert into user(name,age,sex) values(%s,%s,%s)',                      args=[data['name'], data['age'], data['sex']])    return JsonResponse.success(msg='添加成功') if isOk else JsonResponse.fail(msg='添加失败')@app.route("/update", methods=["PUT"])  # 修改(单个)def update():    data = json.loads(request.data)  # 将json字符串转为dict    if 'id' not in data:        return JsonResponse.fail(msg='需要传入id')    isOk = db.modify(sql='update user set name=%s,age=%s,sex=%s where id=%s',                      args=[data['name'], data['age'], data['sex'], data['id']])    return JsonResponse.success(msg='修改成功') if isOk else JsonResponse.fail(msg='修改失败')@app.route("/delete", methods=["DELETE"])  # 删除(单个)def delete():    if 'id' not in request.args:        return JsonResponse.fail(msg='需要传入id')    isOk = db.modify(sql='delete from user where id=%s', args=[request.args['id']])    return JsonResponse.success(msg='删除成功') if isOk else JsonResponse.fail(msg='删除失败')# 运行flask:默认是5000端口,此处设置端口为666if __name__ == '__main__':    app.run(host="0.0.0.0", port=666, debug=True)

启动项目。

数据库

采用MySQL,由于是小demo,此处设计较简单,数据库名为test,表名为user,表结构和数据SQL语句如下:

SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user`  (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(255) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL,  `age` int(11) NOT NULL,  `sex` varchar(255) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL,  PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = gbk COLLATE = gbk_chinese_ci ROW_FORMAT = Compact;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES (1, 'tom', 20, '男');INSERT INTO `user` VALUES (2, 'mary', 20, '女');INSERT INTO `user` VALUES (3, 'jack', 21, '男');INSERT INTO `user` VALUES (5, 'test', 20, '未知');INSERT INTO `user` VALUES (8, 'tom', 20, '男');INSERT INTO `user` VALUES (9, 'add', 20, '未知');INSERT INTO `user` VALUES (10, 'Saly', 11, '女');SET FOREIGN_KEY_CHECKS = 1;

来源地址:https://blog.csdn.net/qq_45917176/article/details/125421084

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯