由于安装时需要依赖包并且暂时不支持py3等原因,直接pip install的方法很容易就狗带了。
说一下我在网上找到的安装方式,在GitHub上有这个项目的开源代码,并且还有很多个版本可以选择。
克隆一份,clone地址:xadmin,新建一个空白的README.rst代替之前的文件。
cmd进入dos,执行python setup.py install,出现gbk解码问题,返回上一步确定README.rst是一个空白文件。这样安装xadmin就完成了。
狸猫换太子
算了还是叫太子换狸猫吧,admin文档太少用起来还不如自己写的后台管理,用xadmin更换django自带的admin,安装xadmin的过程与写一个app分支的过程一致。这里我简述一下步骤。
第一步,创建一个文件包放置xadmin的app,并且将app注册在settings.py文件中。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', 'xadmin', 'crispy_forms',#必须要注册这两个app ]
第二步修改url,用xadmin代替admin。
from django_extra import xadmin from blog import views urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r'^xadmin/', xadmin.site.urls), url(r'^index/', views.index ), ]
这里提醒一下,如果你之前创建好了数据库,在这里使用xadmin之前需要同步一下数据库的相关数据,就是:
python manage.py makemigrations
python manage.py migrate
当然你还需要创建后台管理的超级管理员。
python manage.py createsuperuser
当然你觉得英文界面可能对你不够友好,在settings里进行配置,设置为中文,这个与admin操作一致:
LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = False
当然我们可以让后台搭建的好看一点:
class BaseSetting: ''' 增加主题样式 ''' enable_themes = True use_bootswatch = True class GlobalSetting(object): ''' 修改标题 ''' site_title = "jeff后台管理系统" site_footer = "http://www.cnblogs.com/Jeffding/" menu_style = "accordion"#下拉框收起来 xadmin.site.register(views.BaseAdminView, BaseSetting) xadmin.site.register(views.CommAdminView, GlobalSetting)
后台管理的搭建非常迅速,也非常好用,django的后台管理是根据数据表的管理,所以适用于大多数情况,给我们开发带来了便利。
登陆注册
为了使用django后台自带的认证与登陆,所以我们的用户表最好还是继承它的用户表比较好,这样我们登录认证和session写入django都帮我们做好了,所以别人做好的东西,当然是拿来用啦。
所以我们需要重写user模型。
第一步,修改settings.py配置文件,覆盖默认的user模型:
AUTH_USER_MODEL = "users.UserInfo"
class UserInfo(AbstractUser): """ 用户表 """ nickname = models.CharField(verbose_name='昵称', max_length=32) address = models.CharField(verbose_name='地址', max_length=100) cellphone_number = models.CharField(verbose_name='手机号', max_length=11) birthday = models.DateField(verbose_name='生日', null=True, blank=True,) avatar = models.ImageField(verbose_name='头像', upload_to='static/imgs/%Y/%m',default='static/imgs/default.png') create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) sex_choices = [ ("male", "男"), ("female", "女"), ] sex = models.CharField(choices=sex_choices, default='male', verbose_name='性别', max_length=6) class Meta: verbose_name = '用户信息' verbose_name_plural = verbose_name def __str__(self): return self.username