python 管理系统 dj_Python自动化开发学习-Django Admin

django amdin是django提供的一个后台管理页面,该管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增删改查。

准备工作

创建一个项目,或者是用已有的项目

使用下面的命令创建生成数据库,这里虽然还没有创建任何的表结构,但是django本身是有一些库要创建的

python manage.py migrate

这个命令一般是搭着 python manage.py makemigrations 之后用的,不过这里我们自己还一个表都还没创建呢。

启动 django 服务,然后默认用这个地址 http://127.0.0.1:8000/admin 就可以打开登陆界面了。

创建超级管理员

使用下面的命令,创建超级管理员账户:

python manage.py createsuperuser

根据提示,输入用户名和密码后,创建成功后,就可以去Web界面登录了。

本地化配置

去settings.py文件里修改下面2项,主要是改了 LANGUAGE_CODE ,这样后台管理能显示中文了。时区的设置这里不影响,不过顺便改一下吧。

# LANGUAGE_CODE = 'en-us'

LANGUAGE_CODE = 'zh-hans'

# TIME_ZONE = 'UTC'

TIME_ZONE = 'Asia/Shanghai'

现在在去看看admin的管理页面,已经是中文的页面的。

创建表结构

先创建2张简单的表,有一个简单的外键关联:

class UserInfo(models.Model):

name = models.CharField(max_length=32)

age = models.PositiveSmallIntegerField()

gender_choice = ((1, "男性"), (2, "女性"))

gender = models.SmallIntegerField(choices=gender_choice)

dept = models.ForeignKey('Dept', models.CASCADE)

class Dept(models.Model):

name = models.CharField(max_length=32)

创建完表后要执行一下下面的命令,更新到数据库:

python manage.py makemigrations

python manage.py migrate

要在admin的管理界面里看到这些表,必须要在admin.py文件里注册一下:

from app01 import models

admin.site.register(models.UserInfo)

admin.site.register(models.Dept)

现在已经,可以在管理页面里看到我们的表的。但是英文看的不舒服。

显示自定制的表名和字段名

修改一下之前的表结构,添加verbose_name参数:

class UserInfo(models.Model):

name = models.CharField(max_length=32, verbose_name="员工姓名")

age = models.PositiveSmallIntegerField("年龄")

gender_choice = ((1, "男性"), (2, "女性"))

gender = models.SmallIntegerField("性别", choices=gender_choice)

dept = models.ForeignKey('Dept', models.CASCADE, verbose_name="部门")

class Meta:

verbose_name = "员工信息"

verbose_name_plural = "员工信息表"

class Dept(models.Model):

name = models.CharField(max_length=32, verbose_name="部门名称")

class Meta:

verbose_name = "部门"

verbose_name_plural = "部门表"

字段里面,部分是有位置参数的,所以就省略了 verbose_name= 这些内容。

表名有2个变量,verbose_name就是自定制表名了,但是显示的时候会在表名后面加个“s”,这是英文的做法。verbose_name_plural这个参数,就是替换掉英文加s的显示的内容了,这里我统一在后面加了个“表”。

正确显示记录

现在添加好记录的后,看到的是 UserInfo object (1) 或 Dept object (1) 这样。这里其实和print打印出来的结果一一样的,直接显示了对象。为对象添加 __str__ 方法后,就能正常显示了。最后修改后的表结构如下:

class UserInfo(models.Model):

name = models.CharField(max_length=32, verbose_name="员工姓名")

age = models.PositiveSmallIntegerField("年龄")

gender_choice = ((1, "男性"), (2, "女性"))

gender = models.SmallIntegerField("性别", choices=gender_choice)

dept = models.ForeignKey('Dept', models.CASCADE, verbose_name="部门")

class Meta:

verbose_name = "员工信息"

verbose_name_plural = "员工信息表"

def __str__(self):

return self.name

class Dept(models.Model):

name = models.CharField(max_length=32, verbose_name="部门名称")

class Meta:

verbose_name = "部门"

verbose_name_plural = "部门表"

def __str__(self):

return self.name

创建用户及权限分配

这里是用admin的后台管理页面创建用户,直接点击默认的“认证和授权”下面的“用户”表,就可以创建记录。

这里要注意,输入了新用户的用户名、密码和确认密码后,就完成了用户的创建,但是这个用户并不能登录。随后会有一个修改用户的界面,都是中文就不细说了。就是这里要勾选一下 “职员状态(指明用户是否可以登录到这个管理站点。)” 这个复选框,该账号才可以登录。

只勾选了上面的复选框,可以实现登录,但是近来是什么也看不到的。在往下还有 “用户权限” ,默认所有的账户都是一张表的权限都没有的,包括超级管理员。但是超级管理员的账户勾选了 “超级用户状态(指明该用户缺省拥有所有权限。)” 所以无视这个设置。

普通用户就需要在这里添加权限了。这里有包括django默认的表以及我们自己创建的表。权限比较粗,基本上就是控制这个用户可以操作那些表,我没找到只读权限。

这里只要给账户 “auth|用户|Can change user” 这一个权限,它就可以为所欲为了,包括把自己变成超管或者把别的超管去掉。

admin.py的设置

这里除了注册我们自己的表以外, 还可以通过继承并重构 admin.ModelAdmin 里面的部分属性,获得更好的管理效果。

设定默认显示

点开员工信息表,能看到现在只显示一列。默认显示的属性是 list_display = ('__str__',) ,所以原本显示的是对象,这里我们已经在类里重构了 __str__ 方法,现在显示的name了。但是只显示name还不够,现在要把所有的字段都显示出来:

from app01 import models

class UserInfoAdmin(admin.ModelAdmin):

list_display = ('name', 'age', 'gender', 'dept')

admin.site.register(models.UserInfo, UserInfoAdmin)

admin.site.register(models.Dept)

这里就是创建一个类,继承admin.ModelAdmin这个类,然后用自己的 list_display 属性覆盖掉原来的。然后注册的函数后面再把这个自己的类作为参数加上,就可以按照我们的设置显示字段和内容了。

开启搜索功能

继续在类里添加下面的属性:

search_fields = ('name', 'age')

添加了搜索的属性以后,就会出现一个搜索框。直接搜内容按搜索吧。这里没把部门的字段加进去所以不会按部门搜。另外这里也没加性别的字段,如果有性别的字段,那么也只能搜索数据库里的值,也就是数字1和2。

开启过滤器

继续在类里添加下面的属性:

list_filter = ('gender', 'dept')

添加了过滤器后,右边就会出现一个过滤器的部件,也可以帮助我们筛选记录。选项特别适合用过滤器来筛选。

开启分页

就是限制每页显示的记录数

继续在类里添加下面的属性:

list_per_page = 3

防止记录太多,记得设置分页。

修改外键字的的管理方法

继续在类里添加下面的属性,这里只能把外键加进去:

raw_id_fields = ('dept',)

原本外键的位置是一个下拉的select列表,现在变成了input框,里面是对应的数据库的值(即id)。不过后面有个搜索按钮,可以点开来选择对象的选项。单选并且选项多的时候,可以提升使用的体验。

如果是多对多的外键,需要用这个:

filter_horizontal = () # 这里并没有多对多的字段,就空着吧

这个的效果可以参考用户权限分配里的用户组合用户权限的操作,多选的情况这么设置可以有更好的体验。

这里的两个方法,就是提供多选和单选操作的方便性。

在显示列表中直接修改

继续在类里添加下面的属性:

list_display = ('name', 'age', 'gender', 'dept')

list_editable = ('age', 'gender', 'dept')

这里要搭配list_display一起用,就是显示出来的列表中,哪些字段是可以直接在列表中修改的,这种就不用一个一个点进去改了。不过list_display里的第一个元素是不能修改的,否则会报错。

自定义action

默认每张表都是一个Delete的action,另外这个action是可以自己定制的,现在在类里这么加:

actions = ('test_action',)

def test_action(self):

pass

此时再打开表,查看Action的下拉列表就能看

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值