django admin simplepro教程
2024年7月4日大约 2 分钟约 677 字
SimplePro 文档
安装SimplePro包
- 目前测试的兼容最高django版本为4.1.13,高版本会导致表单选项为竖型排列。
requirements.txt
django==4.1.13
mysqlclient
django-import-export # docker打包可能不是最新版,这里需要单独放simplepro前面
simplepro
tablib[xlsx] # import-export xlsx 依赖
Pillow
conf/settings.py
from import_export.formats.base_formats import XLSX
INSTALLED_APPS = [
# simplepro配置
'simplepro',
'simpleui',
'import_export',
# ...
"bawa", # 新版好像不需要
]
# 配置安全秘钥
SIMPLEPRO_SECRET_KEY = '您的安全秘钥' # 登录到社区查看 https://www.noondot.com/my/orders
MIDDLEWARE = [
# ...
# 加入simplepro的中间件
'simplepro.middlewares.SimpleMiddleware'
]
# Simple Pro 配置
SIMPLEPRO_INFO = False # 关闭版权显示
SIMPLEUI_CONFIG = {
'system_keep': True, # 在自定义菜单的基础上保留系统模块
'dynamic': False,
}
# import_export 数据导入导出格式限时为xlsx
IMPORT_EXPORT_FORMATS = [XLSX]
conf/urls.py
urlpatterns = [
# ...
# 就加入这一句即可
path('sp/', include('simplepro.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
自定义 ueditor富文本插件图片上传
将图片上传交给django storage处理。
app_name/views
import os
from django.views.decorators.csrf import csrf_exempt
from django.views import View
from django.http import JsonResponse
from django.contrib.admin.views.decorators import staff_member_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.utils.decorators import method_decorator
from django.core.files.base import ContentFile
from django.core.files.storage import default_storage
@method_decorator(csrf_exempt, name='dispatch')
@method_decorator(staff_member_required, name='dispatch') # 要求登录
class EditorUploadView(LoginRequiredMixin, View):
"""SimplePro ueditor和model图片字段 图片上传接口。
将图片上传到OSS上。
"""
def post(self, request, *args, **kwargs):
# 检查请求中是否包含文件
# 'upfile是富文本插件上传的图片,file是admin 图片字段上传的图片'
if 'upfile' not in request.FILES and 'file' not in request.FILES:
return JsonResponse({'state': 'ERROR', 'message': 'No file uploaded'}, status=400)
# 获取上传的文件
uploaded_file = request.FILES.get('upfile') or request.FILES['file']
file_name = uploaded_file.name
file_path = 'news/' + file_name
# 保存文件到默认存储(例如:MEDIA_ROOT)
saved_path = default_storage.save(file_path, ContentFile(uploaded_file.read()))
file_url = default_storage.url(saved_path)
# 返回文件上传后的URL和其他信息
response_data = {
'success': 1, # 图片字段需要
'state': 'SUCCESS', # 上传状态 (富文本需要)
'message': '上传成功', # 图片字段需要
'name': os.path.basename(saved_path), # 文件保存后的名称
'original': file_name, # 上传的原始文件名
'size': uploaded_file.size, # 文件大小
'type': uploaded_file.content_type.split('/')[1], # 文件类型
'url': file_url # 文件URL (通用)
}
return JsonResponse(response_data)
conf/urls.py
from app_name.views import EditorUploadView
@csrf_exempt
def editor_upload_dispatch(request, *args, **kwargs):
"""simplePro 的ueditor图片上传接口分发。
仅拦截/sp/editor/upload的POST请求
"""
if request.method == 'POST':
return EditorUploadView.as_view()(request, *args, **kwargs)
# 如果不是POST请求,将请求转发到simplepro.urls中的视图
else:
simplepro_urls = include('simplepro.urls')
resolver = simplepro_urls[0]
UploadView = resolver.editor_views.UploadView
return UploadView.as_view()(request, *args, **kwargs)
urlpatterns = [
# ...
path(r'sp/editor/upload', editor_upload_dispatch, name='editor_upload'), # 重写ueditor图片上传接口
path('sp/', include('simplepro.urls')),
]
自定义按钮
type选项参数:primary / success / warning / danger / info / text
按钮图标列表:element-ui icon