Django-admin + xadmin后台二次开发

开发的功能主要用来后端处理数据库数据,利用xadmin插件进行美化,定制页面。

xadmin的引入:

  1. 可以利用 pip install xadmin 来进行安装;
  2. 也可以通过git:https://github.com/sshwsfc/xadmin 来拉取适合自己django版本的xadmin。(本文主要对后者的配置进行介绍)

一.项目创建

创建django项目:django-admin start [project_name]

随后cd到目录下创建两个文件夹apps/extra_apps用来存放项目的app以及额外引入的app大致目录结构如下:(static为后来生成,在后边)

Django-admin + xadmin后台二次开发

将apps/extra_apps两个文件夹设置成资源文件夹,否则import xadmin会报错,如下:

Django-admin + xadmin后台二次开发

settings配置路径映射:

Django-admin + xadmin后台二次开发

配置数据源可连接其他sql数据库,不连也行。

现在就创建好了一个没有app的django项目,随后进行

python manage.py makemigrations

python manage.py migrate 进行对django自带模块的迁移以及数据库表的生成。

上述完成就可成功通过 127.0.0.1:8000/admin 来访问到原生的admin后台(登陆需要,先进行 python manage.py createsuperuser 创建超级用户)

二.xadmin的整合。

将下载的xadmin解压:

Django-admin + xadmin后台二次开发

将xadmin拷贝出,放进资源文件里(extra_apps),xadmin有自己的依赖参考目录下的requirements.txt进行安装(pip install -r requirements.txt)。

xadmin其实相当于django的一个app,只不过这个app作为插件覆盖了原生的admin,xadmin也会生成自己对应的数据库表,在settings里INSTALLED_APPS里配置xadmin:

Django-admin + xadmin后台二次开发

随后在主目录的urls中,引入xadmin,替代admin:

Django-admin + xadmin后台二次开发

随后继续数据迁移xadmin,迁移之后,执行python manage.py check检查代码中存不存在问题,一般来讲,文件报的最多的错误是包不存在,找到具体位置替换当前版本对应的包:

例如:django.core.urlresolver 包不存在 在2.0 版本中用django.urls来进行代替。

其余的报包名错误基本找当前版本的就可以了。

注:最好要先对照自己的django版本来下载xadmin,这样会减少很多不必要的问题。

2.0版本的xadmin使用过程中存在的问题是,有一个包(我忘记是哪一个了)的版本过低,升级至指定版本以上就可以了。

bug解决完毕,整合完毕。访问127.0.0.1:8000/xadmin 即可访问自己的xadmin项目。

三.创建应用,xadmin后台管理数据。

在apps目录下创建自己的子应用,可cd 到apps目录下 执行

python ../manage.py startapp demo 生成对应的app,在目录里创建adminx.py用来代替admin.py,xadmin会自动识别adminx.py,相当于原来把admin内容写入到adminx中。

Django-admin + xadmin后台二次开发

接下来编写model,来创建自己的数据表:

Django-admin + xadmin后台二次开发

其中字段的中verbose_name属性可修改在后台中要显示的名称,默认写在属性首位;

model创建完毕,app.py中可修改左侧导航该app的中文字段名称:

Django-admin + xadmin后台二次开发

修改完毕,需要将app注册到settings配置文件中,

Django-admin + xadmin后台二次开发

注册完毕进行数据迁移,成功后数据库会存在model对应的数据表。

这样一个简单的app就创建完毕,如果不是使用xadmin二次开发的话,正常在view里写视图函数,配置路由即可实现自己app的开发。

紧接着注册adminx,一般来讲如果用原生的admin,会在admin.py里注册自己的模型类,通过127.0.0.1:8000/admin维护自己的模型类,而xadmin则需要在adminx.py里注册,进而访问维护。

在adminx内引入xadmin,以及要管理的model,一般分为全局配置与子应用model配置,由于xadmin不像admin要继承admin.ModelAdmin,一般即成object即可:

Django-admin + xadmin后台二次开发

在articleAdmin可修改展示字段样式,基本和原生admin指令一致,例如

list_display:页面显示的字段,以元组形式保存;

list_filter:过滤器,方便查询,可设置多个,以list形式保存;

search_fields:搜索栏,可写查询字段,可以查询多个数据,以list保存;

readonly_fields:只读属性,即无法修改,以list保存;

list_editable:可编辑属性,即可在原字段上修改,以元组保存;

refresh_tims:刷新时间,在一定时间段里刷新数据库表数据,以list保存;

ordering:排序,元祖存储,默认为增,加`-`为降序;等。

Django-admin + xadmin后台二次开发

编辑完要显示的数据,即可注册进子app的model中

Django-admin + xadmin后台二次开发

运行项目,即可维护字段,xadmin插件自带数据的excel导入,excel的导出需要插件包的支持以及配置。

Django-admin + xadmin后台二次开发

这样一个app的model就成功显示在后台上了。

四.拓展模块定制页面。

xadmin中如果想要实现非自带功能,一般需要重写插件plugins,excel的导入也可重写插件,重写比较麻烦,如果只是简单的实现功能可以用下边的方法:excel的导出xadmin已经提供了,xadmin的导入功能需要包的导入以及相关资源的配置:在settings里app处配置:

Django-admin + xadmin后台二次开发

以及相关的excel预览所产生的缓存路径以及事务回滚需要在settings里配置

Django-admin + xadmin后台二次开发

在项目app下新建的adminx中:引入对应包以及创建:

Django-admin + xadmin后台二次开发
Django-admin + xadmin后台二次开发
Django-admin + xadmin后台二次开发

配置好import的导入文件后,需要在adminx中引用,最后通过注册modelAdmin来在目标表维护上,显示导入功能。

Django-admin + xadmin后台二次开发

但是这个导入只能在超级管理员权限下使用,暂未实现全局导入操作(不会,可能要写插件,注册到全局View里)。

全局参数的配置,比如dashboard的logo名称,也需要在adminx中配置,常见属性为:

site_header =
site_title =
site_footer =
index_title =

最后需要注册到全局视图中(注册全局视图,全局参数配置类):

Django-admin + xadmin后台二次开发

刷新即可看到对应的效果。

Django-admin + xadmin后台二次开发

import已出现但是并无logo 以及对应的js,可以执行python manage.py collectstatic 来迁移静态文件,完成上述,基本导入功能已实现。

首页面空白填充:默认首页面是空白的但是用户可以根据自己的喜好来添加对应的小插件,但是可能会出错,这时需要找到xadmin下的dashboard.py定位到,并修改

Django-admin + xadmin后台二次开发

完成后,重启

Django-admin + xadmin后台二次开发

这仅供用户个人参考,并不能改变全局主页index。

如果要引入自己的index来填充空白,一般是需要重写插件来替换页面,在不了解目录结构分布的时候,我建议直接该源码,分析页面可定位到dashboard页面在base_site.html中,我在此处添加了一个判断:

Django-admin + xadmin后台二次开发

利用iframe子框架(前端的一个页面引用方式)来引用我的新页面,同时找到base.py里CommAdminView的get_context方法增加context.update传到页面的键值对

Django-admin + xadmin后台二次开发

实现结果如下:

Django-admin + xadmin后台二次开发

综上,页面的基本定制就已完成,从这里可以看出想要引入的功能可以通过写插件完成,页面之类的也可以重写定向,前提是你可以完全掌握xadmin中各个部分对应的页面以及方法位置。

原创文章,作者:Rosmontics,如若转载,请注明出处:https://rosmontis.com/archives/204

(0)
上一篇 2022年8月30日
下一篇 2022年9月18日
alt

相关推荐

发表回复

登录后才能评论

评论列表(1条)

TG通知群
小程序
小程序
分享本页
返回顶部