如何将Apache Superset作为应用集成至Django项目中?
将Superset集成到Django项目作为子应用的实现方案
前置准备
- 已完成Django项目搭建,Python版本建议3.8-3.10(匹配Superset 2.x的兼容要求)
- 安装Superset及依赖:
pip install apache-superset
核心配置步骤
1. 配置Django Settings
打开项目根目录下的settings.py,添加以下配置:
- 将Superset相关应用加入
INSTALLED_APPS:
INSTALLED_APPS = [ # 原有Django内置/自定义应用 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # Superset核心及依赖应用 'superset', 'django_celery_results', 'django_celery_beat', ]
- 配置数据库:Superset可复用Django现有数据库,或单独配置(示例为PostgreSQL):
# 复用Django数据库无需额外配置,若单独配置Superset数据库: SUPERSET_DB = { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'superset_db', 'USER': 'db_user', 'PASSWORD': 'db_password', 'HOST': 'localhost', 'PORT': '5432', }
- 配置静态文件目录:指定Superset静态文件路径,方便Django收集:
import os from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), # 替换pythonX.X为你的Python版本(如python3.9) os.path.join(BASE_DIR, 'venv/lib/pythonX.X/site-packages/superset/static'), ]
2. 挂载Superset路由到Django
打开项目根目录下的urls.py,将Superset的路由挂载到指定路径(如/superset/):
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), # 挂载Superset路由 path('superset/', include('superset.urls')), ]
3. 初始化Superset数据库
执行以下命令完成Superset的数据库初始化:
- 迁移Superset数据库表:
superset db upgrade
- 创建Superset管理员账号:
superset fab create-admin
- (可选)加载Superset示例数据:
superset load_examples
- 初始化Superset权限体系:
superset init
4. 整合Django与Superset用户认证
实现Django用户与Superset用户同步,避免重复登录:
- 在
settings.py中添加认证后端:
AUTHENTICATION_BACKENDS = [ 'django.contrib.auth.backends.ModelBackend', 'superset.security.SupersetBackend', ]
- 编写信号实现用户自动同步:在自定义应用下创建
signals.py:
from django.db.models.signals import post_save from django.contrib.auth.models import User from django.dispatch import receiver from superset.models.core import User as SupersetUser @receiver(post_save, sender=User) def sync_django_to_superset_user(sender, instance, created, **kwargs): if created: SupersetUser.objects.create( username=instance.username, email=instance.email, first_name=instance.first_name, last_name=instance.last_name, password=instance.password, active=True )
- 在应用的
apps.py中注册信号:
from django.apps import AppConfig class YourAppConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'your_app_name' def ready(self): import your_app_name.signals
注意事项
- 版本兼容性:优先选择Superset 2.x + Django 3.2/4.x组合,避免版本冲突
- 静态文件收集:生产环境必须执行
python manage.py collectstatic,将Superset静态文件统一收集到Django静态根目录 - Celery配置:Superset依赖Celery处理异步任务(如报表生成),需配置Celery及消息队列(Redis/RabbitMQ)
- 安全加固:生产环境启用HTTPS,通过Django的权限系统限制Superset路径的访问范围,避免未授权用户操作
内容的提问来源于stack exchange,提问作者Shamsan Mohammed
相关产品推荐
相关产品推荐

