Django提供了快捷的生成后台管理站点的能力。本应用旨在增强Django Admin的能力,提供丰富的Admin、Widget、ListFilter、Form等等界面扩展类,同时也为常用的数据管理模型提供完整的管理功能。
Project description
django-power-admin
Django提供了快捷的生成后台管理站点的能力。本应用旨在增强Django Admin的能力,提供丰富的Admin、Widget、ListFilter、Form等等界面扩展类,同时也为常用的数据管理模型提供完整的管理功能。
使用说明
- 依赖
django-middleware-global-request
,请参考django-middleware-global-request文档。 - 依赖
django_static_fontawesome
,请参考django_static_fontawesome文档。 - 依赖
django_static_jquery_ui
,请参考django_static_jquery_ui文档。 - 推荐使用
django-app-requires
解决包依赖问题,请参考django-app-requires文档。
功能扩展清单
Admin后台管理界面整体控制
主要功能 |
---|
@todo 定制化的登录界面 |
@todo 登录框增加图形验证码 |
@todo 登录后增加短信验证 |
@todo 顶部导航 |
@todo 左侧导航 |
@todo 首页控制面板 |
@todo 应用模块级控制面板 |
@todo 用户中心子站 |
@todo 中国风的组织架构管理和用户管理 |
PowerAdmin核心功能
类名 | 主要功能 |
---|---|
ChangelistToolbar机制 | 提供列表页顶部按钮自定义功能 |
ChangelistObjectToolbar机制 | 提供列表页行按钮自定义功能 |
Extra View机制 | 提供添加额外视图函数的功能 |
View Hook机制 | 提供pre_xxx_view,post_xxx_view的Hook机制, 方便用户在进入视图前执行准备或清除工作 |
Extra Context机制 | 为视图渲染注入额外的模板context机制。ChangelistToolbar机制 就是通过本机制注入额外的按钮列表数据的。 |
Read & Change机制 | 设置只读、编辑两个不同的入口。这样现符合用户的操作习惯。 |
Simple Export机制 | 数据导出机制, 默认即可导出所有表字段, 同时支持EXCEL模板配置、表头控制、字段配置等等。 |
排序记录上下移动机制 | 每行记录上有上移&下移按钮, 通过点击上下移动按钮调整记录的排序。 |
ListFilter Media机制 | 允许自定义的ListFilter类, 通过添加 class Media: 来引入额外的js/css文件。 |
Admin辅助函数
函数名 | 主要功能 |
---|---|
add_extra_css | 为当前页添加额外的css代码段 |
add_extra_js | 为当前页添加额外的js代码段 |
Widget扩展类
类名 | 主要功能 |
---|---|
Select2 | 将标准select下拉框转为select2样式下拉框 |
SelectMultiple2 | 将标准select复选框转为select2样式下拉式复选框 |
ConfigTable | 健值对配置项编辑控件 数据json序列化后保存在TextField中 |
PopupConfigTable | 弹出式健值对配置项编辑控件 数据json序列化后保存在TextField中 |
AllUsersSelect | 用户选择控件,使用Select2实现 提供用户信息模糊搜索功能 不需要用户模块管理权限 |
@todo PasswordResetableWidget |
密码重置字段(只重置,不显示) |
Field扩展类
类名 | 主要功能 |
---|---|
MPTTModelChoiceField | MPTT数据模型中的Parent字段关联的表单字段, 使用Select2样式控件。 建议在MPTTAdminForm中使用 |
ModelChoiceFieldWithLabelProperty | 标准ModelChoiceField的扩展, 支持使用自定义的标签函数 |
Form扩展类
ListFilter扩展类
类名 | 主要功能 |
---|---|
TextInputFieldFilter | 使用文本框的过滤条件。 |
DateRangeFilter | 日期区间过滤条件。 |
使用方法说明
django_power_admin的引入
pro/settings.py
INSTALLED_APPS = [
...
'django_middleware_global_request',
'django_static_fontawesome',
'django_static_jquery_ui',
'django_simple_tags',
'django_power_admin',
...
]
MIDDLEWARE = [
...
'django_middleware_global_request.middleware.GlobalRequestMiddleware',
...
]
django_power_admin.admin.PowerAdmin排序记录上下移动机制
django_power_admin.admin.PowerAdmin排序记录上下移动机制效果图
django_power_admin.admin.PowerAdmin排序记录上下移动机制使用方法
models.py
class SortableAdminExmapleModel(models.Model):
title = models.CharField(max_length=64, verbose_name="Title")
display_order = models.IntegerField(null=True, blank=True, verbose_name="Display Order")
class Meta:
verbose_name = "排序演示"
verbose_name_plural = "排序演示"
def __str__(self):
return str(self.pk)
admin.py
from django.contrib import admin
from django_power_admin.admin import PowerAdmin
from .models import SortableAdminExmapleModel
class SortableAdminExmapleModelAdmin(PowerAdmin):
list_display = ["title"]
ordering = ["display_order"]
changelist_object_toolbar_buttons = [
"django_power_admin_move_up",
"django_power_admin_move_down",
"read_button",
"change_button",
"delete_button",
]
admin.site.register(SortableAdminExmapleModel, SortableAdminExmapleModelAdmin)
django_power_admin.widgets.Select2
django_power_admin.widgets.Select2效果预览图
django_power_admin.widgets.Select2使用方法
models.py
from django.db import models
class Select2ExampleCategory(models.Model):
name = models.CharField(max_length=64, verbose_name="Name")
class Meta:
verbose_name = "Category"
verbose_name_plural = "Categories"
def __str__(self):
return self.name
class Select2ExampleModel(models.Model):
title = models.CharField(max_length=64, verbose_name="Title")
category = models.ForeignKey(Select2ExampleCategory, on_delete=models.CASCADE, verbose_name="Category")
class Meta:
verbose_name = "可搜索下拉框演示"
verbose_name_plural = "可搜索下拉框演示"
def __str__(self):
return self.title
admin.py
from django import forms
from django.contrib import admin
from django_power_admin.widgets import Select2
from .models import Select2ExampleCategory
from .models import Select2ExampleModel
class Select2ExampleCategoryAdmin(admin.ModelAdmin):
list_display = ["name"]
class Select2ExampleModelForm(forms.ModelForm):
class Meta:
widgets = {
"category": Select2(),
}
class Select2ExampleModelAdmin(admin.ModelAdmin):
form = Select2ExampleModelForm
list_display = ["title"]
admin.site.register(Select2ExampleCategory, Select2ExampleCategoryAdmin)
admin.site.register(Select2ExampleModel, Select2ExampleModelAdmin)
django_power_admin.widgets.ConfigTable
django_power_admin.widgets.ConfigTable效果预览图
django_power_admin.widgets.ConfigTable使用方法
models.py
from django.db import models
class ConfigTableExampleModel(models.Model):
config = models.TextField(null=True, blank=True, verbose_name="配置")
class Meta:
verbose_name = "配置表控件演示"
verbose_name_plural = "配置表控件演示"
def __str__(self):
return str(self.pk)
admin.py
from django import forms
from django.contrib import admin
from django_power_admin.widgets import ConfigTable
class ConfigTableExampleModelForm(forms.ModelForm):
class Meta:
widgets = {
"config": ConfigTable(),
}
class ConfigTableExampleModelAdmin(admin.ModelAdmin):
form = ConfigTableExampleModelForm
admin.site.register(ConfigTableExampleModel, ConfigTableExampleModelAdmin)
django_power_admin.widgets.AllUsersSelect
django_power_admin.widgets.AllUsersSelect预览效果
django_power_admin.widgets.AllUsersSelect使用方法
models.py
from django.db import models
class Project(models.Model):
owner = models.ForeignKey(global_settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True, related_name="+", verbose_name=_("Owner"))
class Meta:
verbose_name = "Project"
verbose_name_plural = "Projects"
def __str__(self):
return str(self.pk)
admin.py
from django import forms
from django.contrib import admin
from django_power_admin.widgets import AllUsersSelect
from .models import Project
class ProjectForm(forms.ModelForm):
class Meta:
widgets = {
"owner": AllUsersSelect(),
}
class ProjectAdmin(admin.ModelAdmin):
form = ProjectForm
admin.site.register(Project, ProjectAdmin)
django_power_admin.widgets.TextInputFieldFilter
django_power_admin.filters.TextInputFieldFilter预览效果
django_power_admin.filters.TextInputFieldFilter使用方法
from django.contrib import admin
from django_power_admin.filters import TextInputFieldFilter
class ExampleAdmin(admin.ModelAdmin):
list_filter = [
("title", TextInputFieldFilter),
"description",
"enable",
]
list_display = ["title", "description", "enable"]
django_power_admin.filters.TextInputFieldFilter实现原理
使用了django_power_admin引入的ListFilter Media机制,
通过在类内部定义class Media
,
导入ListFilter需要使用到的js/css文件,
导入的js文件,可以按django标准media文件引入机制进行自动化的去重和依赖排序。
from django.contrib.admin import FieldListFilter
class TextInputFieldFilter(FieldListFilter):
template = 'django_power_admin/filters/TextInputFieldFilter.html'
...
class Media:
css = {
"all": [
"django_power_admin/filters/TextInputFieldFilter/css/TextInputFieldFilter.css",
]
}
js = [
"django_power_admin/assets/js/parseParam.js",
"admin/js/vendor/jquery/jquery.js",
"django_power_admin/filters/TextInputFieldFilter/js/TextInputFieldFilter.js",
"admin/js/jquery.init.js",
]
django_power_admin.filters.DateRangeFilter
django_power_admin.filters.DateRangeFilter效果预览
django_power_admin.filters.DateRangeFilter使用方式
from django.contrib import admin
from django_power_admin.filters import DateRangeFilter
class ExampleAdmin(admin.ModelAdmin):
list_filter = [
"username",
("date_join", DateRangeFilter),
"is_active",
]
list_display = ["username", "date_join", "is_active"]
Admin样式类
-
inline-narror-input
TabularInline字符串输入框改为小框。
使用范围:
- 可加在TabularInline类的claases属性中。
-
related-actions-hidden
隐藏外键的增改删按钮。
使用范围:
- 可加在fieldsets的classes属性中。
- 可以加在TabularInline类的claases属性中。
-
inline-original-hidden
隐藏TabularInline及StackInline中的orininal显示。
使用范围:
- 可加在TabularInline类的claases属性中。
- 可加在StackInline类的claases属性中。
-
form-row-c2
FormChange表单两例显示,同时控制textarea的宽度。
使用范围:
- 可加在fieldsets的classes属性中。
Admin全局控制
-
DJANGO_ADMIN_USE_FIXED_WIDTH_LAYOUT
当DJANGO_ADMIN_USE_FIXED_WIDTH_LAYOUT=True,Admin管理后台设置为固定宽度,且居中显示。可通过以下设置控制宽度及背景色。
关联设置项:
- DJANGO_ADMIN_USE_FIXED_WIDTH_LAYOUT = False
- DJANGO_ADMIN_WIDTH = 1280px
- DJANGO_ADMIN_BACKGROUND_COLOR = "#f5f6f8"
- DJANGO_ADMIN_FOOTER_COLOR = "#c5cbd2"
版本记录
v0.1.7
- 项目启动。
- 框架搭建。
- PowerAdmin类基本完成。
v0.1.10
- get_extra_views更名为get_extra_view_urls,避免与其它方法名冲突。
- view_action更名为read_xxx。xxx_action更名为xxx_button。
- 在list_display中追加change_list_object_toolbar字段。
v0.1.12
- 增加has_change_permission_real, has_delete_permission_real方法,解决read/change机制导致的原始权限判断丢失的情况。
- 增加get_messages方法, 用于获取站点当前的messages队列。
- 增加get_power_admin_class,用于统一扩展所有PowerAdmin的子类。
v0.1.18
- 修正get_changelist_object_row_classes_javascript方法在遇到其它错误时导致的异常行为。
- ChangelistObjectToolbarButton可以直接引用extra view(需要为extra view添加按钮额外属性,如:short_description、icon、classes等)。
- change_list_xxx更名为changelist_xxx(注意:可能引起新旧版本的不兼容,特别是子类配置的change_list_toolbar_buttons属性需要改名为changelist_toolbar_buttons)。
- 引入ChangelistToolbar机制,用于添加额外的列表页顶部按钮。
v0.1.20
- 添加简易数据分享机制的支持(simple share model)。
- 添加数据导出功能。
v0.1.21
- 添加适用于TextField使用的“键值对”控件。
- PowerAdmin中方法名加上django_power_admin_前缀,避免与其它扩展类冲突。
v0.1.23
- 修正Select2、SelectMultiple2、ConfigTable在inline表单中的使用问题。
- 新增django_power_admin.widgets.AllUsersSelect。
v0.1.24
- 新增django_power_admin.filters.TextInputFieldFilter。
- 新增list_filter类通过定义内部的
Media:
引入额外的js/css文件的机制。
v0.1.25
- 新增django_power_admin.filters.DateRangeFilter。
v0.1.27
- 修正ChangelistObjectToolbar按钮换行的问题。
v0.1.29
- 兼容django 4.x。
- 兼容python 2.7。
- 修正排序Admin未设置ordering时的异常。
v0.1.30
- 修正get_ordering强制添加display_order字段导致的问题。
v0.1.31
- 修正ChangelistObjectToolBarButton的默认target=self问题,修正后的默认target=_self。
- 使用zenutils依赖包以简化不必要的依赖关系。
v0.1.35
- 修正DateRangeFilter结束日期框搜索条件名称错误的问题。
v0.1.36
- 增加站点固定宽度居中。
- 增加Admin样式类:form-row-c2、inline-original-hidden、related-actions-hidden、inline-narror-input。
- 增加PopupConfigTable控件。
v0.1.37
- 文档更新。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django-power-admin-0.1.37.tar.gz
.
File metadata
- Download URL: django-power-admin-0.1.37.tar.gz
- Upload date:
- Size: 42.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe34b7b1865c47780dac4ed2cd76beb36ee9b276bd0baa25b6e4adb15bbb1c37 |
|
MD5 | 379cb99443847ef00aa147432211d465 |
|
BLAKE2b-256 | ca5b18440bf9b0a538d109be7e4db1188e999f5b3db4668d0822a1f2eba99073 |
File details
Details for the file django_power_admin-0.1.37-py3-none-any.whl
.
File metadata
- Download URL: django_power_admin-0.1.37-py3-none-any.whl
- Upload date:
- Size: 50.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 87aeb34d9e447b2f738d344c1682a6e38f2bf07b2853dd4b1e6f28a1d912f214 |
|
MD5 | 37bf5c121aadc53c13cdfac3a86c4152 |
|
BLAKE2b-256 | bf3023f2b785dfeb5e10262a8090086b9d13d04eb699edd614ebc248a7645db7 |