当前位置: 首页 > news >正文

Vue+Flask电商后台管理系统

在这个项目中,我们将结合Vue.js前端框架和python后端框架Flask,打造一个功能强大、易于使用的电商后台管理系统

项目演示视频:

Vue+Flask项目

目录

前端环境(Vue.js):

后端环境(python-Flask):

页面登录效果

用户管理

角色列表

商品列表

分类列表

商品属性

订单列表

数据可视化展示


前端环境(Vue.js):

  1. Node.js和npm:Vue.js项目通常需要Node.js环境来运行,您可以在官网下载并安装Node.js,它会自带npm包管理器。

  2. Vue CLI:使用Vue CLI可以快速搭建Vue.js项目和管理项目依赖项,可以通过npm全局安装Vue CLI:npm install -g @vue/cli.

  3. 编辑器:推荐使用VS Code、Sublime Text等现代化编辑器来开发Vue.js项目,这些编辑器都有丰富的插件支持Vue.js开发。

  4. element-plus组件

后端环境(python-Flask):

  1. Python:Flask是基于Python的轻量级Web框架,因此您需要安装Python,并且推荐使用虚拟环境来管理项目的依赖项。

  2. Flask:使用pip安装Flask框架,可以通过以下命令进行安装:pip install flask.

  3. 数据库:如果项目需要数据库支持,您还需要安装相应的数据库系统(如MySQL、PostgreSQL等)以及对应的Python数据库驱动。

  4. 版本号
    python       3.10.5
    Flask             3.0.0
    Flask-Cors        3.0.10
    Flask-Migrate     4.0.0
    Flask-RESTful     0.3.9
    Flask-SQLAlchemy  3.0.2
    Jinja2            3.1.2
    PyMySQL           1.0.2

前端登录功能:

<template><!-- 写要显示的主体内容 --><div class="main"><div class="login"><div class="logo"><!-- <img src="../assets/logo1.png" alt=""> --><h1>后台管理系统</h1></div><!-- model 是 el-form 组件的一个属性,用于指定表单数据对象   rules用于表单验证 比如用户名没有超过多长提示用户名长度不够 或者不填写密码也弹出提示--><el-form :model="user" class="user_form" :rules="userRules" ref="userFormRef"><!-- prop是用来指定表单组件的数据模型对象的属性名  也就是说可以通过prop给定的值进行访问操作  当成立条件返回到这个标签 --><el-form-item prop="name"><!-- 定义user对象中的name属性  placeholder表示输入框里面的值 :prefix-icon表示图标 这里的User表示用户图标 --><el-input v-model="user.name" placeholder="用户名" :prefix-icon="User" /></el-form-item><!-- 密码 show-password表示密码框类型 输入时候值会使用**隐藏--><el-form-item prop="pwd"><el-input v-model="user.pwd" placeholder="密码" :prefix-icon="Lock" show-password /></el-form-item><!-- 登录按钮和重置按钮 --><el-form-item class="btns"><!-- type="primary"表示按钮颜色 默认为空白色 可前往https://element-plus.org/zh-CN/component/button.html 查看 --><el-button type="primary" @click="submitForm(userFormRef)">登录</el-button><!-- 当此按钮被点击时,会调用 resetForm 方法,并将 userFormRef 作为参数传递给该方法 --><el-button type="success" @click="resetForm(userFormRef)">清空</el-button></el-form-item></el-form></div></div>
</template><!-- setup表示vue3写法 -->
<script setup>// reactive 用于创建一个响应式的对象,而 ref 用于创建一个包装过的响应式对象
import { reactive, ref } from 'vue'//引入图标  比如输入框的用户图标  密码框的小锁图标  通过https://element-plus.org/zh-CN/component/icon.html可以进行查看图标名字 引入即可 使用prefix-icon属性即可
import { User, Lock } from '@element-plus/icons-vue'import api from '@/api/index.js'  //是导入了一个名为 api 的对象模块,该模块的路径来自 'api文件夹下面的index.js'import { useRouter } from 'vue-router' // 导入了路由对象,这个模块是 Vue.js 官方提供的用于获取路由对象的工具函数// 定义表单数据  如果填写的话 那就是输入框内默认的值
const user = reactive({name: 'admin',pwd: '12345'
})//定义表单验证规则  
const userRules = reactive({// 应用在prop值为name的标签上  name: [// required:表示字段是否为必填项,当设置为true时,表示该字段必须填写内容才能通过验证。如果用户未填写必填字段,表单将无法提交    //message:message用于定义验证规则不通过时显示的错误提示信息//trigger:表示触发验证的事件类型。常见的事件类型有blur(失去焦点时触发验证)、change(值改变时触发验证)和submit(表单提交时触发验证) 可前往 https://element-plus.org/zh-CN/component/form.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A0%A1%E9%AA%8C%E8%A7%84%E5%88%99 查看{ required: true, message: '用户名不能为空', trigger: 'blur' },{ min: 2, max: 11, message: '长度请在2到10个字符', trigger: 'blur' }],//应用在prop值为pwd的标签上  pwd: [{ required: true, message: '密码不能为空', trigger: 'blur' }]
})// ref 是一个函数,可以用来创建响应式的数据  userFormRef 是一个响应式的变量,用于引用一个表单组件对象。通过将表单组件对象赋值给 userFormRef,我们可以在组件中访问该表单组件,并对其进行操作
const userFormRef = ref(null)//重置表单  resetForm是el-button标签里面定义的方法 
const resetForm = () => {// 重置user对象里面的name和pwd值为空字符串  如果用户点击重置 用户名和密码输入框都会被清空   如果不想都被清空注释即可 user.name = '',user.pwd = ''
}// 创建路由对象   以在组件中使用各种路由相关的方法和属性,例如执行路由跳转、监听路由变化等
const router = useRouter()//登录校验
// 定义登录功能
const submitForm = (formRef) => {// formRef 是一个表单组件的引用,而 validate 是该表单组件提供的方法formRef.validate((valid) => {if (valid) {console.log('表单验证通过,可以提交!')//  使用api验证  使用api对象里面的getLogin方法api.getLogin(user).then(res => {console.log(res)//判断请求响应数据里面的data里面的status的值是否为200  如果是则执行以下代码if (res.data.status === 200) {// ElMessage 是 Element Plus UI 框架中的一个消息提示组件  可前往 https://element-plus.org/zh-CN/component/message.html#%E4%B8%8D%E5%90%8C%E7%8A%B6%E6%80%81 查看ElMessage({message: res.data.msg, //即从后端返回的消息内容type: 'success', //type 属性用来设置消息的类型,这里设置为 'success',表示成功类型的消息提示})//记录登录的token到本地会话空间  路由(routes下面的indexjs文件)可以获取记录的token值判断用户是否登录  登陆后就可以访问某页面 否则强制跳转登录页面   可以前往浏览器开发者工具里面的应用-里面的本地会话空间sessionStorage.setItem('token', res.data.token)sessionStorage.setItem('username', user.name); //将用户名存储在cookie里面// 跳转到主页router.push('/')//status状态码不为200 则执行以下代码} else {//ElMessage.error 方法来显示一个错误类型的消息提示ElMessage.error(res.data.msg)}})} else {console.log('验证失败')return false}})
}</script><!-- scoped表示只针对此view视图文件生效 -->
<style scoped>
.main {width: 100%;height: 100%;/* background-image: linear-gradient(to right, pink 30%, #00ffff);  */background-image: url('https://api.vvhan.com/api/bing');/* 居中 */display: flex;justify-content: center;align-items: center;
}.login {width: 450px;height: 300px;background-color: white;/* 边框圆角 */border-radius: 10px;}.logo {width: 200px;/* border: 1px solid #eee; */margin: 0 auto;margin-top: -45px;padding: 5px;border-radius: 5px;/* 图片边框发光 *//* box-shadow: 0 0 10px #ddd; */
}/* 文本标题 */
h1 {margin-top: 60px;width: 100%;height: 100%;
}/* log作为标题 */
img {width: 100%;height: 100%;
}/* 表单 */
.user_form {/* 内边距50px */padding: 50px;
}.btns {display: flex;/* 将登录框和输入框分为两部分 */justify-content: space-between;
}.btns button {/* 单独分为一个 */flex: 1;
}
</style>

后端登录view视图:


import re  #用于筛选用户输入的手机号码以及邮箱#导入flask_shop文件夹下的user包里面的user_bp变量
from flask_shop.user import user_bpfrom flask_shop import models,db  #数据库模型 也就是用户模型from flask import request #处理前端发送的请求对象from flask_restful import Resource,reqparse  #用于定义 API 资源。可以继承 Resource 类,并在子类中定义不同的 HTTP 方法(如 GET、POST、PUT、DELETE 等)对应的处理函数from flask_shop.user import user_api #继承bp蓝图from flask_shop.utils.token import generate_token,verify_token   #生成token和解密token#创建视图  因为是使用蓝图创建的视图 这里就是user的根视图 当用户访问ttp://127.0.0.1:5000/user/ 则由index函数处理
@user_bp.route('/')
def index():return 'hello user!'#登录视图  当我使用user_bp创建视图意味着该蓝图下的所有路由路径都会添加前缀/user   要访问这个接口所以是http://127.0.0.1:5000/user/login/
@user_bp.route('/login/',methods=['POST'])
def login():#获取用户传递过来的用户名name=request.get_json().get('name')#获取密码pwd=request.get_json().get('pwd')#判断传递是否完整if not all([name,pwd]):  #all接受两个值 查看是否为空 当有一个为flase他的结果就为flasereturn {'status': 400, 'msg': '参数不完整'}else:#通过用户名获取用户对象user = models.User.query.filter_by(name = name).first()#user = models.User.query.filter(name == name).first()  有bug 不管用户输入什么用户名 只要密码正确 都可以登录成功#判断用户是否存在if user:#判断密码是否正确if user.check_password(pwd):#生成tokentoken=generate_token({'id':user.id})return {'status': 200, 'msg': '登录成功!','token':token,'username': user.name}#这里也可以写个else#用户不存在返回用户名或密码错误!return {'status': 400, 'msg': '用户名或密码错误!'}

页面登录效果


密码错误:

密码正确,则会显示登录成功,生成token值,并存储在会话空间:

用户管理

包括用户的增删改查

角色列表

包括权限列表  比如不同的用户有对应的管理员权限 比如管理员1有用户管理和数据统计权限 管理员2有所有权限 这个权限指的是显示对应的菜单

商品列表

包括商品的增删改查

分类列表

包括添加分类

商品属性

包括添加属性功能

订单列表

包括订单的搜索、订单物流的查看等

数据可视化展示

相关文章:

Vue+Flask电商后台管理系统

在这个项目中&#xff0c;我们将结合Vue.js前端框架和python后端框架Flask&#xff0c;打造一个功能强大、易于使用的电商后台管理系统 项目演示视频&#xff1a; VueFlask项目 目录 前端环境&#xff08;Vue.js&#xff09;&#xff1a; 后端环境&#xff08;python-Flask&…...

SpringBoot保姆级入门文档

目录 1、SpringBoot的优点 2、和Spring、SpringMVC的对比 3、Xml 和 JavaConfig 1、SpringBoot的优点 2、和Spring、SpringMVC的对比 3、Xml 和 JavaConfig Spring 使用 Xml 作为容器配置文件&#xff0c;在 3.0 以后加入了 JavaConfig&#xff0c;使用 java 类做配置文件使…...

Springboot同一台服务器部署多个项目,导致redis混淆,如何根据不同项目区分

在Spring Boot应用中,如果在同一台服务器上部署了多个项目,并且每个项目都使用Redis作为缓存或存储,为了避免Redis数据混淆,你需要确保各个项目在访问Redis时使用不同的数据库索引号、键前缀或者连接配置。 以下是一些区分不同项目Redis数据的方法: 使用不同数据库索引:…...

redis启动错误

错误&#xff1a; Creating Server TCP listening socket 127.0.0.1:6379: bind: No error redis-server.exe redis.windows.conf redis-cli.exe shutdown auth "yourpassword"...

单片机烧录方式 -- IAP、ISP和ICP

目录 背景 1 什么是ICP 2 什么是ISP 3 什么是IAP 4 总结 背景 对于51单片机&#xff0c;我们使用STC-ISP上位机软件通过串口进行程序的烧写&#xff1b;对于STM32系列单片机&#xff0c;我们既可以通过串口烧写程序&#xff0c;也能通过JLink或是STLink进行程序的烧写&am…...

数据结构(C语言版)01

//顺序存储 int main(){ int ans[5]{1,1,1,1,3};//定义并初始化 printf("%d",ans[4]); return 0; } //链式存储 Typdef struct Lnode{ElemType data;struct Lnode *next; }Londe,*LinKlist;Londe *L; L(LinkList)malloc(sizeof(Lnode)); A->nextB;B->nextC;…...

Node.js-文件读取输入

Node.js-文件读取输入 fs模块&#xff08;操作文件的模块&#xff09; 读取 fs.readFile(path[, options], callback)&#xff1b;[]里面 是可选参数&#xff0c;表示以什么样的编码 格式读取path是路径callback表示读取完成后的回调函数 例子 fs.readFile (‘./files/11.txt…...

时隔一年的测评:gpt3.5发展到什么程度了?

名人说&#xff1a;一花独放不是春&#xff0c;百花齐放花满园。——《增广贤文》 作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、简要介绍1、chatgpt是什么&#xff1f;2、主要特点3、工作原理4、应用限制5、使…...

[RCTF2015]EasySQL1 题目分析与详解

一、题目介绍&#xff1a; 1、题目来源&#xff1a; BUUCTF网址 2、题目介绍&#xff1a; 拿到flag。 二、解题思路&#xff1a; 我们发现题目首页有登录和注册账号两个选项&#xff0c;我们首先尝试注册账号&#xff0c;尝试注册username为admin的账号&#xff0c;输入密码…...

开源的 Python 数据分析库Pandas 简介

阅读本文之前请参阅-----如何系统的自学python Pandas 是一个开源的 Python 数据分析库&#xff0c;它提供了高性能、易用的数据结构和数据分析工具。Pandas 特别适合处理表格数据&#xff0c;例如时间序列数据、异构数据等。以下是对 Pandas 的简明扼要的介绍&#xff0c;包括…...

LeetCode 2125.银行中的激光束数量

银行内部的防盗安全装置已经激活。给你一个下标从 0 开始的二进制字符串数组 bank &#xff0c;表示银行的平面图&#xff0c;这是一个大小为 m x n 的二维矩阵。 bank[i] 表示第 i 行的设备分布&#xff0c;由若干 ‘0’ 和若干 ‘1’ 组成。‘0’ 表示单元格是空的&#xff0…...

【探索AI】Sora - 探索AI视频模型的无限可能

Sora - 探索AI视频模型的无限可能 随着人工智能技术的飞速发展&#xff0c;AI视频模型已成为科技领域的新热点。而在这个浪潮中&#xff0c;OpenAI推出的首个AI视频模型Sora&#xff0c;以其卓越的性能和前瞻性的技术&#xff0c;引领着AI视频领域的创新发展。让我们将一起探讨…...

NGINX的重写与反向代理机制解析

目录 引言 一、重写功能 &#xff08;一&#xff09;if指令 1.判断访问使用的协议 2.判断文件 &#xff08;二&#xff09;return指令 1.设置返回状态码 2.返回指定内容 3.指定URL &#xff08;三&#xff09;set指令 1.手动输入变量值 2.调用其它变量值为自定义变…...

JVM的深入理解

1、JVM&#xff08;Java虚拟机&#xff09;&#xff1a;我们java编译时候&#xff0c;下通过把avac把.java文件转换成.class文件&#xff08;字节码文件&#xff09;&#xff0c;之后我们通过jvm把字节码文件转换成对应的cpu能识别的机器指令&#xff08;翻译官角色&#xff09…...

JavaWeb——007MYSQL(DQL多表设计)

# 数据库开发-MySQL 一级目录二级目录三级目录 1. 数据库操作-DQL1.1 介绍1.2 语法1.3 基本查询1.4 条件查询1.5 聚合函数1.6 分组查询1.7 排序查询1.8 分页查询1.9 案例1.9.1 案例一1.9.2 案例二 2. 多表设计2.1 一对多2.1.1 表设计2.1.2 外键约束 2.2 一对一2.3 多对多2.4 案…...

深度学习500问——Chapter01:数学基础

文章目录 前言 1.1 向量和矩阵 1.1.1 标量、向量、矩阵、张量之间的联系 1.1.2 张量与矩阵的区别 1.1.3 矩阵和向量相乘结果 1.1.4 向量和矩阵的范数归纳 1.1.5 如何判断一个矩阵为正定 1.2 导数和偏导数 1.2.1 导数偏导计算 1.2.2 导数和偏导数有什么区别 1.3 特征值和特征向量…...

day03_登录注销(前端接入登录,异常处理, 图片验证码,获取用户信息接口,退出功能)

文章目录 1. 前端接入登录1.1 修改前端代码1.2 跨域请求1.2.1 跨域请求简介1.2.2 COSR概述CORS简介CORS原理 1.2.3 CORS解决跨域 2. 异常处理2.1 提示空消息分析2.2 系统异常分类2.3 异常处理2.2.1 方案一2.2.2 方案二 3. 图片验证码3.1 图片验证码意义3.2 实现思路3.3 后端接口…...

k8s初始化报错 [ERROR CRI]: container runtime is not running: ......

一、环境参数 linux系统为centos7kubernetes版本为v1.28.2containerd版本为1.6.28 二、报错内容 执行初始化命令kubeadm init命令时报错&#xff0c;内容如下 error execution phase preflight: [preflight] Some fatal errors occurred:[ERROR CRI]: container runtime is…...

vscode windows 免密登录 powershell.sh

Linux 生成秘钥 ssh-keygenwindows powershell.sh $HOST_IP"zhang192.168.1.1" $PUBPATH"$HOME\.ssh\id_rsa.pub" $KEY(Get-Content "$PUBPATH" | Out-String); ssh "$HOST_IP" "mkdir -p ~/.ssh && chmod 700 ~/.ssh …...

10 种3D 建模技术

在本文中&#xff0c;我将列出 10 种不同类型的 3D 建模。也许可以了解下一个项目将走向何方&#xff0c;或者你可能会像我一样惊讶&#xff0c;究竟有多少 3D 被用作以多种方式进行可视化的工具。这些是我们将讨论和探索的建模类型&#xff1a; 盒子造型多边形建模Nurbs 和曲…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...