Django -- admin管理工具
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django -- admin管理工具相关的知识,希望对你有一定的参考价值。
对于某类网站,管理界面是很重要的。他可以添加、编辑、删除网站内容,但是创建管理界面繁琐而重复,并且界面千篇一律;django用不能再少的代码帮你做了这些繁琐的工作:它读取你模式中的元数据,然后提供给你强大并能立即工作的界面。
django.contrib是一套庞大的功能集,django基本代码的组成部分,它包含:
用户鉴别系统(django.contrib.auth)
支持匿名会话(django.contrib.sessioins)
用户评注系统(django.contrib.comments)等等;
Django自动管理工具是django.contrib的一部分(即django.contrib.admin)。你可以在项目的 settings.py 中的INSTALLED_APPS看到它:
【配 置 admin 管 理 界 面】
激 活 管 理 界 面
Django管理站点是可选的,所以我们可以选择开启或关闭,1.10.0默认开启,激活步骤如下:
1、确认配置文件中INSTALLED_APPS内‘auth‘、‘contenttypes‘、‘sessions‘是开启的,Django配置管理工具需要这3个包;
2、确认配置文件中MIDDLEWARE中‘django.middleware.common.CommonMiddleware‘、‘django.contrib.sessions.middleware.SessionMiddleware‘、‘django.contrib.auth.middleware.AuthenticationMiddleware‘是开启的。
3、创建账号:python manage.py createsuperuser
Username (leave blank to use ‘root‘): django
Email address: [email protected]
Password:
Password (again):
Superuser created successfully. (上节同步数据库时生成了auth等数据库表,可查看)
4、将urls.py中的admin访问路径注释取消,默认是开启的。
5、启动开发服务器,访问http://10.0.18.33:8002/admin/
附加:如果你想让界面变成中文,在配置文件的MIDDLEWARE内添加‘django.middleware.locale.LocaleMiddleware‘(这是一个中间件),一定要放在‘django.contrib.sessions.middleware.SessionMiddleware‘后面。
注 册 模 型 modle 到 管 理 界 面
vim ~/HelloWorld/mysql_django/admin.py
from django.contrib import admin **from mysql_django.models import Publisher, Author, Book **admin.site.register(Publisher) #将Publisher模块注册到管理工具 **admin.site.register(Author) **admin.site.register(Book)
完成后,再次访问,如果没出现重启下server,然后点点点创建编辑删除,并去理解Books模块与authors的多对多、与publisher外键的关系。
【admin 管 理 界 面 优 化】
自 定 义 模 块 类 显 示
vim ~/HelloWorld/mysql_django/models.py
................. class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) **# email = models.EmailField(blank=True) ** email = models.EmailField(blank=True,verbose_name=‘e-mail‘) **= email = models.EmailField(‘e-mail‘, blank=True) def __unicode__(self): return u‘%s %s‘ % (self.first_name,self.last_name) class Book(models.Model): title = models.CharField(max_length=50) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) ** publication_date = models.DateField(blank=True, null=True) def __unicode__(self): return self.title
代码解读:
1、blank=True 设置字段可选填,默认我们要为表单填写每一字段;
2、verbose_name=‘e-mail‘ 设置web界面字段标签,默认标签首字母大写、空格替代下划线。
附加:**= 是固定位置的参数传递,等上;但不适于ManyToManyField 和ForeignKey字段,因为他们第一参数必须是模块类。
3、blank=True 和 null=True 设置日期型(DateField、TimeField、DateTimeField)或数字型(IntegerField、DecimalField、FloatField)字段可选填。添加null=True比添加blank=True要复杂。前者改变了数据的定义,即create table时去掉了此字段上的not null,因此我们还要更新数据库:
检查语法:python manage.py check
生成迁移文件:python manage.py makemigrations mysql_django
同步文件至数据库:python manage.py migrate
转换成SQL语句查看:python manage.py sqlmigrate mysql_django 0003
附加:在SQL中,NULL值不同于空字符串,就像Python中None不同于空字符串。为了消除歧义,django默认为每个字段开始一直都加了NOT NULL,在管理工具中,你留空一个字符串,它会为此插入空字符串(不是NULL)。
以上是对模块级别的修改,如果针对管理工具级别的的特别模块修改则用ModelAdmin classes。
自 定 义 ModelAdmin 类 显 示
上一节我们在Author模块定义的unicode方法返回显示了first_name和last_name,我们继续改进
vim ~/HelloWorld/mysql_django/admin.py
from django.contrib import admin from mysql_django.models import Publisher, Author, Book # Register your models here. **class AuthorAdmin(admin.ModelAdmin): ** list_display = (‘first_name‘, ‘last_name‘, ‘email‘) ** search_fields = (‘first_name‘, ‘last_name‘) **class BookAdmin(admin.ModelAdmin): ** list_display = (‘title‘, ‘publisher‘, ‘publication_date‘) ** list_filter = (‘publication_date‘,) ** date_hierarchy = ‘publication_date‘ ** ordering = (‘-publication_date‘,) ** fields = (‘title‘, ‘authors‘, ‘publisher‘) ** filter_horizontal = (‘authors‘,) ** raw_id_fields = (‘publisher‘,) admin.site.register(Publisher) **admin.site.register(Author,AuthorAdmin) **admin.site.register(Book,BookAdmin)
代码解读:
1、新建AuthorAdmin和BookAdmin类,从django.contrib.admin.ModelAdmin派生出来的子类,供管理工具使用;
2、list_display定义字段名称的元组,用于列表显示;
3、search_fields 以first_name/last_name定义快速查询栏;
4、list_filter 创建日期型快捷方式过滤器,包含今天、过往七天等;
5、date_hierarchy 另一种时间过滤器,显示不如上个直观;
6、ordering 设置默认以publication_date的时间降序排列;
6、admin.site.register(Author/Book)后面添加了xxxxAdmin。可以理解: 用xxxAdmin选项注册xxxxx模块;
7、admin.site.register()函数接受ModelAdmin子类作第二参数,无第二参数则使用默认选项,如Publisher;
8、fields 定义表单(下章细讲),它隐藏了publication_date字段,限制了用户去更改它;
9、filter_horizontal 针对多对多字段的更个性化的选择删除,filter_vertical 和他一样,显示方式不一样,看个人喜好;
10、raw_id_fields 跳转新窗口选择外键字段,默认是下拉框,但如果publisher记录过多,装载并显示在下拉框会很费时;
【浅 析 admin 原理、目的、权限】
admin 如 何 工 作
1、django从urls.py引导URLconf,执行admin.autodiscover() 语句,函数遍历INSTALLED_APPS,寻找admin.py文件;
2、找到admin.py后,admin.site.register()注册模块,管理工具为注册过的显示一个编辑/修改界面;
3、Users和Groups源于应用程序django.contrib.auth自身的admin.py。
管 理 界 面 目 的
提供给非技术用户输入他们的数据。
用户、组、权限
以上因为我们是用超级用户登陆的,所以能创建、编辑、删除任何对象。但实际环境中显然是不能这样的,后面我们将详解用户权限与配置。首先这有一组布尔型标志:
1、活动标志:控制用户是否已激活,若为关闭状态,即使密码正确也无法登陆;
2、成员标志:控制用户是否可登陆管理界面,区分公众用户(编辑控制公众界面)和管理用户(编辑控制管理页面)
3、超级用户标志:赋予用户在管理界面所有权限,若账户有这标志,所有权限将被忽略。
注意:在创建用户时,我们定义用户权限,而权限是定义在模块级别,而不是对象级别;比如可以让小强修改任何图书,但不能让他修改机械工业出版的图书;
不能赋给用户修改用户权限的权限,否则他可以让自己变成超级管理员;最好为一个组分配用户,管理起来方便。
---------------------------------------------------------------------------------------------------
望和大家分享进步。如有不对之处,请多多指点。
本文出自 “北冰--Q” 博客,请务必保留此出处http://beibing.blog.51cto.com/10693373/1885945
以上是关于Django -- admin管理工具的主要内容,如果未能解决你的问题,请参考以下文章