`
剑事
  • 浏览: 62971 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Django 1.0 中文文档-----指导 第二部分 自动生成管理工具

阅读更多

 

编写你第一个Django应用,第二部分

 

我们接着上篇指导开始,我们继续这个网页投票应用,致力于Django自动管理接口部分。

 

 

理念

 

为你的工作人员和客户开发一个网站增删改管理是一个单调乏味无创意的工作,因此Django实现了完全自动的做到了自动创建模型管理接口的功能。

Django在新闻工作室环境中诞生,他很明确的将内容发布人员和网站分割开来,网站管理人员通过系统发布新闻报道,时间,体育赛事等等,这些内容被显示在网站上,django解决了通过统一管理接口编辑网站内容。

网站管理是为管理人员提供的,对网站访问用户是不需要的。

 

激活管理系统

 

Django管理系统默认是没有激活的,如果你要安装激活他需要做下面三件事。

 

  • 添加 "django.contrib.admin" 到你的 INSTALLED_APPS 设置里

  • 运行 python manage.py syncdb . 在你加入新的应用到 INSTALLED_APPS , 数据库表需要更新

  • 编辑 mysite/urls.py 文件 取消 “Uncomment the next two lines...” 下面的注释, 这是个URL配置文件; 我们将会在下篇指导中讲述URL. 现在, 我们需要如下修改urls.py文件。

  •  


    from django.conf.urls.defaults import *
    
    # Uncomment the next two lines to enable the admin:
    from django.contrib import admin
    admin.autodiscover()
    
    
    urlpatterns = patterns('',
        # Example:
        # (r'^mysite/', include('mysite.foo.urls')),
    
        # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
        # to INSTALLED_APPS to enable admin documentation:
        # (r'^admin/doc/', include('django.contrib.admindocs.urls')),
    
        # Uncomment the next line to enable the admin:
        (r'^admin/(.*)', admin.site.root),
    
    )
    
     


    加粗的几行就是需要取消注释的部分。

     

    启动服务

     

    我们启动服务查看管理接口。

    像指导第一部分里提到的那样执行

     

    python manage.py runserver
     

     

    现在我们在浏览器里访问地址 http://127.0.0.1:8000/admin/ 你应该会看到下面的登陆页面

     

    Django admin login screen  

     

    进入管理系统

     

    现在登陆进去,账号就是在上篇里创建(syncdb)的账号,你会看到下面的页面

     

    Django admin index page  

     

    你会看到其他几个内容,用户,用户组,网站。这几个功能是Django默认提供的。

     

    将投票应用加入到管理

     

    你会发现投票应用没有在管理界面上。

     

    需要做一件事,我们需要把投票poll对象注册到管理接口,在工程polls 目录里我们创建admin.py 文件,编辑为以下内容

     

    from mysite.polls.models import Poll
    from django.contrib import admin
    
    admin.site.register(Poll)
    
     

    你需要重新启动服务,通常文件被修改后服务会自动重新加载,但是创建新文件服务不会自动重新加载。

     

    查看自由的管理功能

     

    现在我们注册完poll,Django知道要把他显示在管理界面上。

     

    Django admin index page, now with polls displayed  

     

    点击"Polls." 进入polls的修改列表页面,这里显示了数据库里所有的polls,你可以选择一个进行修改,有个“What's up”记录是我们前面创建的。

     

    Polls change list page  

     

    点击“What's up”记录修改,进入编辑页面

     

    Editing form for poll object  

     

    注意事项

     

  • 表单是根据poll模型自动生成的。
  • 不同的字段类型(DateTimeField , CharField ) 相当于相应的html输入组件. 每种字段类型知道如何显示在管理页面上
  • 每个DateTimeField 有自由的javascript快捷组件. 日期有个"Today" 快捷输入和一个日期弹出组件, 时间有个 "Now" 快捷输入和一个时间弹出输入组件.
  •  

    在底部页面给出几个选项

     

  • Save -- 保存修改并返回这个对象的列表.
  • Save and continue editing -- 保存并继续修改
  • Save and add another -- 保存并继续添加新记录
  • Delete -- 进入一个删除确认页面.
  •  

    点击"Today" 和 "Now"改变"Date published",然后点击 "Save and continue editing.",然后点击页面右上角"History" ,
    你会看到一个修改日志的列表,包含时间修改人用户名,这是管理系统自动记录的。

     

    History page for poll object  

     

    自定义管理界面表单

     

    仅仅几分钟的时间,你会惊奇的发现实现这些功能你没有写代码,当你调用admin.site.register(Poll),django就会让你能编辑对象,并能猜到如何显示在管理界面中,通常你会需要控制管理界面的显示和工作,当你注册对象到管理接口,你可以设置一些选项。

     

    让我们看下如何通过定制表单字段工作,用下面代码替换admin.site.register(Poll):

     


    class PollAdmin(admin.ModelAdmin):
        fields = ['pub_date', 'question']
    
    admin.site.register(Poll, PollAdmin)
    
     

    遵循这个方式,创建一个管理对象模型,以第二个参数传递给admin.site.register(),你可以用这个对象修改管理选项。

    这个修改使表单里"Publication date"显示在'que stion'的上方

     

    Fields have been reordered  

    当然只有两个字段这个功能不会让人深刻,如果一个表单有好多字段,排序就显得很重要很实用。

     

    字段数量多的表单,可以分割多个字段组

     

    class PollAdmin(admin.ModelAdmin):
        fieldsets = [
            (None,               {'fields': ['question']}),
            ('Date information', {'fields': ['pub_date']}),
        ]
    
    admin.site.register(Poll, PollAdmin)
    
     

     

    Form has fieldsets now  

     

    你可以为每个字段组随意指定classes,django提供"collapse" class显示特别的字段组,当表单很长的时候,这个功能就很重要了。

     

    class PollAdmin(admin.ModelAdmin):
        fieldsets = [
            (None,               {'fields': ['question']}),
            ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
        ]
    
     

     

    Fieldset is initially collapsed  

    添加关系对象

     

    好,我们已经有了polls管理界面,但是poll有多个选项,管理界面还没有显示选项编辑。

    有两个方法

    首先注册Choice

     

    from mysite.polls.models import Choice
    
    admin.site.register(Choice)
    
     

    现在choice显示出来

     

    Choice admin page  

     

    在这个表单里,"Poll" 字段selectbox包含数据库所有Polls,django知道如何描述外键,使用select box,在这里目前只有一个poll选项。

     

    也注意一下poll旁边的"Add Another",每个对象都可以通过外键自由关联,当你点击"Add Another"会弹出页面显示一个增加POLL的表单,你添加一个POLL后,DJANGO会自动的把新加的POLL也添加到ADD CHOICE 表单POLL下拉表中。


    但是,实际上这样添加投票选项是个低效率的办法,有更好的批量添加选项的方法。

    去掉 register() ,作一下修改



     class ChoiceInline(admin.StackedInline):
         model = Choice
         extra = 3
    
    
     class PollAdmin(admin.ModelAdmin):
         fieldsets = [
             (None,               {'fields': ['question']}),
             ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
         ]
         inlines = [ChoiceInline]
    
     admin.site.register(Poll, PollAdmin)
     

    这样告诉DJANGO 在POLL编辑页面上默认提供3个选项表单。如下

    Add poll page now has choices on it

    这样的话就可以一次添加三个,不过还是有一点不足,这样比较站屏幕,我们对ChoiceInline做下修改

     class ChoiceInline(admin.TabularInline):
         #...
     

      用 TabularInline 代替 StackedInline 显示布局如下


      Add poll page now has more compact choices


      自定义管理界面修改列表

       

      现在poll的管理界面看着已经不错了,我门拉伸下修改列表页面,现在是下面这个样子:

      Polls change list page

       

      默认情况下 DJANGO 显示 对象的str(),但是有时候一个个显示出需要的字段是很有帮助的,我们使用 list_display管理选项



       class PollAdmin(admin.ModelAdmin):
           # ...
           list_display = ('question', 'pub_date')
       好的 在把 was_published_today 也包含进来

       class PollAdmin(admin.ModelAdmin):
           # ...
           list_display = ('question', 'pub_date', 'was_published_today')
       
      Polls change list page, updated
      点击列表上的列标题可以针对相应的列排序除了was_published_today,因为他不是数据库字段,默认情况下
      was_published_today标题会用替换下划线为空格后的字符串,当然这个我们也可以自定义

       def was_published_today(self):
           return self.pub_date.date() == datetime.date.today()
       was_published_today.short_description = 'Published today?'
       
      让我们继续改进POLL修改列表,增加过滤。

        list_filter = ['pub_date']
       
      右边增加了一个导航条

      Polls change list page, updated
      DJANGO默认给了几个选项 "Any date," "Today," "Past 7 days," "This month," "This year."

      这样不错,我们再加个搜索功能
       search_fields = ['question']
       
      这样会在顶部添加一个搜索框,同样可以加入其他字段查询,因为这里用的是like查询,所以要合理使用。

      自定义管理界面外观

      确实,每个管理页面标题都是
      "Django administration"是不合适的,这个很容易修改,
      打开配置文件 mysite/settings.py,找到 TEMPLATE_DIRS 设置, TEMPLATE_DIRS 里配置一些路径,当DJANGO 加载的时候,会到这些路径里查找模板。

      默认TEMPLATE_DIRS   是空的,我们添加自己的模板路径。如下:

       TEMPLATE_DIRS = (
           "/home/my_username/mytemplates", # Change this to your own directory.
       )
       
      现在从你的DJANGO路径里复制admin/base_site.html 到你的工程模板目录里
      /home/my_username/mytemplates/admin/base_site.html .
      然后修改文件替换为你的标题,这样 base_site.html 就被现在的覆盖了 ,DJANGO 是先查找工程模板目录是否有模板页面。

      自定义管理页面首页

      做法和上面类似
      4
      0
      分享到:
      评论
      1 楼 fengsage 2009-02-03  
      谢谢啊!!非常不错的翻译~~辛苦了!

      相关推荐

        django1.0文档

        这个“django1.0文档”是官方提供的详尽指南,包含了关于 Django 1.0 的所有核心概念、功能和最佳实践,对于开发者来说是一份非常宝贵的资源。 **Django 框架基础** 1. **模型(Models)**: Django 的核心之一是它...

        Django 1.0 中文文档.doc

        《Django 1.0 中文文档》是一个详尽的指南,主要针对初学者,旨在帮助读者快速掌握Django框架的基础知识。在这个文档中,首先介绍了如何编写你的第一个Django程序,通过创建一个简单的投票应用来引导学习者逐步了解...

        Django1.0速查手册_Django 1.0 Cheat sheet

        通过以上详细解析,我们可以看到Django 1.0速查手册覆盖了框架中广泛使用的模板标签和过滤器,这些工具对于高效开发Web应用程序至关重要。无论是初学者还是经验丰富的开发者,在面对日常开发任务时,都能从中找到所...

        PyPI 官网下载 | pyGDM2-1.0.11.1-cp38-cp38-win_amd64.whl

        `pyGDM2`作为Python库的一员,很可能提供了一些特定的工具或服务,如数据处理、图形生成、网络通信等,但具体功能需要查阅该库的文档或源代码才能详细了解。 为了使用`pyGDM2`库,开发者首先需要将下载的`.whl`文件...

        Django 1.0 Cheat Sheet

        ### Django 1.0 Cheat Sheet 知识点详解 #### 概述 "Django 1.0 Cheat Sheet" 是一份非常实用的参考资料,为开发者提供了关于 Django 1.0 版本中的各种模板标签和过滤器的快速查阅指南。这份文档涵盖了从基本的文本...

        PyPI 官网下载 | django_cape-1.0.tar.gz

        10. **开发实践**:在实际开发中,开发者可能会利用`django_cape`来扩展Django的功能,比如增加新的管理界面、数据处理逻辑或集成第三方服务。 通过上述内容,我们可以看出`django_cape-1.0.tar.gz`是一个基于...

        Django book pdf 完整版

        - **第2章:入门** - 提供了安装指南、环境配置以及快速上手的第一个项目示例。 - **第3章:动态网页基础** - 讲解了动态页面的概念,包括请求与响应的工作原理。 - **第4章:Django模板系统** - 深入探讨了Django的...

        EnableCE在线会议活动管理系统 1.0

        EnableCE在线会议活动管理系统1.0是一款专为组织和管理线上会议及活动设计的软件解决方案。这个系统旨在提供一个高效、便捷的平台,使用户能够轻松地创建、管理和参与各种类型的在线活动,如研讨会、培训课程、网络...

        python模块下载及安装方法.docx

        ### Python模块下载及安装方法详解 #### 概述 Python作为一种广泛应用的高级编程...需要注意的是,随着技术的发展,部分库可能已经更名或有更新的替代品出现,在实际使用前建议查阅最新的官方文档获取最准确的信息。

        archive_ plainCms异步协程内容管理系统 v1.0 [江西新余电信].zip.zip

        "archive_ plainCms异步协程内容管理系统 v1.0 [江西新余电信].zip.zip" 这个文件标题揭示了几个关键信息点。首先,"plainCms"是这个系统的名称,它是一个内容管理系统(CMS)。"异步协程"表明该系统可能采用了并发...

        django框架基于模板 生成 excel(xls) 文件操作示例

        - **Django模板**:Django框架提供了强大的模板系统,支持变量填充和逻辑控制等功能,非常适合用来生成这类格式化的XML文档。 ##### 2.2 实现步骤 1. **准备XML模板**:首先需要根据Excel的要求准备一个XML模板文件...

        瑞蛋强强联合1.0.zip

        2. **解压工具**: 如WinRAR、7-Zip等用于解压ZIP文件的软件。 3. **版本号**: "1.0"通常代表软件的第一个正式版本,表示产品开发的一个重要里程碑。 4. **文件结构**: 压缩包内文件的组织方式,可能包含源代码、文档...

        [博客空间]Nbs博客系统 v1.0 beta 无限级分类版_nbs1.0beta.zip

        【博客空间】Nbs博客系统 v1.0 beta 无限级分类版是一个专门为博主们打造的开源博客系统,旨在提供一个高效、灵活且易于管理的平台。这个版本为beta测试版,意味着它正处于开发阶段,可能包含一些未解决的问题,但...

        Python修炼之道V1.0.pdf

        标题《Python修炼之道V1.0.pdf》和描述《Python修炼之道V1.0.pdf》暗示这是一份关于Python编程语言的文档。基于此,我们可以生成一系列与Python编程有关的知识点。以下是Python编程语言的主要知识点: 1. Python...

        [CMS程序]hutula CMS v1.0 正式版_hutula.zip

        2. 图片管理:内置图片上传和管理工具,支持缩略图生成、图片预览等功能。 3. 插件扩展:提供丰富的插件接口,通过安装插件可以扩展网站功能,如评论、统计、社交分享等。 4. 数据备份与恢复:内置数据备份功能,...

        [博客空间]Nbs博客系统 v1.0_nbs.zip

        【博客空间】Nbs博客系统 v1.0 是一个专为个人或小型团队设计的博客平台,它提供了方便快捷的方式来创建、管理和分享个人思想、经验和技术知识。这个系统的出现,旨在帮助用户构建属于自己的在线空间,展示自己的...

        Python库 | wireui_TheTimmoth-0.1.0a1-py3-none-any.whl

        7. **文档**:良好的文档是开源项目的关键,Python有Sphinx这样的工具生成专业文档。 8. **持续集成/持续部署(CI/CD)**:如Jenkins和Travis CI用于自动化构建和测试过程,提高开发效率。 `wireui_TheTimmoth` 库...

        graduation-main (3) (1).zip

        9. 文档编写:良好的项目文档是必要的,包括用户手册、API文档、技术文档等,可以使用Markdown或专门的文档工具如Sphinx生成。 10. 项目管理:可能使用项目管理工具如Trello、Asana或Jira来跟踪任务、里程碑和进度...

        callCEs_v1.0

        8. **Web应用框架**:如果callCEs_v1.0是作为Web服务的一部分,可能使用Flask或Django等框架构建后端接口,与前端交互。 9. **测试**:考虑到是正式版本,应该包含了单元测试和集成测试,确保代码的质量和稳定性,...

        Django中使用第三方登录的示例代码

        OAuth2.0协议相对于早期的1.0版本,在安全性方面进行了重大改进,现在是实现第三方登录的主要方式。 在Django框架中实现第三方登录,通常需要使用OAuth2.0协议。开发者需要向相应的第三方服务提供者申请授权应用。...

      Global site tag (gtag.js) - Google Analytics