您的位置:首页 > 编程语言 > Go语言

Django -- admin管理工具

2016-12-25 15:01 489 查看
对于某类网站,管理界面是很重要的。他可以添加、编辑、删除网站内容,但是创建管理界面繁琐而重复,并且界面千篇一律;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: django@qq.com
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、超级用户标志:赋予用户在管理界面所有权限,若账户有这标志,所有权限将被忽略。
注意:在创建用户时,我们定义用户权限,而权限是定义在模块级别,而不是对象级别;比如可以让小强修改任何图书,但不能让他修改机械工业出版的图书;
不能赋给用户修改用户权限的权限,否则他可以让自己变成超级管理员;最好为一个组分配用户,管理起来方便。
---------------------------------------------------------------------------------------------------
望和大家分享进步。如有不对之处,请多多指点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  管理工具 admin django