我们借助于Django开发了许多的内部管理系统,例如之前介绍过的ProbiusKerriganProxy等等,这些系统看起来长的都一样,但实际实现的功能确是千差万别,这些不同的系统为什么会长的一样呢?这不仅仅是因为它们使用了同一套前端模板,更为重要的是我们将很多大多系统都要用到的基础功能给集中在了一起,封装成了一个基础的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公共库实现代码复用的更多相关文章

  1. JavaScript公共库event-stream被植入恶意代码

    [安全预警]JavaScript公共库event-stream被植入恶意代码 2018年11月27日,阿里云云盾应急响应中心监测到JavaScript公共库event-stream被植入恶意代码,该恶 ...

  2. Django基础-004 上下文管理器&中间件&前端公共代码复用

    一.上下文管理器 在views中重复使用的代码,可以在上下文管理器中实现 上下文管理器的处理流程如下: 1.先走完views里面的代码,将结果返回给前端 2.然后再将上下文的结果返回给前端 3.上下文 ...

  3. 基于微软开发平台构建和使用私有NuGet托管库

    本篇blog包含使用TFS2017,VS2017等平台和工具搭建和使用NuGet库等基本过程,为团体提供更加自动化和高效的研发活动支持. 作为以产品线或者以专属业务为扩展的项目类型的软件研发团体,都会 ...

  4. CDN公共库、前端开发常用插件一览表(VendorPluginLib)

    =======================================================================================前端CDN公共库===== ...

  5. Django 基础05篇 上下文管理和前端代码复用

    一.上下文管理器 在views中重复使用的代码,可以通过上下文管理器(在setting.py文件中的TEMPLATES中配置)中实现,减少代码冗余 上下文管理器的处理流程如下: 1.先走完views里 ...

  6. 如何快速为团队打造自己的组件库(上)—— Element 源码架构

    文章已收录到 github,欢迎 Watch 和 Star. 简介 详细讲解了 ElementUI 的源码架构,为下一步基于 ElementUI 打造团队自己的组件库打好坚实的基础. 如何快速为团队打 ...

  7. 前端CDN公共库

    通过使用公共的CDN脚本和样式库,可以在一定程度上加速访问.节省服务器流量.提升你的网站用户体验.本文将介绍国内比较常用的几种免费的CDN库,包括百度.新浪.360.又拍和七牛等. 百度CDN公共库 ...

  8. 国内网站常用的一些 CDN 公共库加速服务

    CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将JS库存放在服务器单机上相比,CDN公共库更加稳定.高速.一 般的CDN公共库都会包含全球所有最流行的开源JavaScri ...

  9. 盘点国内网站常用的一些 CDN 公共库加速服务

    CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将JS库存放在服务器单机上相比,CDN公共库更加稳定.高速.一 般的CDN公共库都会包含全球所有最流行的开源JavaScri ...

随机推荐

  1. 「CF85E」 Guard Towers

    「CF85E」 Guard Towers 模拟赛考了这题的加强版 然后我因为初值问题直接炸飞 题目大意: 给你二维平面上的 \(n\) 个整点,你需要将它们平均分成两组,使得每组内任意两点间的曼哈顿距 ...

  2. python 遍历字典中的键和值

    #遍历字典中的所有键和值 zd1={"姓名":"张三","年龄":20,"性别":"女"} zd2= ...

  3. 学生信息管理系统--基于jsp技术和MySQL的简单增删改查

    web实现增删改查的方式有很多啊,对于初学者来说当然是要先了解各部分的传值的方式.本篇博客从jsp技术的最基础方面进行说明. 一.什么是jsp技术 首先,我们要了解什么是jsp技术. jsp技术是基于 ...

  4. cisco 交换机 IOS命令

    1 显示交换机的MAC地址表 user mode : show mac-address-table

  5. PO封装设计模式 -- App移动端测试

    前言: 一.App_Po 封装 (用互联网上随便一个app进行) base 存放的是页面基础类,后续的类需继承基础类 common 存放的是公共部分,测试固件分离部分,新增截图功能部分 Data 存放 ...

  6. 【Lucas组合数定理】组合-FZU 2020

    组合 FZU-2020 题目描述 给出组合数C(n,m), 表示从n个元素中选出m个元素的方案数.例如C(5,2) = 10, C(4,2) = 6.可是当n,m比较大的时候,C(n,m)很大!于是x ...

  7. [蓝牙嗅探-Ubertooth One] 千元开源蓝牙抓包 Ubertooth One 安装和使用

    目录 前言 1.编译 Ubertooth tools 1.1.准备工作 1.2.编译安装 libbtbb 1.3.编译安装 Ubertooth tools 1.4.Wireshark 插件 1.5.更 ...

  8. c语言学习篇二【基础语法】

    一.定义常量: 使用 #define 预处理器. 使用 const 关键字. #include <stdio.h> int main() { const int LENGTH = 10;/ ...

  9. Typora PicGo Gitee博客写作好搭档

    利用Gitee仓库存放图片 1.首先在Gitee上创建一个公开的仓库,我这里创建了一个名叫resources的仓库: 2.在Gitee中获取私人令牌(个人设置界面中): 安装配置PicGo 1.下载自 ...

  10. Kubernetes安装报错总结

    1.kubeadm  init初使化报错 [root@k8s01 ~]# kubeadm  init --kubernetes-version=v1.13.3 --pod-network-cidr=1 ...