新增了base分支,base分支只包括後端,其在master分支的後端基礎上進行了重新編寫,擁有更完善的權限控制、工作流引擎、運維管理、websocket支援並提供多種常用功能整合到utils中.
後製功能變動將以base分支為主,master分支只做相容性處理,具體可切換至base分支查看
基於RBAC模型權限控制的中小型應用的基礎開發平台,前後端分離,後端採用django+django-rest-framework,前端採用vue+ElementUI,行動端採用uniapp+uView(可發布h5和小程式).
JWT認證,可使用simple_history實作稽核功能,支援swagger
內建模組有組織機構使用者角色崗位資料字典檔案庫定時任務工作流程(已上傳大部分程式碼, 後端程式碼位於apps/wf)
使用工作流程建議資料庫用Postgresql, 下面的預覽環境因為是用的sqlite因此有些json查詢不支持, 使用方法可參考loonflow文檔基本上是一致, 主要是做了簡化
支援功能權限(控權到每個介面)及簡單的資料權限(全部、本級及以下、同級及以下、本人等)
歡迎提issue
預覽位址直接使用的runserver,帳號admin,密碼admin。請謹慎操作,勿修改密碼http://49.232.29.236:2222/
定位到server資料夾
建立虛擬環境python -m venv venv
啟動虛擬環境.venvscriptsactivate
安裝依賴pip install -r requirements.txt
複製server資料夾下的conf_e.py為conf.py 根據需要修改裡面的資料庫連線及DEBUG參數
同步資料庫python manage.py migrate
可匯入初始資料python manage.py loaddata db.json
或直接使用sqlite資料庫(超管帳號密碼皆為admin,每隔一段時間資料庫會重設)
建立超級管理員python manage.py createsuperuser
執行服務python manage.py runserver 8000
定位到client資料夾
安裝node.js
安裝依賴套件npm install --registry=https://registry.npmmirror.com
運行服務npm run dev
本地跑時修改nginx.conf,可顯示資源文件
listen 8012
location /media {
proxy_pass http://localhost:8000;
}
location / {
proxy_pass http://localhost:9528;
}
運行nginx.exe
打開localhost:8012即可訪問
介面文檔localhost:8000/api/swagger/
後台位址localhost:8000/django/admin/
部署時注意修改conf.py
可以前後端分開部署, nginx代理程式。也可打包之後將前端dist取代server/dist, 然後執行collectstatic
使用gunicorn啟動: 進入虛擬環境執行gunicorn -w 5 -b 0.0.0.0:2251 server.wsgi
如果需要webscoket還需要設定daphne啟動,可使用supervisor監控
Nginx設定可參考如下:
server {
listen 2250;
client_max_body_size 1024m;
location /media/ {
alias /home/lighthouse/xx/media/;
limit_rate 800k;
}
location / {
alias /home/lighthouse/xx/dist/;
index index.html;
}
location ~ ^/(api|django)/ {
set $CSRFTOKEN "";
if ($http_cookie ~* "CSRFTOKEN=(.+?)(?=;|$)") {
set $CSRFTOKEN "$1";
}
proxy_set_header X-CSRFToken $CSRFTOKEN;
proxy_pass http://localhost:2251;
proxy_pass_header Authorization;
proxy_pass_header WWW-Authenticate;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /ws/ {
proxy_pass http://localhost:2252;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
前端./client
和後端./server
目錄下都有Dockerfile,如果需要單獨建置映像,可以自行建置。
這裡主要說docker-compose啟動這種方式。
依照註解修改docker-compose.yml檔案。裡面主要有兩個服務,一個是backend
後端,一個是frontend
前端。
預設是用開發模式跑的後端和前端。如果需要單機部署,又想用docker-compose的話,改為生產模式效能會好些。
啟動
cd <path-to-your-project>
docker-compose up -d
啟動成功後,存取端口同前面的,接口8000端口,前端8012端口,如需改動,自己改docker-compose.yml
如果要執行裡面的指令docker-compose exec <服務名稱> <指令>
舉個栗子:
如果我要執行後端產生資料變更命令。 python manage.py makemigrations
則用如下語句
docker-compose exec backend python manage.py makemigrations
首先得會使用django-rest-framework, 來理解vue-element-admin前端方案
本專案採用前端路由,後端根據使用者角色讀取使用者權限代碼傳回前端,由前端進行載入(核心程式碼是路由表中的perms屬性以及checkpermission方法)
後端功能權限的核心程式碼在server/apps/system/permission.py下重寫了has_permission方法, 在APIView和ViewSet中定義perms權限代碼
資料權限因為跟具體業務有關,簡單定義了幾個規則,重寫了has_object_permission方法;根據需要使用即可
由於實際情況比較複雜,這裡建議根據不同情況自己寫drf的permission_class
使用celery以及django_celery_beat套件實現
需要安裝redis並在預設連接埠啟動, 並啟動worker以及beat
進入虛擬環境並啟動worker: celery -A server worker -l info -P eventlet
, linux系統不用加-P eventlet
進入虛擬環境並啟動beat: celery -A server beat -l info
工作流程模組參考loonflow的實作可查看其文件(邏輯一樣, 感謝loonflow) 目前大部分程式碼已上傳, 可查看swagger
願意交流的話可以加QQ群235665873 可以加微信群