使用xadmin替换django自带的admin后台
来源:互联网 发布:网络图片 侵权 编辑:程序博客网 时间:2024/05/08 15:48
install xadmin
首先当然是安装xadmin了,通过命令: pip install django-xadmin 。安装完之后,需要在项目的settings中也把它加入到 INSTALL_APPS 中, 它还依赖另外两个组件:django-crispy-forms和django-reversion,前者是必装的(安装xadmin时会自动安装),后者是可选的。install_app中的代码如下:
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin', # 这个可以去掉 'django_xmlrpc', 'xadmin', 'crispy_forms', # 'reversion', # 需要pip install django-reversion 'pingback', 'duoshuo', 'blog', 'weixin',)
django的admin可以去掉了。
配置xadmin
上面是安装,这里是配置,和admin的配置一样,只需要在urls.py里添加:
import xadminxadmin.autodiscover()
这里有个注意事项,你需要把admin的配置去掉,这俩admin可能存在冲突,会导致出错。不知道现在修复没有。不过这不重要了,有了xadmin,自带的admin就没有用武之地了。
第二项配置就是url的配置,这时的注意事项是,你要去掉admin的url,加入xadmin的url,这意味着 你在项目其他地方使用到的admin url的reverse代码需要修改,另外xadmin的更新和admin的更新url不同 这点也是很多人替换之后项目出现 admin namespace 不存在bug的原因。
url配置如下:
urlpatterns = patterns('', url(r'^$', IndexView.as_view(), name='home'), url(r'^xadmin/', include(xadmin.site.urls), name='xadmin'), #...)
开始替换admin吧
如果你只是对admin进行了简单的配置, 你需要做的就是替换到自定义Admin的继承为 object ,替换admin.site.register为xadmin.site.register。一个简单的示例:
#coding:utf-8from django.contrib import adminfrom django.core import urlresolversfrom .models import Postclass PostAdmin(admin.ModelAdmin):#class PostAdmin(object): # 一处替换 search_fields = ('title', 'alias') fields = ('content', 'summary', 'title', 'alias', 'tags', 'status', 'category', 'is_top', 'is_old', 'pub_time') list_display = ('preview', 'title', 'category', 'is_top', 'pub_time') ordering = ('-pub_time', ) save_on_top = True def preview(self, obj): # 第二处替换: 'xadmin:blog_post_change' url_edit = urlresolvers.reverse('admin:blog_post_change', args=(obj.id,)) return u''' <span><a href="/%s.html" target="_blank">预览</a></span> <span><a href="%s" target="_blank">编辑</a></span> ''' % (obj.alias, url_edit) preview.short_description = u'操作' preview.allow_tags = Trueadmin.site.register(Post, PostAdmin)# 第三处替换# xadmin.site.register(Post, PostAdmin)
上面的代码,看起来定义了很多东西,其实只需要做三处替换就行。当然, 记得把admin.py更改为adminx.py 。
上面说了的如果你只是简单的配置,但是如果你自定义了一些方法的话怎么做呢?比如我自己的blog,我后台编辑的是restructure格式的文本,在保存时会转成html存到数据。具体代码如下,我重写了django admin的 save_model 方法:
#coding:utf-8from django.contrib import adminfrom django.core import urlresolversfrom .models import Postclass PostAdmin(admin.ModelAdmin):#class PostAdmin(object): # 一处替换 # 省略上面代码 def save_model(self, request, obj, form, change): #def save_models(self): # 注意这里 #obj = self.new_obj #request = self.request obj.author = request.user if not obj.summary: obj.summary = obj.content if not obj.is_old: obj.content_html = restructuredtext(obj.content) else: obj.content_html = obj.content.replace('\r\n', '<br/>') import re obj.content_html = re.sub(r"\[cc lang='\w+?'\]", '<pre>', obj.content_html) obj.content_html = obj.content_html.replace('[/cc]', '</pre>') obj.save()
因为xadmin虽然在属性上兼容了admin,但提供的接口和之前的admin并不一致,因此如果你有用到类似的方法你需要自行修改。那么你怎么能知道需要修改成那种接口呢(为什么save_model得修改成save_models)。这个就得去看代码了,文档现在还是很少。
因为xadmin的自定义Admin类都是继承自object,导致很多人不知道该如何去看xadmin的ModelAdmin到底提供了哪些接口。这里提供一个关键的线索,xadmin的ModelAdmin设计和Django的ClassBase View类似。它的List部分的管理,Edit部分的管理,还有其他的都在代码/xadmin/views/下面分别是list.py,edit.py,还有detail.py等模块
所提供的接口通过重写可以满足大多数的需求。
总结
关于xadmin怎么替换django自带的admin,也就这些内容了,关键点就是属性上完全兼容,方法上得去看源代码。不过就算是你用Django自带的admin,也一样得去看源码,文档挺少。如果有真的打算对后台定制的需求的话,应该记住一句话, 代码就是最好的文档 。
记得替换xadmin/models.py以下一行代码:
django.VERSION[1] > 4改为4 < django.VERSION[1] < 7
- 使用xadmin替换django自带的admin后台
- django自带后台admin设置中文
- Django-xadmin的使用
- 关于Django 中启动自带服务器进入后台admin没有样式的问题...
- Django-- admin后台管理模块的使用
- django1.8使用django-xadmin管理后台
- django-xadmin 非常方便的后台管理程序
- django后台自带User,Group。下面是给admin添加自定义表,并为admin添加副文本编辑器
- django使用xadmin的全局配置
- Django 安装Xadmin后台管理
- PythonWeb开发Django框架学习(十一)使用框架自带Admin管理数据库数据
- django-自带admin后台如何给某些field赋默认值(比如user=request.user)然后隐藏它
- Django自带加密模块的使用
- 自定义django的admin后台action
- 自定义django的admin后台action
- 自定义django的admin后台action
- Django建教育平台(四)--Django Admin与Xadmin
- DJANGO ADMIN后台设置
- 黄巾之乱-网络模块
- 最大间隙问题
- C#从数据库中读取数据加入到combox的items中,并显示出当前model值在combox中
- C语言 编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。
- IBM X3650 安装ESXi 5.1u2 需要更改BIOS缺省设置
- 使用xadmin替换django自带的admin后台
- 程序员读书雷达
- scheme中if作为特殊形式而不是普通过程的原
- 解决failed to build gem native extension on windows 7
- 排序算法之 插入排序、希尔(shell)排序 及其时间复杂度和空间复杂度
- java对象的生命周期及回收
- java.lang.OutOfMemoryError: Java heap space错误及处理办法
- JAVA经典算法
- Android网络通信 Get方法使用