Sadmin:打造私有Django公共库实现代码复用
我们借助于Django开发了许多的内部管理系统,例如之前介绍过的Probius、Kerrigan、Proxy等等,这些系统看起来长的都一样,但实际实现的功能确是千差万别,这些不同的系统为什么会长的一样呢?这不仅仅是因为它们使用了同一套前端模板,更为重要的是我们将很多大多系统都要用到的基础功能给集中在了一起,封装成了一个基础的Django应用,例如前端页面及常用插件、后端用户及权限管理等等,任何一个Django项目只要集成了这个应用就能快速拥有这些功能,不仅省去了大把的基础功能开发时间,而且对于后续的更新也是非常的友好
设计思路
因为各种各样的原因,我们没有办法把所有的功能都集中在一个系统里,必然会有多个系统的存在,而对于每个系统都有一些基础的功能要实现,例如用户管理、权限管理、日志记录等等,最初的时候我会copy已开发完成项目的基础代码到新项目使用,这样最为简单方便,但若有bug修复或功能更新,我就必须同时修改多个项目的代码,这不仅繁琐还容易出错,为了优化体验,我决定把所有的基础功能从项目中抽离出来,打包成公共应用供项目引用,这个公共应用我们就叫sadmin
打包主要借助setuptools来完成,打包完成后上传至私有仓库,应用服务器中直接通过pip来安装即可,简单方便
主要功能
Sadmin具体包含的功能主要有:
1.集成了基于adminLTE的前端模板,以及常用的前端组件,例如select2、datatables等
2.网站的标题、Title、主题等可后台配置

3.OpenId、LDAP等多种认证方式

4.后台配置菜单,并可根据不同权限显示不同菜单

5.用户、组、部门管理,用户的登录登出

6.自动记录操作日志

7.封装了对于数据库的增删改查
系统开发中会有大量关于数据库的增删改查操作,Django自带的Admin系统很好的实现了这块的功能,但admin后台不仅丑,对于很多稍微复杂点的需求都不好实现,所以我们直接放弃了自带的admin系统,为了方便的进行CRUD,我参考Django的ViewSet封装了两个方法ListCreateView和 RetrieveUpdateDestroyView来处理
以对Product表的增删改查为例,后端只需要短短的几行代码就行了
class ProductList(ListCreateView):
model = Product
template = 'workflow/product.index.html'
permission = {'get': 'loginuser', 'post': 'workflow.product_change'}
class ProductDetail(RetrieveUpdateDestroyView):
model = Product
permission = {'get': 'workflow.product_select', 'put': 'workflow.product_change',
'delete': 'workflow.product_delete'}
几行代码便可以让后端处理对数据库的增删改查,同时返回固定格式的json数据,而对于前端页面就没有太多的规范了,按照喜好怎么设计都可以

除了以上这些主要功能外,还集成了一些例如全站水印、通知发送、数据校验等等其他小功能
使用效果
有了Sadmin,我们在开发的过程中就不需要再来考虑这些基础的功能,更加专注于业务本身,效率提升明显,内部已有将近10个项目使用了Sadmin,运行稳定
Sadmin:打造私有Django公共库实现代码复用的更多相关文章
- JavaScript公共库event-stream被植入恶意代码
[安全预警]JavaScript公共库event-stream被植入恶意代码 2018年11月27日,阿里云云盾应急响应中心监测到JavaScript公共库event-stream被植入恶意代码,该恶 ...
- Django基础-004 上下文管理器&中间件&前端公共代码复用
一.上下文管理器 在views中重复使用的代码,可以在上下文管理器中实现 上下文管理器的处理流程如下: 1.先走完views里面的代码,将结果返回给前端 2.然后再将上下文的结果返回给前端 3.上下文 ...
- 基于微软开发平台构建和使用私有NuGet托管库
本篇blog包含使用TFS2017,VS2017等平台和工具搭建和使用NuGet库等基本过程,为团体提供更加自动化和高效的研发活动支持. 作为以产品线或者以专属业务为扩展的项目类型的软件研发团体,都会 ...
- CDN公共库、前端开发常用插件一览表(VendorPluginLib)
=======================================================================================前端CDN公共库===== ...
- Django 基础05篇 上下文管理和前端代码复用
一.上下文管理器 在views中重复使用的代码,可以通过上下文管理器(在setting.py文件中的TEMPLATES中配置)中实现,减少代码冗余 上下文管理器的处理流程如下: 1.先走完views里 ...
- 如何快速为团队打造自己的组件库(上)—— Element 源码架构
文章已收录到 github,欢迎 Watch 和 Star. 简介 详细讲解了 ElementUI 的源码架构,为下一步基于 ElementUI 打造团队自己的组件库打好坚实的基础. 如何快速为团队打 ...
- 前端CDN公共库
通过使用公共的CDN脚本和样式库,可以在一定程度上加速访问.节省服务器流量.提升你的网站用户体验.本文将介绍国内比较常用的几种免费的CDN库,包括百度.新浪.360.又拍和七牛等. 百度CDN公共库 ...
- 国内网站常用的一些 CDN 公共库加速服务
CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将JS库存放在服务器单机上相比,CDN公共库更加稳定.高速.一 般的CDN公共库都会包含全球所有最流行的开源JavaScri ...
- 盘点国内网站常用的一些 CDN 公共库加速服务
CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将JS库存放在服务器单机上相比,CDN公共库更加稳定.高速.一 般的CDN公共库都会包含全球所有最流行的开源JavaScri ...
随机推荐
- Arduino IDE 2.0 beta安装
1.在官网(Software | Arduino)下载安装包,此次提供操作系统有:Windows.Linux和macOC系统 2.点击安装包进行安装 3.点击我同意 4.点击下一步 5.选择安装路径( ...
- 学习 CLR 源码:连续内存块数据操作的性能优化
目录 C# 原语类型 1,利用 Buffer 优化数组性能 2,BinaryPrimitives 细粒度操作字节数组 提高代码安全性 3,BitConverter.MemoryMarshal 4,Ma ...
- 夏壹队——nabcd
我们团队项目名称是TD校园通,无课表查询你作为主要功能,是一个亮眼的功能. 我们的无课表查询功能主要解决大家平时上自习还要到教学楼拍照,教室课程情况也有断更的时候,而这个功能就解决大家的这个功能,能够 ...
- [刘阳Java]_Spring AOP基于XML配置介绍_第9讲
基于注解配置的Spring AOP固然简单,但是这节我们会给大家介绍基于XML配置的AOP是如何应用的.为什么这么说了,因为后面我们还会介绍到Spring对Dao操作的事务管理(基于AOP的XML文件 ...
- 【论文阅读】PRM-RL Long-range Robotic Navigation Tasks by Combining Reinforcement Learning and Sampling-based Planning
目录 摘要部分: I. Introduction II. Related Work III. Method **IMPORTANT PART A. RL agent training [第一步] B. ...
- Real DOM和 Virtual DOM 的区别?优缺点?
一.是什么 Real DOM,真实DOM, 意思为文档对象模型,是一个结构化文本的抽象,在页面渲染出的每一个结点都是一个真实DOM结构,如下: Virtual Dom,本质上是以 JavaScript ...
- 部署springboot时出现的问题
一.打包出现问题 后经发现是因为maven的打包插件的版本问题,需要修改版本 <plugins> <plugin> <groupId>org.springframe ...
- 如何使用odoo的compute方法,自动计算odoo字段
前言 在odoo的ORM创建数据字段的过程中,我们会经常需要定义一些字段用来计算某一些字段只和或其他计算结果. 今天介绍一个很好用的方法compute计算属性,这个方法其实是属于写在odoo fiel ...
- vue点击复制功能
复制功能,选中复制或者点击复制(不使用插件的情况下) 1.选中复制 这个比点击复制简单点 <template> <div> <el-button type=& ...
- 记录21.07.21 —— ES6基础
学习目录 课件地址: ES6核心技术课件 1.let关键字 1.1 let与var的区别 ①let不能重复定义 ②块作用域的区别 ③变量声明之前let不能使用,var可以 ④ 课件代码 <htm ...