Django之入门 CMDB系统 (五) 前后端分离之前端
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,Django之入门 CMDB系统 (五) 前后端分离之前端前言作者: 何全,github地址: https://github.com/hequan2017 QQ交流群: 620176501通过此教程完
千家信息网最后更新 2025年02月02日Django之入门 CMDB系统 (五) 前后端分离之前端
Django之入门 CMDB系统 (五) 前后端分离之前端
前言
作者: 何全,github地址: https://github.com/hequan2017 QQ交流群: 620176501
通过此教程完成从零入门,能够独立编写一个简单的CMDB系统。
目前主流的方法开发方式,分为2种:mvc 和 mvvc方式。本教程为 mvvc(前后端分离)的入门教程。
教程项目地址: https://github.com/hequan2017/panda/
教程文档地址: https://github.com/hequan2017/pandaAdmin
说明
- 架构框架选择
- vue (入门简单,自学可以跟着官网例子入门)
- d2Admin (基于element,样式外观好看,例子较多)
- 开发工具
- vs code
相较于react, vue入门更简单,基于模板语法,适合从mvc方式 循序渐进到 mvvc方式。
模板选择为 基于element的模板. iview现在已经转为收费方式,不太适合个人开发者练习使用。antd vue版本 没有合适的 admin模板,所以放弃了.
vue-element-admin 和 d2admin 差不多,资料文档都非常全。看个人选择。
demo
框架文档
vue
- https://cn.vuejs.org/v2/guide/
- axios ajax 发送请求 获取信息
- store 获取到的信息保存
- router 路由跳转
https://fairyever.com/d2-admin/doc/zh/ #具体模板详细 可以 看这个文档,非常详细
- 下载基础模板
git clone https://github.com/d2-projects/d2-admin-start-kit
├─.DS_Store ├─.browserslistrc ------------------- // 目标浏览器配置├─.env ------------------------------ // 基础环境变量配置├─.env.development ------------------ // 开发模式下的环境变量配置├─.env.netlify ---------------------- // Netlify 构建时的环境变量├─.env.nomock ----------------------- // 无 mock 数据构建模式下的环境变量├─.env.travis ----------------------- // Travis 构建时的环境变量├─.eslintignore --------------------- // ESLint 的忽略目录配置├─.eslintrc.js ---------------------- // ESLint 的配置文件├─.github --------------------------- // Github 配置│ └─ISSUE_TEMPLATE ------------------ // GitHub issue 模板├─.gitignore ------------------------ // git 的忽略配置├─.postc***c.js --------------------- // postcss 插件设置├─.travis.yml ----------------------- // Travis 配置文件├─LICENSE --------------------------- // 开源协议├─README.md ------------------------- // 介绍├─README.zh.md ---------------------- // 中文介绍 在码云仓库下自动加载这个文件├─babel.config.js ------------------- // babel 设置├─cdnrefresh-dirs.txt --------------- // 自动构建后在七牛 CDN 上刷新的目录├─d2-admin.babel -------------------- // 多国语设置软件 BabelEdit 的项目文件├─doc ------------------------------- // 文档素材│ └─image ├─jest.config.js -------------------- // 单元测试配置├─jsconfig.json --------------------- // 指定根文件和 JavaScript 语言服务提供的功能选项├─package-lock.json ----------------- // 锁定依赖版本├─package.json ---------------------- // 项目信息和依赖├─public ---------------------------- // 静态资源文件夹,不经过 webpack 处理│ ├─html ---------------------------- // 用于演示加载静态页面的资源│ ├─icon.ico ------------------------ // 网站图标│ ├─image │ │ ├─baidu-pan-logo.png │ │ ├─loading ----------------------- // index.html 使用的加载图标│ │ └─theme ------------------------- // 主题图片资源│ │ ├─d2 │ │ ├─line │ │ ├─star │ │ ├─tomorrow-night-blue │ │ └─violet │ ├─index.html ---------------------- // 网站的基础页面模板│ ├─lib ----------------------------- // 静态依赖│ │ └─UEditor ----------------------- // 编辑器│ └─markdown ------------------------ // 用于展示 Markdown 远程加载资源的文件├─qiniu-config ---------------------- // 用于构建展示网站的七牛设置├─qshell ---------------------------- // 七牛 SDK├─src ------------------------------- // 主要的代码目录│ ├─App.vue ------------------------- // 项目根组件│ ├─api ----------------------------- // 请求接口│ ├─assets -------------------------- // 资源文件夹│ │ ├─style ------------------------- // 样式资源│ │ │ ├─animate --------------------- // 页面过渡动画│ │ │ ├─fixed ----------------------- // 覆盖一些组件库的默认样式│ │ │ ├─public-class.scss ----------- // 导出可以直接使用的 class│ │ │ ├─public.scss ----------------- // 导出所有公用的 scss 资源│ │ │ ├─theme ----------------------- // 主题样式相关│ │ │ │ ├─d2 │ │ │ │ ├─line │ │ │ │ ├─register.scss ------------- // 注册所有主题样式│ │ │ │ ├─star │ │ │ │ ├─theme-base.scss ----------- // 每个主题共用的样式│ │ │ │ ├─theme.scss ---------------- // 每个主题特有的设置│ │ │ │ ├─tomorrow-night-blue │ │ │ │ └─violet │ │ │ └─unit ------------------------ // scss 的基础变量│ │ └─svg-icons --------------------- // svg 图标│ │ ├─icons ----------------------- // 用来存放图标的文件夹│ │ └─index.js -------------------- // 自动导入所有符合条件的图标│ ├─components ---------------------- // 组件│ │ ├─d2-container │ │ ├─d2-container-frame │ │ ├─d2-count-up │ │ ├─d2-highlight │ │ ├─d2-icon │ │ ├─d2-icon-select │ │ ├─d2-icon-svg │ │ ├─d2-icon-svg-select │ │ ├─d2-link-btn │ │ ├─d2-markdown │ │ ├─d2-mde │ │ ├─d2-module-index-banner │ │ ├─d2-module-index-menu │ │ ├─d2-quill │ │ ├─d2-ueditor │ │ ├─highlight-styles -------------- // 代码高亮样式│ │ └─index.js ---------------------- // 组件注册│ ├─i18n.js ------------------------- // 国际化配置│ ├─layout -------------------------- // 布局│ │ └─header-aside ------------------ // 具有顶栏加侧边栏的布局│ ├─libs ---------------------------- // 一些通用的方法│ │ ├─util.cookies.js │ │ ├─util.db.js │ │ ├─util.import.development.js ---- // 开发环境下使用的页面导入方法│ │ ├─util.import.production.js ----- // 开发环境下使用的页面导入方法│ │ ├─util.js │ │ └─util.log.js │ ├─locales ------------------------- // 国际化语言配置│ │ ├─en.json │ │ ├─ja.json │ │ ├─zh-chs.json │ │ └─zh-cht.json │ ├─main.js ------------------------- // 程序主入口│ ├─menu ---------------------------- // 静态的菜单数据│ │ ├─index.js │ │ └─modules │ │ ├─demo-business.js │ │ ├─demo-charts.js │ │ ├─demo-components.js │ │ ├─demo-d2-crud.js │ │ ├─demo-element.js │ │ ├─demo-frame.js │ │ ├─demo-playground.js │ │ └─demo-plugins.js │ ├─mock │ │ ├─api --------------------------- // 需要注册的接口│ │ ├─d2-mock ----------------------- // 简化接口注册的工具│ │ └─index.js ---------------------- // mock 数据自动注册│ ├─plugin -------------------------- // 插件│ │ ├─axios ------------------------- // 网络请求│ │ ├─d2admin ----------------------- // 统一注册系统必须的资源│ │ ├─error ------------------------- // 错误拦截│ │ ├─log --------------------------- // 日志│ │ └─open -------------------------- // 新窗口打开│ ├─router -------------------------- // 路由│ │ ├─index.js ---------------------- // 注册路由以及设置拦截规则│ │ ├─modules ----------------------- // 预先设置好的静态路由│ │ │ ├─business.js │ │ │ ├─charts.js │ │ │ ├─components.js │ │ │ ├─d2-crud.js │ │ │ ├─element.js │ │ │ ├─frame.js │ │ │ ├─playground.js │ │ │ └─plugins.js │ │ └─routes.js --------------------- // 导入所有路由│ ├─setting.js ---------------------- // 全局设置│ ├─store --------------------------- // vuex│ │ ├─index.js ---------------------- // vuex 注册主入口│ │ └─modules ----------------------- // 模块目录│ │ └─d2admin --------------------- // 系统自带模块,业务模块建议在同级新建│ │ ├─index.js ------------------ // 模块主入口│ │ └─modules ------------------- // 子模块│ │ ├─account.js -------------- // 用户身份│ │ ├─color.js ---------------- // 主题颜色│ │ ├─db.js ------------------- // 本地数据库│ │ ├─fullscreen.js ----------- // 全屏│ │ ├─gray.js ----------------- // 灰度模式│ │ ├─log.js ------------------ // 日志│ │ ├─menu.js ----------------- // 菜单│ │ ├─page.js ----------------- // 多页面控制│ │ ├─releases.js ------------- // 版本│ │ ├─search.js --------------- // 全局搜索│ │ ├─size.js ----------------- // 全局尺寸│ │ ├─theme.js ---------------- // 主题│ │ ├─transition.js ----------- // 过渡效果│ │ ├─ua.js ------------------- // 浏览器信息│ │ └─user.js ----------------- // 用户信息│ └─views --------------------------- // 页面视图│ ├─demo -------------------------- // 演示页面│ │ ├─business -------------------- // 业务页面演示│ │ │ ├─index │ │ │ ├─issues │ │ │ └─table │ │ ├─charts ---------------------- // 图表│ │ │ ├─index │ │ │ └─list │ │ │ ├─_data │ │ │ ├─_mixin │ │ │ ├─bar │ │ │ ├─candle │ │ │ ├─funnel │ │ │ ├─gauge │ │ │ ├─heatmap │ │ │ ├─histogram │ │ │ ├─line │ │ │ ├─map │ │ │ ├─pie │ │ │ ├─radar │ │ │ ├─ring │ │ │ ├─sankey │ │ │ ├─scatter │ │ │ ├─tree │ │ │ └─waterfall │ │ ├─components ------------------ // 内置组件演示│ │ │ ├─container │ │ │ ├─contextmenu │ │ │ ├─countup │ │ │ ├─editor-quill │ │ │ ├─editor-simpleMDE │ │ │ ├─editor-ueditor │ │ │ ├─highlight │ │ │ ├─icon │ │ │ ├─index │ │ │ ├─json-tree │ │ │ ├─layout │ │ │ └─markdown │ │ ├─d2-crud --------------------- // D2CRUD 表格封装演示│ │ ├─element --------------------- // Element UI 组件│ │ ├─frame ----------------------- // 嵌套第三方页面演示│ │ ├─playground ------------------ // 试验台│ │ │ ├─add-routes ---------------- // 动态添加路由│ │ │ ├─db ------------------------ // 数据持久化│ │ │ ├─env ----------------------- // 环境变量│ │ │ ├─index │ │ │ ├─locales ------------------- // 多国语│ │ │ ├─log ----------------------- // 日志│ │ │ ├─page-argu ----------------- // 页面参数│ │ │ ├─page-cache ---------------- // 页面缓存│ │ │ └─store --------------------- // 全局状态控制│ │ │ ├─fullscreen │ │ │ ├─gray │ │ │ ├─menu │ │ │ ├─page │ │ │ ├─size │ │ │ ├─theme │ │ │ ├─transition │ │ │ └─ua │ │ └─plugins --------------------- // 插件演示│ │ ├─better-scroll │ │ ├─clipboard-polyfill │ │ ├─day │ │ ├─export │ │ ├─import │ │ ├─index │ │ ├─js-cookie │ │ └─mock │ └─system ------------------------ // 系统页面│ ├─error │ ├─function │ │ ├─redirect ------------------ // 重定向│ │ └─refresh ------------------- // 刷新│ ├─index │ ├─log │ └─login ├─tests ----------------------------- // 单元测试├─tools │ └─vue-filename-injector ----------- // 用于对每个组件注入源代码位置的插件└─vue.config.js --------------------- // vue-cli3 的项目配置文件
登录部分
- src/modules/d2admin/modules/account.js #主要为 前端登录信息 状态 保存和读取
try { AccountLoginInfo(res.token) .then(resinfo => { const data = resinfo.data /* 获取后端用户信息*/ console.log(resinfo) dispatch( 'd2admin/user/set', { name: resinfo.name }, { root: true } ) resolve(data) }) .catch(err => { reject(err) }) } catch (error) { reject(error) }
- src/api/sys.login.js # 设置获取 token 和 info
import request from '@/plugin/axios'export function AccountLogin (data) { return request({ url: '/api/token', method: 'post', data })}export const AccountLoginInfo = token => { return request({ url: '/system/api/user_info', data: { token }, method: 'post' })}
- 登录token拦截设置 src\plugin\axios\index.js
// 请求拦截器service.interceptors.request.use( config => { // 在请求发送之前做一些处理 const token = util.cookies.get('token') // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改 // config.headers[''] = token if (token) { config.headers['Authorization'] = `token ${token}` } return config }, error => { // 发送失败 console.log(error) return Promise.reject(error) })
- 用户信息调用例子
import { mapState, mapActions } from 'vuex'export default { computed: { ...mapState('d2admin/user', [ 'info' ]) },/* info 为 上面保存的信息,这里可以在用户登录后 直接读取*/{{info.name ? `你好 ${info.name}` : '未登录'}}
增删改查例子
路由
- src/api/sys.login.js
import request from '@/plugin/axios'export const TestGetList = parameter => { return request({ url: `/system/test?${parameter}`, method: 'get' })}export const TestCreate = data => { return request({ url: '/system/test', data: data, method: 'post' })}export const TestGetInfo = id => { return request({ url: `/system/test/${id}`, method: 'get' })}export const TestUpdate = (id, data) => { return request({ url: `/system/test/${id}`, data: data, method: 'PUT' })}export const TestDelete = id => { return request({ url: `/system/test/${id}`, method: 'delete' })}
- src/asset/index.vue
演示页面 搜索
新增
- src/router/routers.js
const frameIn = [ { path: '/', redirect: { name: 'index' }, component: layoutHeaderAside, children: [ // 首页 { path: 'index', name: 'index', meta: { auth: true }, component: _import('system/index') }, // 演示页面 { path: 'asset', name: 'asset', meta: { title: '演示页面', auth: true }, component: _import('asset/index') }, { path: 'log', name: 'log', meta: { title: '前端日志', auth: true }, component: _import('system/log') }, // 刷新页面 必须保留 { path: 'refresh', name: 'refresh', hidden: true, component: _import('system/function/refresh') }, // 页面重定向 必须保留 { path: 'redirect/:route*', name: 'redirect', hidden: true, component: _import('system/function/redirect') } ] }]
部署
npm install
npm run dev
页面
信息
配置
文件
演示
模板
环境
资源
主题
变量
地址
样式
组件
路由
开发
系统
图标
教程
数据
文档
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发学习教程app
安卓调用db数据库
武宣天气预报软件开发
新软件开发方向
ios 网络安全解决方案
tcp服务器响应被拦截
从我做起网络安全
网络安全周标准
网络安全风险管理案例
炉石盒子服务器验证失败
校招软件开发面试官如何提问
南京一站网网络技术有限公司
网络安全讲座报告范文
更改数据库
2016软件开发就业
服务器夜视
网络安全法所指的数据处理包括
曙光服务器管理卡重启
ssh命令管理服务器网站
自动驾驶软件开发语言
jsp数据库录入
御龙在天第一个服务器
软件开发要不要入坑
保定哪个服务器好
2018年网络安全宣传资料
mongo数据库升级
常用网络安全设备
深圳市千寻网络技术
我所遇到过的网络安全问题
武汉职业技术学院网络安全开放日