The Django Book:第6章 Django管理系统admin Web开发中有一些我们最讨厌的部分:开发管理界面
开发站点中公众可以看见的部分一直不一样也很有趣,但是管理用来编辑站点的部分一直是一样的
你不得不处理用户认证,显示和处理表单,处理狡猾的验证问题...这很无聊而且是重复性的
Django解决这个无聊、重复的任务的方式呢?已经帮你都做好了,只需几行不能再少的代码即可
Django中最老和最强大的部分就是自动管理界面,它从你的模型中取得元数据来提供强大的产品级的界面
内容制造者可以马上使用它给站点添加内容
激活管理界面 我们认为管理界面是Django中最cool的部分,大部分Djangonauts也同意这点
但是由于不是每个人都需要它,它是一个可选的部分
有3个步骤来激活管理界面:
1,向你的模型添加admin metadata
并不是所有的模型都可以或者应该被admin用户编辑,所以你需要标记那些需要管理界面的模型
上一章的Book模型添加一个管理界面的方法就是:
- class Book(models.Model):
- title = models.CharField(maxlength=100)
- authors = models.ManyToManyField(Author)
- publisher = models.ForeignKey(Publisher)
- publication_date = models.DateField()
-
- class Admin:
- pass
class Book(models.Model):
title = models.CharField(maxlength=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
class Admin:
pass
Admin声明标记这个类拥有一个管理界面,在Admin之下你可以配置许多选项
目前我们采用默认值,所以我们使用pass来表示Admin类是空的
如果你正在按这个例子写自己的代码,现在给Publisher和Author类添加Admin声明是个好主意
2,安装admin模型,简单的把"django.contrib.admin"添加到你的INSTALLED_APPS设置里
然后运行python manage.py syncdb来安装admin使用的额外的表
注意,在你第一次运行syncdb时,你很可能被问起是否创建一个superuser
如果那时你没有创建superuser,你需要运行djang/contrib/auth/bin/create_superuser.py
来创建一个admin用户,否则你就不能登录到管理界面里去
3,把URL模式添加到urls.py,如果仍在使用startproject创建的工程,admin的URL模式可能
已经在那儿了,但是被注释掉了,你的URL模式应该像这样:
- from django.conf.urls.defaults import *
-
- urlpatterns = patterns('',
- (r'^admin/', include('django.contrib.admin.urls')),
- )
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^admin/', include('django.contrib.admin.urls')),
)
就这样,现在运行python manage.py runserver来启动服务器,你将看到如下信息:
Validating models...
0 errors found.
Django version 0.96-pre, using settings 'mysite.settings'
Development server is running at
http://127.0.0.1:8000/ Quit the server with CONTROL-C.
现在你可以访问
http://127.0.0.1:8000/admin/,登录,然后随便玩玩
使用管理界面 管理页面设计用来给非技术人员使用,所有非常简单,但有几个地方需要注意
首先你将看到登录界面,可以用你第一次运行syncdb时创建的用户名和密码来登录
登录之后你将看到你可以管理用户,组和权限
每个声明了Admin的对象将显示在首页上,添加和编辑这两个链接将导向改动列表和编辑表单的页面
改动列表是系统中对象列表的首页
[img]http://media.djangobook.com/content/chapter06/changelist.png[/imag]
有很多选项来控制哪些域显示在这个列表中以及其它特性的外观,如日期格式,搜索域和过滤接口
下面会有对这些特性更多的解释
编辑表单用来编辑已有的对象和创建新对象
你的模型的每个域将显示在这里,不同的域类型有不同的显示界面,如日期和时间域是日历控件
而外键使用的是选择框等等
你会注意到admin也为你处理输入验证,试着留一个需要的域不填,或者在一个时间域里输入不合法的时间,你会看到当你保存时出现错误显示
验证是第7章讲到的一个强大的验证框架来做的
当编辑一个对象时你会在右上方看到一个历史链接,admin上的每一个改动都会被记入日志
你可以点击历史按钮来查看日志
admin里的删除是级联的,当你删除一个对象时,admin会让你确认删除动作以避免代价昂贵的错误
确认页面也会显示所有将被删除的相关的对象
用户,组,权限 既然你用superuser登录,你拥有创建,编辑和删除任何对象的权限
尽管如此,admin也有一个用户权限系统,你可以使用它来约束其它用户的访问权限
你可以像编辑其它对象一样来编辑这些用户和权限,用户和组模型的链接和其它你定义的对象一样显示在admin首页
用户对象有标准的用户名,密码,邮件和真实姓名域,以及一些定义用户在admin的权限的域
首先,这里有一些flags:
1,“is active”控制用户是否是活动的,如果这项flag为off,这个用户将不能访问任何需要登录的URL
2,“is staff”控制用户是否允许登录admin,由于第12章讲到这个用户系统同样被用来控制对public页面的
访问权限,这个flag对于public用户和管理员的含义不同
3,“is superuser”给予用户在admin的任何访问权限,普通的权限将被忽略
对于正常的admin用户,即活动的而非superuser的staff用户,他们的访问权限取决于一些被分配的权限
每个可以在admin编辑的对象拥有3个权限:创建权限,编辑权限和删除权限,给一个用户赋予权限将
允许用户访问这些权限所描述的页面
注意,对编辑用户和编辑权限的访问同样在这个权限系统控制,如果你给一个用户编辑用户的权限,
她将可以编辑她自己的权限,这可能是你的初衷!
你也可以给用户分配组,一个组就是一些权限,组的权限将分配给组的成员
给用户赋予一套数量很多的权限时组就很有用了
定制管理界面 有许多方式来定制admin的界面外观和行为,我们仅仅看其中跟我们的“Book”模型相关的一些
第12章详述了定制admin界面
现在books的改动列表仅仅显示模型的string展现,即__str__
这对于少量的books可以很好的工作,但是如果我们有成千上万的books,这将很难在干草推里找到唯一的那根针
尽管如此,我们可以给这个界面很方便的添加一些显示,搜索和过滤方法,编辑Admin定义:
- class Book(models.Model):
- title = models.CharField(maxlength=100)
- authors = models.ManyToManyField(Author)
- publisher = models.ForeignKey(Publisher)
- publication_date = models.DateField()
-
- class Admin:
- list_display = ('title', 'publisher', 'publication_date')
- list_filter = ('publisher', 'publication_date')
- ordering = ('-publication_date',)
- search_fields = ('title',)
class Book(models.Model):
title = models.CharField(maxlength=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
class Admin:
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publisher', 'publication_date')
ordering = ('-publication_date',)
search_fields = ('title',)
这些定义中的每一行都告诉admin来构建一个不同的界面:
1,ordering选项控制了对象在admin里面显示的顺序,它是对结果排序的域的列表
前面加一个减号将排反序,所以例子中我们对publication_date排序,最近的书将显示在最前面
2,list_display选项控制了在改动列表里哪些列将显示,默认情况下将只显示对象的string展示
这一个单独的列,这里我们显示title,publisher和publication_date
3,list_filter选项将在列表的右上方创建过滤器条,我们允许通过date和publisher来过滤
你可以让admin过滤任何域,但是外键或者有chioces属性集的域工作的更好
4,最后search_fields选项创建一个允许文本搜索的域,这里允许通过title域搜索
通过这里以及第12章描述的选项你可以只用几行代码构建一个强大的具备产品能力的编辑数据界面
定制管理系统的外观 显然在每个管理页面的顶端拥有一个“Django 管理系统”是很荒谬的,它只是一个占位文本
尽管如此,使用Django的模板系统可以很容易改变这点,Django的admin是Django自己支持的
它的界面使用Django自己的模板系统
打开mysite/settings.py看看TEMPLATE_DIRS设置,用来载入Django模板时检查文件系统目录
它是一个搜索的路径,默认情况下它是空的,下面我们加点东西来告诉Django我们的模板在哪:
- TEMPLATE_IDRS = (
- "/home/mytemplates", # Change this to your own directory.
- )
TEMPLATE_IDRS = (
"/home/mytemplates", # Change this to your own directory.
)
注意这里包括了最后的逗号,Python使用它来区分单元素元组和括号括起来的表达式
现在把admin/base_site.html从Django的admin模板目录(django/contrib/admin/templates)复制到
TEMPLATE_DIRS下的admin子目录下,admin是新建的子目录
然后编辑admin/base_site.html,用你自己的站点的名字替换Django文本
注意任何Django的默认admin模板都可以覆盖,只需像base_site.html一样覆盖模板
即从默认目录复制你的自定义目录然后改变这个副本
敏锐的读者可能想知道,如果TEMPLATE_DIRS默认是空的,Django是怎样找到默认的admin模板的?
答案是,默认情况下Django自动在每个app包下搜寻templates/子目录下的模板
看看第10章的“模板载入器”你将了解关于它的更多信息
定制管理系统首页 同样需要注意的是,你可能想定制Django的admin首页外观
默认时它将根据INSTALLED_APPS并按程序名排序显示所有的apps
尽管如此,你可能想改变这个显示顺序来使你更容易找到你要的apps
毕竟首页时admin最重要的页面,它应该很容易使用才行
需要定制的模板时admin/index.html,记得把admin/base_site.html复制到你的自定义模板目录
编辑这个文件,你将看到它使用模板标签{% get_admin_app_list as app_list %}
这就是得到所有安装的Django app的魔法所在
你可以用你认为最好的方法硬编码对象专有的admin页面来替换这个标签
如果你不太明白硬编码链接,可以参考第10章的实现你自己的模板标签的细节
Django在这个地方提供另一个捷径,运行python mange.py adminindex <app>来在admin首页模板
包含一些模板代码,开始时这十分有用
参考第12章关于定制Django的admin站点外观的细节
何时使用和为什么使用管理界面 我们认为Django的admin界面很神奇,事实上,我们称它为Django的一个“杀手级特性”
尽管如此,我们经常被问到admin的“use cases”这个问题,即什么时候我们使用它,以及为什么使用它?
这几年我们讨论了许多使用admin界面可能有帮助的模式
显然它对于编辑数据十分有用,如果你有一些数据输入的任务,admin就是你想要的
我们也发现admin在下面几种情况下十分有用:
1,检查数据模型,当我们定义一个新模型后第一件事就是在admin里面激活它并且输入一些模拟数据
发现一些数据模型错误是很常见的,有一个图形界面来揭露这些错误会很有用
2,管理需要的数据,例如对于chicagocrime.org有自动的数据数据产生源,但是当数据源出现问题,
我们可以通过admin很轻松的编辑数据
下一步是什么 到目前为止我们创建了一些模型并且配置了一个高级界面来编辑数据,下一章我们将进入到Web开发
真正的“肉和马铃薯”:表单创建和处理
所以,再弄一杯你最爱的饮料,让我们开始新的征程...
相关推荐
【Django的资产管理系统源码】是一套使用Python的Django框架编写的简易资产管理软件教程。这个系统虽然规模不大,但包含了实现一个完整管理系统的必要组件,是学习Django开发的良好实践案例。该项目构建在Django 2.2...
9. 自定义管理后台:Django的admin应用允许开发者快速创建一个后台管理系统,方便对数据进行CRUD操作。在OA系统中,开发者可以扩展admin,为管理员提供一个友好的操作界面。 10. 扩展与集成:Django的灵活性使得它...
- **第6章:Django管理站点** - 描述了Django的内置管理界面,以及如何定制和扩展它。 - **第7章:表单处理** - 讲述了如何创建和处理表单数据,包括验证和错误处理。 - **第8章:高级视图和URL配置** - 探讨了复杂...
【标题】"django管理系统项目"涉及的是使用Python的Django框架构建的一个管理系统的实现。Django是一个高级的、面向对象的Web开发框架,它强调可重用性和“开箱即用”的理念,允许开发者快速地构建高效且健壮的Web...
**Django开发公司Bug管理系统详解** Django是一个高级的Python Web框架,用于快速开发安全且可维护的网站。它强调代码复用,拥有丰富的第三方应用库,并提供了模型-视图-控制器(MVC)的设计模式,实际上在Django中...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用中广泛使用。其主要优点包括: 1. **高效性能**:MySQL采用了优化的查询执行引擎,能够在大量数据上实现高速读写操作。 2. **稳定性**:经过长...
- **第六章:Admin** - **自动生成管理界面**:介绍Django内置的admin模块,可以自动为应用生成管理后台。 - **自定义管理界面**:教授如何自定义管理界面,包括模型显示、过滤选项等。 - **第七章:表单** - **...
**Django教务管理系统详解** Django是一个基于Python的高级Web框架,用于快速开发安全且可维护的网站。在这个教务管理系统中,开发者利用Django的强大力量构建了一个简单的教学事务管理平台。尽管该系统的界面可能...
Django拥有丰富的第三方库,如Django REST framework用于构建RESTful API,Django Channels支持WebSocket通信,以及用于权限管理的Django Guardian等。 以上只是Django框架的基本介绍,实际上,Django的功能远不止...
#### 第六章:Admin - **内容**:介绍Django内置的管理站点功能,包括自动生成管理界面的方式。 #### 第七章:表单 - **内容**:讲解Django表单(forms)的概念及其在处理用户输入时的作用。 #### 第八章:高级...
- 管理界面(Admin):Django自动生成的后台管理界面,可以让开发者轻松管理和操作数据。 知识点五:Django框架中的高级特性 - 中间件(Middleware):提供了一种在请求/响应过程中插入额外的处理逻辑的方法。 - ...
Django 1.2.5适用于各种Web应用,如博客系统、电子商务平台、社交网络、内容管理系统等。开发者可以利用其强大的功能和丰富的第三方库,如Django Rest Framework进行API开发,或使用Celery进行异步任务处理。 总结...
### 第六章:Admin Django 内置了一个强大的管理后台,可以方便地管理应用程序中的数据。本章将介绍如何自动生成 admin 界面,以及如何对其进行定制化,以满足特定的需求。 ### 第七章:表单 表单是 Web 应用中...
【Python Django 客户关系管理系统概述】 Python Django 是一个高级的Web开发框架,它采用“DRY(Don't Repeat Yourself)”原则,旨在简化Web应用的构建过程。Django 提供了模型-视图-控制器(MVC)的架构模式,...
**2.8 编写第一个 Django 应用(第六部分)** - **管理后台**: 配置并使用 Django 自带的管理后台。 - **自定义管理**: 自定义 ModelAdmin 类。 **2.9 高级教程:如何编写可重用的应用** - **应用结构**: 可重用...
9. 后台管理系统:Django的Admin应用可以快速搭建后台管理界面,供管理员查看和管理用户、订单、菜品等数据。通过自定义ModelAdmin类,可以定制后台界面的显示和操作。 10. URL路由:Django的URL配置系统允许灵活...
5. **管理后台**:Django的admin应用,只需简单的注册模型,即可自动生成后台管理系统,方便开发者进行数据管理。 6. **文件上传**:Django内置了文件上传功能,通过Field类型如FileField和ImageField,可以方便地...
10. **社区与生态**: Django拥有活跃的开发者社区,丰富的第三方库(如Django Rest Framework用于RESTful API开发,django-cms用于内容管理系统等),以及详尽的文档,为开发者提供了强大的支持。 Django-1.8.18...
7. **管理界面**:Django自带的admin界面,可以快速创建后台管理系统,无需额外编码。 **四、Django进阶应用** 1. **中间件(Middleware)**:中间件是在请求和响应之间执行的代码,可以用来实现跨视图的功能,如...
12. **Django管理后台(Admin)**:只需简单配置,Django就能自动生成一个管理后台,用于管理模型实例,非常适合快速开发内部管理系统。 13. **社区与生态系统**:Django拥有活跃的开发者社区,提供了丰富的第三方...