django安装使用xadmin
Xadmin介绍
直接替换掉Django自带的admin系统,并提供了很多有用的东西;完全的可扩展的插件支持,基于Twitter Bootstrap的漂亮UI。
- 完全替代Django admin
- 支持基于Twitter Bootstrap的UI主题
- 支持可扩展的插件
- 更好的过滤器,日期范围,数量范围等
- 内置xls,csv,xml和json格式数据导出
- 仪表板页面和小部件支持 (暂时用不到)
- 现场书签
- 完整的CURD方法(增删改查)
Xadmin安装
xadmin下载: https://github.com/sshwsfc/xadmin/tree/django2(记得要直接下载zip)
源码集成:github下载源码(一定要下载django2的文件名为:xadmin-django2.zip,解压后里面有个xadmin就是我们需要的xadmin源码了)
项目的根目录创建一个文件夹为:extra_apps,将下载的好xadmin源码拷贝到extra_apps目录中如下:
通过pycharm 选中extra_apps文件夹点击鼠标右键选中菜单mark directory as 选择 sources root就可以变成上面的蓝色文件夹目录就可以了。
安装依赖项:
#pip install git+git://github.com/sshwsfc/xadmin.git@django2 依赖项: django-crispy-forms django-import-export django-reversion django-formtools future httplib2 six
Xadmin配置
settings.py配置
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0,os.path.join(BASE_DIR,'extra_apps')) sys.path.insert(0,os.path.join(BASE_DIR,'polls')) INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', ……
'polls', #应用app 'xadmin', 'crispy_forms', 'reversion', ]
urls.py配置
from django.contrib import admin from django.urls import include, path import xadmin urlpatterns = [ path('polls/', include('polls.urls')), path('admin/', admin.site.urls),
path('xadmin/',xadmin.site.urls),
]
setting.py设置成中文
LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = False
bug修改
TypeError at /xadmin/xadmin/userwidget/add/ render() got an unexpected keyword argument 'renderer'错误 修改项目中xadmin/views/dashborad.py中的render(),在render()中添加参数:renderer=None,即可解决。
运行项目
先执行python manage.py makemigrations 然后执行python manage.py migrate 生成数据库
执行 python manage.py runserver (如果缺少库的话自行安装相应的库就可以了),
当访问后台的时候可以看到如下效果说明成功了
中文板式:
python manage.py createsuperuser
Django admin修改用户密码
python manage.py shell from django.contrib.auth.models import User #引入管理员密码存放的数据库 user=User.objects.filter() #查找该数据库里有哪些用户 user 输出user 可以看到用户名,我这里只有一个admin [<User: admin>] 重置密码, user = User.objects.get(username='admin') #获取名称为admin的用户 user.set_password('123456') #设置密码 user.save() # 保存user对象
Django admin修改注册表信息
xadmin后台如果要对表的内容增删改查,跟之前的admin.py文件里面写注册表信息一样,需在admin.py同一级目录新建一个adminx.py的文件。
然后在adminx.py文件控制页面上需显示的内容。
Models模块
from django.utils import timezone import datetime class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') def __str__(self): return self.question_text def was_published_recently(self): now = timezone.now() return now - datetime.timedelta(days=1) <= self.pub_date <= now class Choice(models.Model): question = models.ForeignKey(Question,on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0) def __str__(self): return self.choice_text
adminx.py文件
在admin.py文件的同一目录新建一个adminx.py(注意只能是adminx.py,不能叫其它的名称)
在adminx.py里与之前的admin.py代码有一些不一样
- 之前import admin, 这里import xadmin
- 之前注册表时继承admin.ModelAdmin, 这里继承object
- 之前inlines 关联的表(class MoreInfo)继承admin.StackedInline, 这里继承object
- 之前可以有2种注册方式,可以用装饰器方法@admin.register(表类名),这里只能通过xadmin.site.register(表类名, xxx)方式
import xadmin from .models import Question, Choice class MoreInfo(object): model = Choice class ControlQuestion(object): # 显示的字段 list_display = ('question_text', 'pub_date') # 搜索条件 search_fields = ('question_text',) # 每页显示10条 list_per_page = 10 # 在Question页面显示更多信息Choice inlines = [MoreInfo] class ControlChoice(object): list_display = ["question", "choice_text"] # 注册Question表 xadmin.site.register(Question, ControlQuestion) xadmin.site.register(Choice, ControlChoice)
xadmin列表页显示