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 是先查找工程模板目录是否有模板页面。

自定义管理页面首页

做法和上面类似
基于51单片机,实现对直流电机的调速、测速以及正反转控制。项目包含完整的仿真文件、源程序、原理图和PCB设计文件,适合学习和实践51单片机在电机控制方面的应用。 功能特点 调速控制:通过按键调整PWM占空比,实现电机的速度调节。 测速功能:采用霍尔传感器非接触式测速,实时显示电机转速。 正反转控制:通过按键切换电机的正转和反转状态。 LCD显示:使用LCD1602液晶显示屏,显示当前的转速和PWM占空比。 硬件组成 主控制器:STC89C51/52单片机(与AT89S51/52、AT89C51/52通用)。 测速传感器:霍尔传感器,用于非接触式测速。 显示模块:LCD1602液晶显示屏,显示转速和占空比。 电机驱动:采用双H桥电路,控制电机的正反转和调速。 软件设计 编程语言:C语言。 开发环境:Keil uVision。 仿真工具:Proteus。 使用说明 液晶屏显示: 第一行显示电机转速(单位:转/分)。 第二行显示PWM占空比(0~100%)。 按键功能: 1键:加速键,短按占空比加1,长按连续加。 2键:减速键,短按占空比减1,长按连续减。 3键:反转切换键,按下后电机反转。 4键:正转切换键,按下后电机正转。 5键:开始暂停键,按一下开始,再按一下暂停。 注意事项 磁铁和霍尔元件的距离应保持在2mm左右,过近可能会在电机转动时碰到霍尔元件,过远则可能导致霍尔元件无法检测到磁铁。 资源文件 仿真文件:Proteus仿真文件,用于模拟电机控制系统的运行。 源程序:Keil uVision项目文件,包含完整的C语言源代码。 原理图:电路设计原理图,详细展示了各模块的连接方式。 PCB设计:PCB布局文件,可用于实际电路板的制作。
【四旋翼无人机】具备螺旋桨倾斜机构的全驱动四旋翼无人机:建模与控制研究(Matlab代码、Simulink仿真实现)内容概要:本文围绕具备螺旋桨倾斜机构的全驱动四旋翼无人机展开研究,重点进行了系统建模与控制策略的设计与仿真验证。通过引入螺旋桨倾斜机构,该无人机能够实现全向力矢量控制,从而具备更强的姿态调节能力和六自由度全驱动特性,克服传统四旋翼欠驱动限制。研究内容涵盖动力学建模、控制系统设计(如PID、MPC等)、Matlab/Simulink环境下的仿真验证,并可能涉及轨迹跟踪、抗干扰能力及稳定性分析,旨在提升无人机在复杂环境下的机动性与控制精度。; 适合人群:具备一定控制理论基础和Matlab/Simulink仿真能力的研究生、科研人员及从事无人机系统开发的工程师,尤其适合研究先进无人机控制算法的技术人员。; 使用场景及目标:①深入理解全驱动四旋翼无人机的动力学建模方法;②掌握基于Matlab/Simulink的无人机控制系统设计与仿真流程;③复现硕士论文级别的研究成果,为科研项目或学术论文提供技术支持与参考。; 阅读建议:建议结合提供的Matlab代码与Simulink模型进行实践操作,重点关注建模推导过程与控制器参数调优,同时可扩展研究不同控制算法的性能对比,以深化对全驱动系统控制机制的理解。
标题中的"EthernetIP-master.zip"压缩文档涉及工业自动化领域的以太网通信协议EtherNet/IP。该协议由罗克韦尔自动化公司基于TCP/IP技术架构开发,已广泛应用于ControlLogix系列控制设备。该压缩包内可能封装了协议实现代码、技术文档或测试工具等核心组件。 根据描述信息判断,该资源主要用于验证EtherNet/IP通信功能,可能包含测试用例、参数配置模板及故障诊断方案。标签系统通过多种拼写形式强化了协议主题标识,其中"swimo6q"字段需结合具体应用场景才能准确定义其技术含义。 从文件结构分析,该压缩包采用主分支命名规范,符合开源项目管理的基本特征。解压后预期可获取以下技术资料: 1. 项目说明文档:阐述开发目标、环境配置要求及授权条款 2. 核心算法源码:采用工业级编程语言实现的通信协议栈 3. 参数配置文件:预设网络地址、通信端口等连接参数 4. 自动化测试套件:包含协议一致性验证和性能基准测试 5. 技术参考手册:详细说明API接口规范与集成方法 6. 应用示范程序:展示设备数据交换的标准流程 7. 工程构建脚本:支持跨平台编译和部署流程 8. 法律声明文件:明确知识产权归属及使用限制 该测试平台可用于构建协议仿真环境,验证工业控制器与现场设备间的数据交互可靠性。在正式部署前开展此类测试,能够有效识别系统兼容性问题,提升工程实施质量。建议用户在解压文件后优先查阅许可协议,严格遵循技术文档的操作指引,同时需具备EtherNet/IP协议栈的基础知识以深入理解通信机制。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值