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管理工具的主要内容,如果未能解决你的问题,请参考以下文章

Django内置 Admin

Django之admin中管理models中的表格

admin

django1.6 admin不能登录

Django admin后台操作

Django-admin管理工具