我们借助于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. Selenium启动Firefox示例(python版)

    目前做selenium自动化使用的主流语言分为java和python,前一篇为java版,本篇介绍python实现selenium启动Firefox. 1 #-*- coding:utf-8 -*- ...

  2. 公钥-私钥 白名单-黑名单 Linux 远程访问及控制(SSH)

    远程访问及控制一.SSH远程管理二.OpenSSH服务器① SSH (Secure Shell)协议② OpenSSH三.配置OpenSSH服务器举例四.sshd 服务支持两种验证方式五.使用SSH客 ...

  3. C语言:伪代码

    伪代码(Pseudocode)是一种算法描述语言.使用伪代码的目的是为了使被描述的算法可以容易地以任何一种编程语言(C, Java, Pascal)实现.因此,伪代码必须结构清晰,代码简单,可读性好, ...

  4. sync/fsync/fdatasync的简单比较

    此文主要转载自 http://blog.csdn.net/zbszhangbosen/article/details/7956558 官网上有关于MySQL的flush method的设置参数说明,但 ...

  5. Laravel使用artisan快速实现表单的登陆注册

    1. 开发环境 macOS Mojave 10.14.6 XAMPP 5.6.38 Laravel 5.2 2. 在终端,先进入到项目根目录并执行执行命令 php artisan make:auth ...

  6. mysql免安装版下载及安装教程

    第一步:下载 下载地址:http://dev.mysql.com/downloads/mysql/ 点击图中红色箭头Archives,可以下载自己想要的mysql版本,如图: 下载后解压,放在自己想要 ...

  7. [考试总结]noip模拟26

    首先看到这样中二的题目心头一震.... 然而发现又是没有部分分数的一天. 然而正解不会打.... 那还是得要打暴力. 但是这套题目有两个题目只有一个参数. 所以... (滑稽).jpg 然后我就成功用 ...

  8. vue el-table 调整 行间距

  9. 从零开始了解kubernetes

    kubernetes 已经成为容器编排领域的王者,它是基于容器的集群编排引擎,具备扩展集群.滚动升级回滚.弹性伸缩.自动治愈.服务发现等多种特性能力. 本文将带着大家快速了解 kubernetes , ...

  10. Django debug page XSS漏洞(CVE-2017-12794)

    影响版本:1.11.5之前的版本 访问http://your-ip:8000/create_user/?username=<script>alert(1)</script>创建 ...