xadmin是一个django的管理后台实现,使用了更加灵活的架构设计及Bootstrap UI框架, 目的是替换现有的admin,国人开发,有许多新的特性:

  • 兼容 Django Admin
  • 使用 Bootstrap 作为 UI 框架
  • 编辑页面灵活布局
  • 主页面仪表盘及小部件
  • 过滤器强化
  • 数据导出
  • 强大的插件机制

与django的集成

本篇以simpleblog项目为例,介绍下怎样在django中集成xadmin

python2.7环境切换

注意,前面的教程都是在python3.4环境下开放的。 而目前为止xadmin还只能支持python2,所以我们要在此项目基础上新建一个分支py27, 然后我们创建一个python2.7的virtual environment,切换到此环境下面即可。

添加依赖

在requirements.txt中添加如下的依赖,注意:要用到xadmin的django1.9分支

django-reversion==1.8.5
xlwt==0.7.5
git+https://github.com/sshwsfc/django-xadmin.git@django1.9

修改settings.py

增加xadmin的配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
ADMINS = (
# ('Your Name', 'your_email@example.com'),
)
MANAGERS = ADMINS # Application definition
INSTALLED_APPS = (
# ...
'xadmin',
'crispy_forms',
'reversion',
# ...
)

添加/xadmin的链接

修改mysite/urls.py如下

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
from django.conf.urls import patterns, include, url
# version模块自动注册需要版本控制的 Model
from xadmin.plugins import xversion
xversion.register_models() urlpatterns = patterns(
'',
url(r'xadmin/', include(xadmin.site.urls), name='xadmin'),
# ...
)

创建adminx.py

在blog/目录下创建adminx.py,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
Topic: adminx定制类
Desc :
"""
import xadmin
import xadmin.views as xviews
from .models import Tag, Category, Post, Comment, Evaluate, Page
from xadmin.layout import Main, TabHolder, Tab, Fieldset, Row, Col, AppendedText, Side class BaseSetting(object):
enable_themes = True
use_bootswatch = True
xadmin.site.register(xviews.BaseAdminView, BaseSetting) class AdminSettings(object):
# 设置base_site.html的Title
site_title = '博客管理后台'
# 设置base_site.html的Footer
site_footer = 'Winhong Inc.'
menu_style = 'default' # 菜单设置
def get_site_menu(self):
return (
{'title': '博客管理', 'perm': self.get_model_perm(Page, 'change'), 'menus': (
{'title': '所有页面', 'icon': 'fa fa-vimeo-square'
, 'url': self.get_model_url(Page, 'changelist')},
{'title': '分类目录', 'icon': 'fa fa-vimeo-square'
, 'url': self.get_model_url(Category, 'changelist')},
)},
)
xadmin.site.register(xviews.CommAdminView, AdminSettings) xadmin.site.register(Page)
xadmin.site.register(Category)
# xadmin.site.register(Tag)
# xadmin.site.register(Post)
# xadmin.site.register(Comment)
# xadmin.site.register(Evaluate)

在这里,我们将所有的model都注册到xadmin中去,这样后台就能自动管理它们了。 并且自定义了后台的一些菜单、标题等等。具体的定制方法可以参考xadmin的官方文档。

添加管理后台链接

在mysite/templates/mysite/base.html模板中添加/xamdin的管理后台链接:

<div id="meta-2" class="widget widget_meta">
<h3>功能</h3>
<ul>
{% if user.is_superuser %}
<li><a href="/xadmin">管理站点</a></li>
{% endif %}
{% if user.is_authenticated %}
<li>
<a href="{% url 'django.contrib.auth.views.logout' %}">登出</a>
</li>
{% else %}
<li>
<a href="{% url 'django.contrib.auth.views.login' %}">登录</a>
</li>
{% endif %}
<li><a href="#">文章<abbr title="RSS">RSS</abbr></a></li>
</ul>
</div>

自定义后台登陆页面

新建mysite/templates/registration/login.html模板,将xadmin模块中的login.html复制过来, 修改其内容,改成自己想要的形式即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{% load staticfiles %}
{% load i18n %}
<html>
<head>
<meta name="viewport"
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<meta name="robots" content="NONE,NOARCHIVE">
<title>用户登录 - SimpleBlog</title>
<!--...中间省略...-->
<script type="text/javascript" src="{% static 'xadmin/vendor/jquery/jquery.js' %}"></script>
</head>
<body class="login">
<div class="container">
<form method="post" action="{% url 'django.contrib.auth.views.login' %}">
{% csrf_token %}
<div class="panel panel-default panel-single" id="panel-login">
<div class="panel-heading">
<h2 class="form-signin-heading">请登录</h2>
</div>
<!--...中间省略...-->
</div>
</form> </div>
<!--...中间省略...-->
<script type="text/javascript" src="{% static 'xadmin/js/xadmin.main.js' %}"></script>
<script type="text/javascript" src="{% static 'xadmin/js/xadmin.responsive.js' %}"></script>
<script type="text/javascript"
src="{% static 'xadmin/vendor/jquery-ui/jquery.ui.effect.js' %}"></script>
<script type="text/javascript" src="{% static 'xadmin/js/xadmin.plugin.themes.js' %}"></script> </body>
</html>

这些完成后,我们打开应用,访问管理站点链接,应该可以看到如下的登录页面

登录后的效果

 

Django1.9开发博客(14)- 集成Xadmin的更多相关文章

  1. Django1.7开发博客

    转自: http://www.pycoding.com/articles/category/django 基于最新的django1.7写的,通俗易懂,非常适合新手入门. 感谢博主! 参考教程: htt ...

  2. Django1.9开发博客(12)- i18n国际化

    国际化与本地化的目的为了能为各个不同的用户以他们最熟悉的语言和格式来显示网页. Django能完美支持文本翻译.日期时间和数字的格式化.时区. 另外,Django还有两点优势: 允许开发者和模板作者指 ...

  3. Django1.9开发博客(11)- 富文本与代码高亮

    TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,支持目前流行的各种浏览器,由JavaScript写成. 功能配置灵活简单(两行代码就可以将编辑器嵌入网页中),支持AJAX.另一特点是加载速度 ...

  4. Django1.9开发博客(8)- 继续完善

    到现在为止我们已经完成的差不多了,并且基本的东西都已经学到了,是时候用起来了. 我们的博客还有很多功能需要完善,下面抛砖引玉新增几个功能,还有其他功能等你自己去发现和实现. 草稿箱 之前我们新建文章的 ...

  5. Django1.9开发博客(7)- 实现功能

    到目前为止我们已经完成了一个django应用的所有基础部分. 包括url配置.视图.模型和模板.接下来开始继续完善我们的博客系统了. 首先我们需要一个显示每篇文章的详细页面,对不? 文章详情 对于首页 ...

  6. 基于 abp vNext 和 .NET Core 开发博客项目 - 集成Hangfire实现定时任务处理

    上一篇文章(https://www.cnblogs.com/meowv/p/12956696.html)成功使用了Redis缓存数据,大大提高博客的响应性能. 接下来,将完成一个任务调度中心,关于定时 ...

  7. Django1.9开发博客(10)- 全文搜索

    Django本身不提供全文检索的功能,但django-haystack为其提供了全文检索的框架. django-haystack能为Django提供whoosh,solr,Xapian和Elastic ...

  8. Django1.9开发博客(13)- redis缓存

    Redis 是一个高性能的key-value数据库.redis的出现, 很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用. 它提供了Pyth ...

  9. Django1.9开发博客(9)- 用户认证

    你应该注意到了一点,当你去新建.修改和删除文章的时候并不需要登录,这样的话任何浏览网站的用户都能随时修改和删除我的文章.这个可不是我想要的! 编辑和删除的认证 我们需要保护post_new, post ...

随机推荐

  1. iOS UITableView 移除单元格选中时的高亮状态

    在处理UITableView表格时,我们希望用户能够和触摸单元格式进行交互,但是希望用户在完成交互之后,这些单元格的选中状态能够消失,.Cocoa Touch 提供了两种方法来防止单元格背持久选中. ...

  2. IE localhost 不能解析

    新建的项目  在虚拟机里试了,虚拟机的IE可以解析.本机的360.谷歌都可以解析 只有IE不可以,我把IE11卸载了换成IE8也不行.再换回IE11还是不行 在网上找了很多方法 最后  看到有一个人 ...

  3. 【Apache】apache简单配置URL重写规则

    [概述]URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程.举个例子来说,如果通过浏览器进来的URL是index.php?type=news&& ...

  4. js 点赞数 处理

    likeNum(num) { if (num === 0) { num = ''; } else if (num > 9999 && num <= 9999999) { n ...

  5. DruidDataSource配置属性列表

    DruidDataSource配置兼容DBCP,但个别配置的语意有所区别. 配置 缺省值 说明 name   配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来.如果没有配置 ...

  6. VS 解决方案管理器和 编辑窗口同步 联动

    对于题目的解释就是   当我点击一下解决方案管理器中的 某一个文档时, 编辑窗口会联动的   同步到对应的窗口。之前好像被我无意中关掉了,今天重新建立一个项目无意中发现怎么设置了 如果想点击右边的文档 ...

  7. ExtJs Panel 滚动条设置

    设置autoscroll:true同时出现横向和纵向滚动条. 不要设置autoscroll属性,或者autoscroll:false,然后设置bodyStyle : 'overflow-x:hidde ...

  8. Swift数据类型简介(二)

    整数 整数就是没有小数部分的数字,比如42和-23.整数可以是有符号(正.负.零)或者无符号(正.零). Swift 提供了8,16,32和64位的有符号和无符号整数类型.这些整数类型和 C 语言的命 ...

  9. 机器学习实战-边学边读python代码(3)

    程序清单2-3 归一化特征值: def autoNorm(dataSet): /* >>> barray([[ 1., 2., 3.], [ 2., 3., 4.], [ 10., ...

  10. LeetCode----8. String to Integer (atoi)(Java)

    package myAtoi8; /* * Implement atoi to convert a string to an integer. Hint: Carefully consider all ...