Django 之管理界面

 

 

 为新增的books应用开启管理界面

1、项目/setting.py文件的修改

(a) 将‘django.contrib.admin‘加入setting的INSTALLED_APPS配置中 (默认已经有。INSTALLED_APPS中的配置顺序是没有关系的)

(b). 保证INSTALLED_APPS中包

含‘django.contrib.auth‘,‘django.contrib.contenttypes‘和‘django.contrib.sessions‘,

Django的管理工具需要这3个包(默认已经有)。

(c). 确保MIDDLEWARE_CLASSES包含‘django.middleware.common.CommonMiddleware‘

、‘django.contrib.sessions.middleware.SessionMiddleware‘

和‘django.contrib.auth.middleware.AuthenticationMiddleware‘(默认也有了)

2、`` book`` 例子中,我们定义了三个模块:Publisher 、 Author 和 Book 。

在``books`` 目录下(`` mysite/books`` ),创建一个文件:`` admin.py`` ,然后输入以下代码:

from django.contrib import admin

from .modelsimport Publisher,Author,Book   这里红色字的路径要注意

admin.site.register(Publisher)

admin.site.register(Author)

admin.site.register(Book)

这些代码通知管理工具为这些模块逐一提供界面

管理工具是如何工作的呢? 其实很简单。

当服务启动时,Django从``url.py`` 引导URLconf,然后执行``admin.autodiscover()`` 语句。 这个函数遍历INSTALLED_APPS配置,并且寻找相关的 admin.py文件。 如果在指定的app目录下找到admin.py,它就执行其中的代码。

在`` books`` 应用程序目录下的`` admin.py`` 文件中,每次调用`` admin.site.register()``都将那个模块注册到管理工具中。 管理工具只为那些明确注册了的模块显示一个编辑/修改的界面。

应用程序`` django.contrib.auth`` 包含自身的`` admin.py`` ,所以Users和Groups能在管理工具中自动显示。

其它的django.contrib应用程序,如django.contrib.redirects,其它从网上下在的第三方Django应用程序一样,都会自行添加到管理工具。

综上所述,管理工具其实就是一个Django应用程序,包含自己的模块、模板、视图和URLpatterns。 你要像添加自己的视图一样,把它添加到URLconf里面。你可以在Django基本代码中的django/contrib/admin 目录下,检查它的模板、视图和URLpatterns,但你不要尝试直接修改其中的任何代码,因为里面有很多地方可以让你自定义管理工具的工作方式。 (如果你确实想浏览Django管理工具的代码,请谨记它在读取关于模块的

元数据过程中做了些不简单的工作,因此最好花些时间阅读和理解那些代码。)

管理工具后台的设置

 1、设置字段可选

你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,

你想要某些字段是可选的。 举个例子,我们想要Author模块中的email字段成为可选,即允许不填。 在现实世界中,你可能没有为每个作者登记邮箱地址。

为了指定email字段为可选,你只要编辑Book模块(它在mysite/books/models.py文件里),

在email字段上加上blank=True。代码如下:

class Author(models.Model):

first_name = models.CharField(max_length=30)

last_name = models.CharField(max_length=40)

email = models.EmailField(blank=True )

这些代码告诉Django,作者的邮箱地址允许输入一个空值。 所有字段都默认blank=False,这使得它们不允许输入空值。

2、设置日期型和数字型字段可选

Django生成CREATETABLE语句自动为每个字段显式加上NOT NULL。但是,其它数据类型有例外:日期型、时间型和数字型字段不接受空字符串。如果你尝试将一个空字符串插入日期型或整数型字段,你可能会得到数据库返回的错误。所以日期型在数据库空值的话应该设置为NULL,所以Django中是这样配置:

class Book(models.Model):

title = models.CharField(max_length=100)

authors = models.ManyToManyField(Author)

publisher = models.ForeignKey(Publisher)

publication_date = models.DateField(blank=True, null=True)

3、自定义字段标签

在编辑页面中,每个字段的标签都是从模块的字段名称生成的。 规则很简单: 用空格替换下划线;首字母大写。例如:Book模块中publication_date的标签是Publication date。

然而,字段名称并不总是贴切的。有些情况下,你可能想自定义一个标签。 你只需在模块中指定verbose_name。

举个例子,说明如何将Author.email的标签改为e-mail,中间有个横线。

class Author(models.Model):

first_name =models.CharField(max_length=30)

last_name = models.CharField(max_length=40)

email = models.EmailField(blank=True, verbose_name=‘e‐mail‘ )

4、自定义ModelAdmi类

在前面我们定义Author对象的__unicode__()方法,用以同时显示作者的姓和名。

class Author(models.Model):

first_name =models.CharField(max_length=30)

last_name = models.CharField(max_length=40)

email = models.EmailField(blank=True,verbose_name=‘e‐mail‘)

def __unicode__(self):

return u‘%s %s‘ % (self.first_name, self.last_name)

对应后台界面如下:

我们可以在这基础上改进,添加其它字段,从而改变列表的显示。

我们将为Author模块定义一个ModelAdmin类。这个类是自定义管理工具的关键,其中最基本的一件事情是允许你指定列表中的字段。 打开books/admin.py并修改:

from django.contrib import admin

from mysite.books.models import Publisher,Author, Book

classAuthorAdmin(admin.ModelAdmin):

list_display = (‘first_name‘, ‘last_name‘,‘email‘)

admin.site.register(Publisher)

admin.site.register(Author, AuthorAdmin)

admin.site.register(Book)

修改后效果如下:

原理:

新建了一个类AuthorAdmin,它是从django.contrib.admin.ModelAdmin派生出来的子类,保存着一个类的自定义配置,以供管理工具使用。我们只自定义了一项:list_display, 它是一个字段名称的元组,用于列表显示。当然,这些字段名称必须是模块中有的。

我们修改了admin.site.register()调用,在Author后面添加了AuthorAdmin。你可以这样理解:

用AuthorAdmin选项注册Author模块。

admin.site.register()函数接受一个ModelAdmin子类作为第二个参数。如果你忽略第二个参数,Django将使用默认的选项。Publisher和Book的注册就属于这种情况。

5、在上面的基础增加一个搜索栏

继续修改books/admin.py

class AuthorAdmin(admin.ModelAdmin):

list_display = (‘first_name‘, ‘last_name‘, ‘email‘)

search_fields = (‘first_name‘, ‘last_name‘)

6、在Book上增加一个过滤器

修改books/admin.py 添加一个新的类 BookAdmin,使用list_filter(针对元组或列表) 或date_hierarchy(针对字符串)

class BookAdmin(admin.ModelAdmin):

list_display = (‘title‘,‘publisher‘,‘publication_date‘)

search_fields =(‘title‘,‘publisher‘)

date_hierarchy = ‘publication_date‘

list_filter =(‘publication_date‘,)  注意,因为是针对元组对象,这里如果只有一个属性的话,后面要加,号

ordering =(‘-publication_date‘,) 同样,因为是针对元组对象,这里如果只有一个属性的话,后面要加,号

admin.site.register(Publisher)

admin.site.register(Author,AuthorAdmin)

admin.site.register(Book,BookAdmin)

7、自定义编辑表单

以Books为例,用fields可以控制要显示或隐藏的内容和顺序

class BookAdmin(admin.ModelAdmin):

list_display =(‘title‘,‘publisher‘,‘publication_date‘)

search_fields = (‘title‘,‘publisher‘)

list_filter = (‘publication_date‘,)

date_hierarchy = ‘publication_date‘

ordering = (‘-publication_date‘,)

fields = (‘title‘,‘author‘,‘publisher‘, ‘publication_date‘)

8、多对多的选择框

使用filter_horizontal可以实现多对多的选择框,常用于10个以上选项

class BookAdmin(admin.ModelAdmin):

list_display = (‘title‘,‘publisher‘,‘publication_date‘)

search_fields = (‘title‘,‘publisher‘)

list_filter = (‘publication_date‘,)

date_hierarchy = ‘publication_date‘

ordering = (‘-publication_date‘,)

filter_horizontal = (‘authors‘,)  如果想垂直排列可以用filter_vertical= (‘authors‘,)

9、raw_id_fields

filter_horizontal和filter_vertical选项只能用在多对多字段上, 而不能用于 ForeignKey字段。 默认地,管

理工具使用`` 下拉框`` 来展现`` 外键`` 字段。但是,正如`` 多对多字段`` 那样,有时候你不想忍受因装载并显示

这些选项而产生的大量开销。 例如,我们的book数据库膨胀到拥有数千条publishers的记录,以致于book的

添加页面装载时间较久,因为它必须把每一个publishe都装载并显示在`` 下拉框`` 中。

解决这个问题的办法是使用`` raw_id_fields`` 选项。它是一个包含外键字段名称的元组,它包含的字段将被展

现成`` 文本框`` ,而不再是`` 下拉框`` 。

时间: 2024-10-14 12:32:38

Django 之管理界面的相关文章

Django后台管理界面

之前的几篇记录了模板视图.模型等页面展示的相关内容,这篇主要写一下后台admin管理界面的内容. 激活管理界面 Django管理站点完全是可选择的,之前我们是把这些功能给屏蔽掉了.记得上篇中Django模型模型安装小结中,我们把settings.py中的部分内容屏蔽了,并添加了一个app,如下 1 INSTALLED_APPS = ( 2 ## 'django.contrib.admin', 3 ## 'django.contrib.auth', 4 ## 'django.contrib.con

解决Django Admin管理界面样式表(CSS Style)丢失问题

我在配置django自带管理界面过程中登录http://domain.com/admin后台时出现样式表丢失的问题,界面变成了这样: 系统环境:centos6.5+nginx1.5.9+uwsgi2.0.4+django1.4.9 nginx配置文件: server {         listen       80;         server_name  www.omserver.com;         location / {             uwsgi_pass 192.16

django学习-管理界面、视图

django管理界面 设计背景 为你的员工或客户生成一个用户添加,修改和删除内容的后台是一项缺乏创造性和乏味的工作.因此,django全自动地根据模型创建后台界面. django产生于一个公众页面和内容发布者页面完全分离的新闻类站点的开发过程中. 站点管理人员使用管理系统来添加新闻.时间和体育时讯等,这些添加的内容被显示在公共页面上.django通过为站点管理人员创建统一的内容编辑界面解决了这个问题. 管理界面不是为了网站的访问者,而是为了管理者准备的. 创建一个管理员账号 首先,我们得创建一个

Django admin管理界面,管理界面变成中文,管理界面显示所有表,表名改成中文名

(一)管理界面变成中文 # 超级用户管理界面修改成中文( settings文件夹) LANGUAGE_CODE = 'zh-Hans' # 改为zh-Hans (二)管理界面显示所有表 管理界面显示所有表(admin.py文件夹) admin.site.register(User) admin.site.register(Blog) admin.site.register(Article) admin.site.register(Category) admin.site.register(Tag

【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题

配置Django Admin,关于如何启用请参考Django官方文档<Activate the admin site>.但是我在配置过程中登录http://example.com/admin后台时出现样式表丢失的问题,比如说界面变成了这样: 上网搜索了不少文档,多是Apache环境下的解决方案,我配置的是Nginx服务器,所以根据Apache的解决提示进而摸索办法,最终要解决这个问题我这里总结有3步(假设已经配置好admin登录系统): 1. 修改settings.py中STATIC_ROOT

python django web 管理界面admin工具简单部署

环境: A.centos 5.6 x64 B.python 2.7 C.django 1.6 1.创建一个项目 #python django-admin.py startproject test01 2.创建一个视图 #vim views.py #-*- coding: utf-8 -*- from django.http import HttpResponse def test_page(request): return HttpResponse("<p> my_test_proj

Django项目实践4 - Django网站管理(后台管理员)

http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类站点, 管理界面 是基础设施中很重要的一部分. 这是以网页和有限的可信任管理者为基础的界面,它能够让你加入,编辑和删除站点内容. 常见的样例: 你能够用这个界面公布博客,后台的站点管理者用它来润色读者提交的内容,你的客户用你给他们建立的界面工具更新新闻并公布在站点上.这些都是使用管理界面的样例. 创

Django站点管理——管理站点

参考文献: https://docs.djangoproject.com/zh-hans/2.0/ref/contrib/admin/ Django的admin站点 Django最强大的部分之一是自动管理界面. 它从您的模型中读取元数据,以提供快速,以模型为中心的界面,受信任的用户可以在其中管理您网站上的内容. 管理员的建议用途仅限于组织的内部管理工具. 它不是用于构建整个前端. 管理员有许多用于自定义的钩子,但要注意尝试专门使用这些钩子. 如果您需要提供一个更加以流程为中心的接口来抽象出数据库

frist Django app— 二、 Model和管理界面

Django是符合MVC架构的,这里现学习M—Model,而且Django自带了一个管理model(数据库)的界面,所以一并学习. Database 配置 编辑Django的配置文件settings.py进行配置 添加polls app,修改后如下 INSTALLED_APPS = [ 'django.contrib.admin', # 管理界面 'django.contrib.auth', # 认证系统 'django.contrib.contenttypes', # 框架的content t