Django学习之注册后台模块

xadmin需要新建一个 adminx.py 文件(默认Django自动生成了admin.py文件)

直接在apps/users目录下新建,xadmin会自动搜索我们每个app应用下面的adminx.py文件

我们要将models注册到adminx当中时需要在adminx中新建类(这里要注意这里和原生admin不同,我们继承的是object顶层)

# -*- coding:utf-8 -*-
__author__ = '玖河网络'
__date__ = '2018/7/17 14:55'

import xadmin

from .models import EmailVerifyRecord


class EmailVerifyRecordAdmin(object):
    """将邮箱验证注册到xadmin后台中"""
    pass

xadmin.site.register(EmailVerifyRecord,EmailVerifyRecordAdmin)

这样就完成了我们EmailVerifyRecord这张表的注册

xadmin智能后台管理会自动将各个类型的表做了相应的界面,实际上xadmin只是将每个表做了增删改查的作用而已,但是我们可以在增删改查中自己制作逻辑。

 

注册后的页面没有具体显示字段,所以我们还需要设置字段:

我们测试添加邮箱可能会遇到的错误:

ProgrammingError at /xadmin/users/emailverifyrecord/add/
(1146, "Table 'mxonline.xadmin_log' doesn't exist")
Request Method:	POST
Request URL:	http://192.168.88.129:8000/xadmin/users/emailverifyrecord/add/
Django Version:	1.9.8
Exception Type:	ProgrammingError
Exception Value:	
(1146, "Table 'mxonline.xadmin_log' doesn't exist")
Exception Location:	C:\Users\Administrator\Envs\mxonline\lib\site-packages\MySQLdb\connections.py in defaulterrorhandler, line 36
Python Executable:	C:\Users\Administrator\Envs\mxonline\Scripts\python.exe
Python Version:	2.7.15
Python Path:	
['C:\\Users\\Administrator\\PycharmProjects\\MxOnline\\apps',
 'C:\\Users\\Administrator\\PycharmProjects\\MxOnline',
 'C:\\Users\\Administrator\\PycharmProjects\\MxOnline',
 'C:\\Users\\Administrator\\PycharmProjects\\MxOnline\\extra_apps',
 'C:\\Users\\Administrator\\PycharmProjects\\MxOnline\\apps',
 'C:\\Windows\\system32\\python27.zip',
 'C:\\Users\\Administrator\\Envs\\mxonline\\DLLs',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib\\plat-win',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib\\lib-tk',
 'C:\\Users\\Administrator\\Envs\\mxonline\\Scripts',
 'c:\\python27\\Lib',
 'c:\\python27\\DLLs',
 'c:\\python27\\Lib\\lib-tk',
 'C:\\Users\\Administrator\\Envs\\mxonline',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib\\site-packages',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib\\site-packages\\odf',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib\\site-packages\\odf',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib\\site-packages\\odf',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib\\site-packages\\odf',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib\\site-packages\\odf',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib\\site-packages\\odf',
 'C:\\Users\\Administrator\\Envs\\mxonline\\lib\\site-packages\\odf']
Server time:	星期二, 17 七月 2018 15:09:15 +0800

(原因:因为刚开始我们是用pip安装pipy上面的包,而现在我们用的是源码包是新的,所以pip安装的还没有创建依赖表)

解决方法:

pycharm  菜单栏 >>> Tools >>> Run manage.py Task >>> 

manage.py@MxOnline>  makemigrations xadmin [appname]  (检测表)

manage.py@MxOnline>  migrate xadmin [appname]

 

提交后我们发现并不能显示注册的邮箱名,而是类名称,所以我们还需要重载一下unicode

class EmailVerifyRecord(models.Model):
    """邮箱验证相关"""
    code = models.CharField(max_length=20,verbose_name=u"验证码")
    email = models.CharField(max_length=50,verbose_name=u"邮箱")
    # 以上两项都不能为空
    send_type = models.CharField(choices=(("register",u"注册"),("forget",u"找回密码")),max_length=10,verbose_name=u"验证类型")
    # send_type 注册和找回密码时需要用到的
    send_time = models.DateField(default=datetime.now,verbose_name=u"发送时间")
    # 获取当前时间,datetime.now去掉后面的括号表示以实例化的时间来获取

    class Meta:
        verbose_name = u"邮箱验证码"
        verbose_name_plural = verbose_name
        
    #下面是重载unicode的方法
    def __unicode__(self):  
        return '{0}({1})'.format(self.code,self.email)

正常显示(但是这样还不够,这里只显示了邮箱验证码,所以我们还需要在列表也中显示字段):

adminx.py的类中加入代码:

# -*- coding:utf-8 -*-
__author__ = '玖河网络'
__date__ = '2018/7/17 14:55'

import xadmin

from .models import EmailVerifyRecord


class EmailVerifyRecordAdmin(object):
    """将邮箱验证注册到xadmin后台中"""
    list_display = ['code', 'email', 'send_type', 'send_time']

xadmin.site.register(EmailVerifyRecord,EmailVerifyRecordAdmin)

这样就能正常的显示出列表形式了。

 

另外我们还需要做查询,这里我们在类下面加入另外一个变量 search_fields 

# -*- coding:utf-8 -*-
__author__ = '玖河网络'
__date__ = '2018/7/17 14:55'

import xadmin

from .models import EmailVerifyRecord


class EmailVerifyRecordAdmin(object):
    """将邮箱验证注册到xadmin后台中"""
    list_display = ['code', 'email', 'send_type', 'send_time'] # 显示
    search_fields = ['code', 'email', 'send_type']  # 搜索

xadmin.site.register(EmailVerifyRecord,EmailVerifyRecordAdmin)

 

 

时间筛选字段变量 list_filter

# -*- coding:utf-8 -*-
__author__ = '玖河网络'
__date__ = '2018/7/17 14:55'

import xadmin

from .models import EmailVerifyRecord


class EmailVerifyRecordAdmin(object):
    """将邮箱验证注册到xadmin后台中"""
    list_display = ['code', 'email', 'send_type', 'send_time']  # 显示字段
    search_fields = ['code', 'email', 'send_type']  # 搜索字段
    list_filter = ['code', 'email', 'send_type', 'send_time'] # 筛选字段

xadmin.site.register(EmailVerifyRecord,EmailVerifyRecordAdmin)

加入后我们又多了个筛选字段。

 

下面我们继续绑定更多的表到后台

# -*- coding:utf-8 -*-
__author__ = '玖河网络'
__date__ = '2018/7/17 14:55'

import xadmin

from .models import EmailVerifyRecord,Banner


class EmailVerifyRecordAdmin(object):
    """将邮箱验证注册到xadmin后台中"""
    list_display = ['code', 'email', 'send_type', 'send_time']  # 显示字段
    search_fields = ['code', 'email', 'send_type']  # 搜索字段
    list_filter = ['code', 'email', 'send_type', 'send_time'] # 筛选字段


class BannerAdmin(object):
    """轮播图绑定到xadmin后台中"""
    list_display = ['title', 'image', 'url', 'index','add_time']  # 显示字段
    search_fields = ['title', 'image', 'url', 'index']  # 搜索字段
    list_filter = ['title', 'image', 'url', 'index','add_time']  # 筛选字段


xadmin.site.register(EmailVerifyRecord,EmailVerifyRecordAdmin)  # 关联注册
xadmin.site.register(Banner,BannerAdmin)  # 关联注册

 

 

 

其他app绑定注册后台数据表基本操作一样,只是要注意外键的使用

 

 

我们在添加章节时显示Course object是因为我们还没有重载unicode方法,需要在models.py的章节类表中添加

注意:这里重载的是课程的unicode而不是章节的unicode

class Course(models.Model):
    """用于存储课程学习的表"""
    name = models.CharField(max_length=50,verbose_name=u"课程名")
    desc = models.CharField(max_length=300,verbose_name=u"课程描述")
    detail = models.TextField(verbose_name=u"课程详情")
    # 这里因为我们要做富文本,所以不限制长度
    degree = models.CharField(max_length=2,choices=(("cj","初级"),("zj","中级"),("gj","高级")),verbose_name=u"难度")
    learn_times = models.IntegerField(default=0,verbose_name=u"学习时长(分钟)")
    students = models.IntegerField(default=0,verbose_name=u"学习人数")
    fav_nums = models.IntegerField(default=0,verbose_name=u"收藏人数")
    image = models.ImageField(max_length=100,upload_to="courses/%Y/%m",verbose_name=u"封面图")
    click_nums = models.IntegerField(default=0,verbose_name=u"点击数")
    add_time = models.DateTimeField(default=datetime.now,verbose_name=u"添加时间")

    class Meta:
        verbose_name = u"课程"
        verbose_name_plural = verbose_name

    def __unicode__(self):
        return self.name
        # 当前实例

 

另外我们在做章节搜索的时候无法搜索到结果,是因为章节要搜索的是外键,所以我们要用__name(表示搜索外键的name字段)

class LessonAdmin(object):
    """章节"""
    list_display = ['course', 'name', 'add_time']  # 显示字段
    search_fields =  ['course', 'name'] # 搜索字段
    list_filter = ['course__name', 'name', 'add_time'] # 筛选字段 搜索外键的__name字段

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值