利用 Django admin 完成更多任务 定制符合您需求的强大应用程

来源:developerWorks 中国 作者:Liza Daly
  
Django 提供的内置管理控制台是该产品最大的卖点之一。假如您要定制外观和模型字段以外的东西,应该怎么办呢?查看本文了解如何在不修改源程序的情况下扩展现有管理应用程序。

Django admin

Django 为未来的开发人员提供了许多功能:一个成熟的标准库,一个活跃的用户社区,以及 Python 语言的所有好处。虽然其他 Web 框架也声称能提供同样的内容,但 Django 的独特之处在于它内置了管理应用程序 —— admin。

admin 提供了开箱即用的高级 Create-Read-Update-Delete (CRUD) 功能,减少了重复工作所需的时间。这是许多 Web 应用程序的关键所在,程序员可以在开发时快速浏览他们的数据库模型;非技术最终用户可以在部署时使用 admin 添加和编辑站点内容。

在现实中,总需要执行某些定制操作。关于 admin 外观的基本情况,Django 文档提供许多指南,Django 自身也包含了一些简单的方法用来改写 admin 行为的子集。如果您需要更多功能怎么办呢?从哪里开始着手呢?本文将指导您如何进行一些高级 adimin 定制。

admin 快速浏览

大多数 Django 开发人员都很熟悉 admin 的默认功能。让我们快速回顾一下,首先编辑顶级 urls.py 启用 admin,见清单 1。


清单 1. 在 urls.py 中启用 admin
				from django.conf.urls.defaults import *

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Uncomment the next line to enable the admin:
    (r'^admin/(.*)', admin.site.root),
)

本文使用的软件版本
  • Django V1.0.2
  • SQLite V3
  • Python V2.4-2.6(Django 尚不支持 Python V3)
  • IPython(用作样例输出)

Django Object-Relational Mapper (ORM) 支持许多数据库后端,但是 SQLite 是最简单的安装方式,许多操作系统都附带 SQLite。这些样例也适用于其他后端。有关 Django 支持的数据库列表,请参见 参考资料。

Django 提供一个快速方式,可以使用独立代码设置工作环境:运行 python manage.py shell。本文中的所有代码样例都假设已经调用了该环境。在 Django lingo 中,假设如下:

  • 这是一个名为 more_with_admin 的 Django 项目。
  • more_with_admin 项目包含一个名为 examples 的应用程序。

examples 应用程序模拟基本的类博客文档系统,这些文档中还有多个评论(或没有)。所有命令行样例都来自 project root —— more_with_admin 主目录。

您还需要将 django.contrib.admin 应用程序添加到 settings.INSTALLED_APPS。

在继续下一步前,建议计划扩展 admin 的用户熟悉一下源代码。对于支持快捷键和符号链接的操作系统,创建一个指向 admin 应用程序的快捷键或符号链接会很有用。

admin 包含在 Django 包中。假如已经使用安装工具安装了 admin,则它位于 django/contrib/admin 下的 site-packages 中。以下是一个项目到 Django admin 源的符号链接样例,您可以根据操作系统和 Django 安装的位置定制,以便更轻松的复制和引用:


$ ln -s /path/to/Python/install/site-packages/django/contrib/admin admin-source

admin.autodiscover() 方法迭代设置 .INSTALLED_APPS 中的每个应用程序,并查找名为 admin.py 的文件。该文件通常位于应用程序目录的最上方,与 models.py 级别一样。

样例应用程序需要清单 2 中提供的 models.py。相应的 admin.py 如下所示。


清单 2. 该应用程序的样例 models.py
				from django.db import models

class Document(models.Model):
    '''A Document is a blog post or wiki entry with some text content'''
    name = models.CharField(max_length=255)
    text = models.TextField()
    
    def __unicode__(self):
        return self.name

class Comment(models.Model):
    '''A Comment is some text about a given Document'''
    document = models.ForeignKey(Document, related_name='comments')
    text = models.TextField()

现在,您可以通过运行 Django 开发服务器调用 admin:

python manage.py runserver

admin 可从默认位置 http://localhost:8000/admin/ 获取。登录之后,您可以看到基本的 admin 屏幕,如下所示。


图 1. 基本的 Django admin 屏幕
基本的 Django admin 屏幕

更改 admin.py 中的代码

与 Django 应用程序中的其他文件不同,如果使用 Django 开发 Web 服务器更改 admin.py,您可能需要手动重启服务器。

注意,您的模型现在尚不可用,因为您还没有创建 admin.py。清单 3 展示的代码让您能在 admin 中使用模型。


清单 3. 样例 admin.py
				from django.contrib import admin
from more_with_admin.examples import models

class DocumentAdmin(admin.ModelAdmin):
    pass

class CommentAdmin(admin.ModelAdmin):
    pass

admin.site.register(models.Document, DocumentAdmin)
admin.site.register(models.Comment, CommentAdmin)
      

现在如果您在 admin 中重载主页,您将看到可用的新模型,如下所示。


图 2. 可以支持定制模型的 Django admin
带有定制模型的 Django admin 屏幕





定制 admin 模型页面

admin 文件夹中的目录名称

注意,我使用模型的小写名称。这与生成 URL 时处理普通 admin 页面的方式是一致的。Django 调用支持 URL 的表格 slugs。如果您不确定给定的模型应该使用哪个 slug,可以在创建目录之前先浏览 admin 并留意出现在 URL 中的名称。

理解在不修改 Django 源代码的情况下如何定制 admin 的关键在于,记住 admin 像其他程序一样只是一个普通的 Django 应用程序。最重要的一点是,这意味着可以使用 Django 模版继承系统。

Django 的模版搜索顺序总是将您自己项目的模版排在其他系统之前。此外,admin 在恢复到默认情况前,会尝试搜索匹配每个模型的硬编码模版。这为轻松定制提供了一个扩展点。

首先,确保 Django 通过编辑项目的 settings.py 来查看您的模版目录。


清单 4. 编辑 settings.py 以查看模版目录
				
TEMPLATE_DIRS = (
    "/path/to/project/more_with_admin/templates",
    "/path/to/project/more_with_admin/examples/templates",
)

时间:2009-06-22 16:11 来源:developerWorks 中国 作者:Liza Daly 原文链接

好文,顶一下
(7)
87.5%
文章真差,踩一下
(1)
12.5%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量