Skip to content

Commit bafc3cb

Browse files
insistencegitee-org
authored andcommitted
!31 Dash-FastAPI-Admin v2.1.0
Merge pull request !31 from insistence/develop
2 parents 5b380a4 + 3f7d103 commit bafc3cb

27 files changed

+1125
-109
lines changed

README.md

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<p align="center">
22
<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png">
33
</p>
4-
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">Dash-FastAPI-Admin v2.0.1</h1>
4+
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">Dash-FastAPI-Admin v2.1.0</h1>
55
<h4 align="center">基于Dash+FastAPI前后端分离的纯Python快速开发框架</h4>
66
<p align="center">
77
<a href="https://gitee.com/insistence2022/dash-fastapi-admin/stargazers"><img src="https://gitee.com/insistence2022/dash-fastapi-admin/badge/star.svg?theme=dark"></a>
88
<a href="https://github.com/insistence/Dash-FastAPI-Admin"><img src="https://img.shields.io/github/stars/insistence/Dash-FastAPI-Admin?style=social"></a>
9-
<a href="https://gitee.com/insistence2022/dash-fastapi-admin"><img src="https://img.shields.io/badge/DashFastAPIAdmin-v2.0.1-brightgreen.svg"></a>
9+
<a href="https://gitee.com/insistence2022/dash-fastapi-admin"><img src="https://img.shields.io/badge/DashFastAPIAdmin-v2.1.0-brightgreen.svg"></a>
1010
<a href="https://gitee.com/insistence2022/dash-fastapi-admin/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
1111
<img src="https://img.shields.io/badge/python-≥3.9-blue">
1212
<img src="https://img.shields.io/badge/MySQL-≥5.7-blue">
@@ -17,7 +17,7 @@
1717
Dash-FastAPI-Admin是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
1818

1919
* 前端采用Dash、feffery-antd-components、feffery-utils-components。
20-
* 后端采用FastAPI、sqlalchemy、MySQL、Redis、OAuth2 & Jwt。
20+
* 后端采用FastAPI、sqlalchemy、MySQL(PostgreSQL)、Redis、OAuth2 & Jwt。
2121
* 权限认证使用OAuth2 & Jwt,支持多终端认证系统。
2222
* 支持加载动态权限菜单,多方式轻松权限控制。
2323
* Vue2版本:
@@ -105,8 +105,10 @@ git clone https://gitee.com/insistence2022/dash-fastapi-admin.git
105105
# 进入项目根目录
106106
cd dash-fastapi-admin
107107

108-
# 安装项目依赖环境
108+
# 如果使用的是MySQL数据库,请执行以下命令安装项目依赖环境
109109
pip3 install -r requirements.txt
110+
# 如果使用的是PostgreSQL数据库,请执行以下命令安装项目依赖环境
111+
pip3 install -r requirements-pg.txt
110112
```
111113

112114
### 开发
@@ -134,7 +136,7 @@ cd dash-fastapi-backend
134136

135137
# 运行sql文件
136138
1.新建数据库dash-fastapi(默认,可修改)
137-
2.使用命令或数据库连接工具运行sql文件夹下的dash-fastapi.sql
139+
2.如果使用的是MySQL数据库,使用命令或数据库连接工具运行sql文件夹下的dash-fastapi.sql;如果使用的是PostgreSQL数据库,使用命令或数据库连接工具运行sql文件夹下的dash-fastapi-pg.sql
138140

139141
# 运行后端
140142
python3 app.py --env=dev
@@ -193,7 +195,7 @@ cd dash-fastapi-backend
193195

194196
# 运行sql文件
195197
1.新建数据库dash-fastapi(默认,可修改)
196-
2.使用命令或数据库连接工具运行sql文件夹下的dash-fastapi.sql
198+
2.如果使用的是MySQL数据库,使用命令或数据库连接工具运行sql文件夹下的dash-fastapi.sql;如果使用的是PostgreSQL数据库,使用命令或数据库连接工具运行sql文件夹下的dash-fastapi-pg.sql
197199

198200
# 运行后端
199201
python3 app.py --env=prod
@@ -213,14 +215,14 @@ python3 app.py --env=prod
213215
如果有对本项目及FastAPI感兴趣的朋友,欢迎加入知识星球一起交流学习,让我们一起变得更强。如果你觉得这个项目帮助到了你,你可以请作者喝杯咖啡表示鼓励☕。扫描下面微信二维码添加微信备注DF-Admin即可进群,也欢迎大家加入dash大神费弗里的知识星球学习更多dash开发知识。
214216
<table>
215217
<tr>
216-
<td><img alt="zanzhu_wx" src="https://gitee.com/insistence2022/dash-fastapi-admin/raw/master/demo-pictures/zanzhu_wx.jpg"></td>
217-
<td><img alt="zanzhu_zfb" src="https://gitee.com/insistence2022/dash-fastapi-admin/raw/master/demo-pictures/zanzhu_zfb.jpg"></td>
218+
<td style="width: 50%"><img alt="zanzhu_wx" src="https://gitee.com/insistence2022/dash-fastapi-admin/raw/master/demo-pictures/zanzhu_wx.jpg"></td>
219+
<td style="width: 50%"><img alt="zanzhu_zfb" src="https://gitee.com/insistence2022/dash-fastapi-admin/raw/master/demo-pictures/zanzhu_zfb.jpg"></td>
218220
</tr>
219221
<tr>
220-
<td><img alt="zsxq" src="https://gitee.com/insistence2022/dash-fastapi-admin/raw/master/demo-pictures/zsxq.jpg"></td>
221-
<td><img alt="dashzsxq" src="https://gitee.com/insistence2022/dash-fastapi-admin/raw/master/demo-pictures/dashzsxq.jpg"></td>
222+
<td style="width: 50%"><img alt="zsxq" src="https://gitee.com/insistence2022/dash-fastapi-admin/raw/master/demo-pictures/zsxq.jpg"></td>
223+
<td style="width: 50%"><img alt="dashzsxq" src="https://gitee.com/insistence2022/dash-fastapi-admin/raw/master/demo-pictures/dashzsxq.jpg"></td>
222224
</tr>
223225
<tr>
224-
<td><img alt="wxcode" src="https://gitee.com/insistence2022/dash-fastapi-admin/raw/master/demo-pictures/wxcode.jpg"></td>
226+
<td style="width: 50%"><img alt="wxcode" src="https://gitee.com/insistence2022/dash-fastapi-admin/raw/master/demo-pictures/wxcode.jpg"></td>
225227
</tr>
226228
</table>

dash-fastapi-backend/.env.dev

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ APP_HOST = '0.0.0.0'
1010
# 应用端口
1111
APP_PORT = 9099
1212
# 应用版本
13-
APP_VERSION= '2.0.1'
13+
APP_VERSION= '2.1.0'
1414
# 应用是否开启热重载
1515
APP_RELOAD = true
1616
# 应用是否开启IP归属区域查询
@@ -30,6 +30,8 @@ JWT_REDIS_EXPIRE_MINUTES = 30
3030

3131

3232
# -------- 数据库配置 --------
33+
# 数据库类型,可选的有'mysql'、'postgresql',默认为'mysql'
34+
DB_TYPE = 'mysql'
3335
# 数据库主机
3436
DB_HOST = '127.0.0.1'
3537
# 数据库端口

dash-fastapi-backend/.env.prod

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ APP_HOST = '0.0.0.0'
1010
# 应用端口
1111
APP_PORT = 9099
1212
# 应用版本
13-
APP_VERSION= '2.0.1'
13+
APP_VERSION= '2.1.0'
1414
# 应用是否开启热重载
1515
APP_RELOAD = false
1616
# 应用是否开启IP归属区域查询
@@ -30,6 +30,8 @@ JWT_REDIS_EXPIRE_MINUTES = 30
3030

3131

3232
# -------- 数据库配置 --------
33+
# 数据库类型,可选的有'mysql'、'postgresql',默认为'mysql'
34+
DB_TYPE = 'mysql'
3335
# 数据库主机
3436
DB_HOST = '127.0.0.1'
3537
# 数据库端口

dash-fastapi-backend/config/database.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@
99
f'mysql+asyncmy://{DataBaseConfig.db_username}:{quote_plus(DataBaseConfig.db_password)}@'
1010
f'{DataBaseConfig.db_host}:{DataBaseConfig.db_port}/{DataBaseConfig.db_database}'
1111
)
12+
if DataBaseConfig.db_type == 'postgresql':
13+
ASYNC_SQLALCHEMY_DATABASE_URL = (
14+
f'postgresql+asyncpg://{DataBaseConfig.db_username}:{quote_plus(DataBaseConfig.db_password)}@'
15+
f'{DataBaseConfig.db_host}:{DataBaseConfig.db_port}/{DataBaseConfig.db_database}'
16+
)
1217

1318
async_engine = create_async_engine(
1419
ASYNC_SQLALCHEMY_DATABASE_URL,

dash-fastapi-backend/config/env.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from dotenv import load_dotenv
55
from functools import lru_cache
66
from pydantic_settings import BaseSettings
7+
from typing import Literal
78

89

910
class AppSettings(BaseSettings):
@@ -38,6 +39,7 @@ class DataBaseSettings(BaseSettings):
3839
数据库配置
3940
"""
4041

42+
db_type: Literal['mysql', 'postgresql'] = 'mysql'
4143
db_host: str = '127.0.0.1'
4244
db_port: int = 3306
4345
db_username: str = 'root'

dash-fastapi-backend/config/get_scheduler.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ def __find_recent_workday(cls, day: int):
8282
f'mysql+pymysql://{DataBaseConfig.db_username}:{quote_plus(DataBaseConfig.db_password)}@'
8383
f'{DataBaseConfig.db_host}:{DataBaseConfig.db_port}/{DataBaseConfig.db_database}'
8484
)
85+
if DataBaseConfig.db_type == 'postgresql':
86+
SQLALCHEMY_DATABASE_URL = (
87+
f'postgresql+psycopg2://{DataBaseConfig.db_username}:{quote_plus(DataBaseConfig.db_password)}@'
88+
f'{DataBaseConfig.db_host}:{DataBaseConfig.db_port}/{DataBaseConfig.db_database}'
89+
)
8590
engine = create_engine(
8691
SQLALCHEMY_DATABASE_URL,
8792
echo=DataBaseConfig.db_echo,

dash-fastapi-backend/module_admin/controller/user_controller.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from datetime import datetime
33
from fastapi import APIRouter, Depends, File, Form, Query, Request, UploadFile
44
from sqlalchemy.ext.asyncio import AsyncSession
5-
from typing import Optional, Union
5+
from typing import Literal, Optional, Union
66
from pydantic_validation_decorator import ValidateFields
77
from config.get_db import get_db
88
from config.env import UploadConfig
@@ -220,7 +220,7 @@ async def query_detail_system_user_profile(
220220
)
221221
async def query_detail_system_user(
222222
request: Request,
223-
user_id: Optional[Union[int, str]] = '',
223+
user_id: Optional[Union[int, Literal['']]] = '',
224224
query_db: AsyncSession = Depends(get_db),
225225
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
226226
data_scope_sql: str = Depends(GetDataScope('SysUser')),

dash-fastapi-backend/module_admin/dao/config_dao.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ async def get_config_list(cls, db: AsyncSession, query_object: ConfigPageQueryMo
7171
if query_object.begin_time and query_object.end_time
7272
else True,
7373
)
74+
.order_by(SysConfig.config_id)
7475
.distinct()
7576
)
7677
config_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)

dash-fastapi-backend/module_admin/dao/dict_dao.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ async def get_dict_type_list(cls, db: AsyncSession, query_object: DictTypePageQu
8484
if query_object.begin_time and query_object.end_time
8585
else True,
8686
)
87+
.order_by(SysDictType.dict_id)
8788
.distinct()
8889
)
8990
dict_type_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)

dash-fastapi-backend/module_admin/dao/job_dao.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ async def get_job_list(cls, db: AsyncSession, query_object: JobPageQueryModel, i
6969
SysJob.job_group == query_object.job_group if query_object.job_group else True,
7070
SysJob.status == query_object.status if query_object.status else True,
7171
)
72+
.order_by(SysJob.job_id)
7273
.distinct()
7374
)
7475
job_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)

0 commit comments

Comments
 (0)