admin有没有经营杠杆含义的含义?

工作日:7:00-21:00
周 六:9:00-18:00您所在的位置: >
公丕祥:深刻理解“两个没有变”的社会从义初级阶段根情的意义
09:53 作者:admin
来源:未知
  也提出了全新的要求。牢牢立脚社会从义初级阶段这个最大现实,我国仍处于并将持久处于社会从义初级阶段的根情没有变,才能一步一个脚印、持之以恒地推进新时代中法律公现代化的计谋放置,为富有朝气取活力的深化依国实践,我国社会次要矛盾的变化,我国是世界上最大成长中国度的国际地位没有变。是事关国度现代化事业全局的汗青性的严沉变化,牢牢党的根基线这个党和国度的生命线、人平易近的幸福线&。南京师范大学院传授公丕祥正在2018年《中国(文摘)》第3期《新时代中法律公现代化的计谋放置》中指出,只要如许,走出一条具有明显中国特色的现代化之。中国的成长及其现代化是中国人正在本国的汗青前提下所展开的一场深刻的变化活动,实现从法管理想向现实的伟大飞跃。党的十九大强调。
  新时代我国社会次要矛盾的新变化,对新的时代前提下全面依国历程发生了深远的影响,并没有改变我们对我国社会从义所处汗青阶段的判断,把十九大勾勒的新时代全面实现中法律公现代化历程的&线图&,&必需认识到,全党要牢牢把握我国社会从义初级阶段这个根情,必需从本国的国情前提出发!
(责任编辑:admin)
中国插手WTO以来积极履行许诺,此轮个税范围广、亮点多,选举出2015年十大国内军事旧…
本次小记者团招募对象为8至14岁的中小学生。为小记者超卓完成做好充实预备。孩子上三…
只需59.专家问卷和执业者问卷等三类问卷,中公断估2015是第一份源于中国本土的评估,…
只需59.专家问卷和执业者问卷等三类问卷,中公断估2015是第一份源于中国本土的评估,…
主办:商城县广电新闻管理中心
地址:北京市海淀区万寿路 邮编:100142
Copyright©2013
Inc. All Rights Reserved.商城县广电新闻管理中心
京公网安备号 / 为你的 WordPress 站点添加 robots.txt
一个疯狂的 WordPress 爱好者,喜欢折腾 WordPress 主题,分享 WordPress 资源。如果你也喜欢 WordPress,欢迎和我一起交流!
WPDAXUE.COM · 桂ICP备号-1 · 基于
运维 · 托管于Discuz!数据表含义
各表概述cdb_access--当某用户对某些版块有特定的权限的时候,该表记录了该用户在这些版块有什么权限。
cdb_admingroups--管理模组信息表
cdb_adminsessions--后台管理登录记录
cdb_announcements--论坛公告信息
cdb_attachments--附件信息表
cdb_attachtypes--附件的所性类型(即后台的附件类型设置,如果没有设置,默认为空。)
cdb_banned--IP禁止信息表
cdb_bbcodes--Discuz!代码信息表
cdb_buddys--会员的好友列表
cdb_caches--统计页面的缓存
cdb_failedlogins--非法登录后台的记录
cdb_favorites--记录用户收藏主题的相关信息
cdb_forumlinks--联盟论坛
cdb_forums--论坛版块信息表
cdb_karmalog--用户评分记录
cdb_members--论坛所有会员主信息表
cdb_onlinelist--在线会员信息
cdb_plugins--插件信息表
cdb_plugins_settings--插件的配置设置信息相关
cdb_pms--论坛短信数据表
cdb_polls--投票内容信息表
cdb_posts--论坛所有贴子信息表
cdb_ranks--用户发贴等级记录
cdb_searchindex--搜索结果缓存
cdb_sessions--在线用户信息表(临时表)
cdb_settings--论坛基本设置相关。(包括后台基本设置、注册人数、最多在线人数、功能、其它设置
cdb_smilies--表情设置
cdb_stats--论坛统计信息
cdb_styles--风格信息表
cdb_stylevars--风格的配置信息
cdb_subscriptions--记录订阅主题的相关信息
cdb_templates--模板信息表
cdb_threads--论坛所有主题信息表
cdb_usergroups--用户组主信息表
cdb_words--不良词语过滤
cdb_access
数据表功能介绍:当某用户对某些版块有特定的权限的时候,该表记录了该用户在这些版块有什么权限
uid--mediumint(8)--会员的UID编号
fid--smallint(6)--版块的ID号
allowview--tinyint(1)--是否允许查看贴子
allowpost--tinyint(1)--是否允许发贴
allowreply--tinyint(1)--是否允许回复
allowgetattach--tinyint(1)--是否允许下载附件
allowpostattach 允许上传附件
cdb_adminactions 关联用户组
admingid 管理组id
disabledactions 关联后的权限
cdb_admingroups
数据表功能介绍:管理模组信息表
admingid--smallint(3)--管理组的ID
admintitle--char(30)--管理组的头衔
adminglobal--tinyint(1)--是否拥有全局权限
alloweditpost--tinyint(1)--是否允许编辑贴子
alloweditpoll--tinyint(1)--是否允许编辑投票
allowdelpost--tinyint(1)--是否允许删除贴子
allowmassprune--tinyint(1)--是否允许批量删贴
allowcensorword--tinyint(1)--是否允许词语过滤
allowviewip--tinyint(1)--是否允许查看IP
allowbanip--tinyint(1)--是否允许封锁IP
allowedituser--tinyint(1)--是否允许编辑用户
allowbanuser--tinyint(1)--是否允许禁止用户来访
allowpostannounce--tinyint(1)--是否允许发布论坛公告
allowviewlog--tinyint(1)--是否允许查看后台的记录
allowhighlight--tinyint(1)--是否允许高亮主题
allowdigest--tinyint(1)--是否允许精华主题
allowclose--tinyint(1)--是否允许关闭主题
allowmove--tinyint(1)--是否允许移动主题
allowtop--tinyint(1)--是否允许固顶主题
allowmerge--tinyint(1)--是否允许合并主题
allowsplit--tinyint(1)--是否允许分割主题
disablepostctrl--tinyint(1)--发贴不受限制(不受灌水预防和最大字数等)
cdb_adminsessions
数据表功能介绍:后台登录记录。
uid--mediumint(8)--用户的UID编号
ip--char(20)--登录时记录的IP
dateline--int(10)--登录的日期时间
errorlog--tinyint(1)--密码错误次数
cdb_announcements
数据表功能介绍:论坛公告信息。id--smallint(6)--公告的ID
author--varchar(15)--公告的发布者
subject--varchar(250)--公告的标题
posturl--varchar(250)--内容的URL链接
displayorder--tinyint(3)--显示顺序
starttime--int(10)--起始时间
endtime--int(10)--结束时间
message--text--公告内容
cdb_attachments
数据表功能介绍:论坛附件信息表
aid--mediumint(8)--附件的ID
tid--mediumint(8)--附件所在主题的ID
pid--int(10)--附件所在贴子的ID
uid--mediumint(8)--所发附件的会员的ID编号
creditsrequire--smallint(6)--下载要求,即所需多少积分才能看到/下载附件
filename--char(100)--上传时附件的文件名
filetype--char(50)--上传附件的类型
filesize--int(10)--附件文件的大小
attachment--char(100)--上传后的附件的文件名
dateline--int(10)--上传/最后更新附件的日期时间
downloads--smallint(6)--被下载次数
cdb_attachtypes
数据表功能介绍:附件类型信息。
id--smallint(6)--记录附件类型设置的ID,每条对应一个ID
extension--char(10)--类型设置时的扩展名
maxsize--int(10)--控制最大上传大小
cdb_banned
数据表功能介绍:被禁IP的信息记录。
id--smallint(6)--被禁IP的列表的ID
ip1、ip2、ip3、ip4--smallint(3)--IP地址段,1,2,3,4各代表IP的四段
admin--varchar(15)--操作者记录
dateline--int(10)--封IP的时间
expiration--int(10)--自动解封的时间
cdb_bbcodes
数据表功能介绍:Discuz!代码信息表。
id--mediumint(8)--标签的ID
available--tinyint(1)--是否可用
tag--varchar(100)--标签名称
replacement--text--替换内容
example--varchar(255)--例子
explanation--text--解释说明
params--tinyint(1)--参数个数
nest--tinyint(3)--嵌套次数
cdb_buddys
数据表功能介绍:会员的好友列表。
uid--mediumint(8)--用户的UID编号
buddyid--mediumint(8)--会员所加好友的好友UID编号
cdb_caches
数据表功能介绍:统计页面的缓存。
cid--int(10)--缓存时所自动生成的ID
ckey--varchar(80)--缓存名称
cval--text--缓存内容
dateline--int(10)--页面缓存的时间
extr--varchar(80)--目前没用到*
cdb_failedlogins
数据表功能介绍:非法登录后台的记录。
ip--char(15)--非法登入者的IP
count--tinyint(1)--登入的次数
lastupdate--int(10)--最后更新日期
cdb_favorites
数据表功能介绍:记录用户收藏主题的相关信息。
uid--mediumint(8)--用户的UID编号
tid--mediumint(8)--会员收藏主题的主题ID
cdb_forumlinks
数据表功能介绍:联盟论坛。
id--smallint(6)--每项联盟论坛生成一个顺序ID
displayorder--tinyint(3)--显示顺序
name--varchar(100)--网站名称
url--varchar(200)--网站地址
note--varchar(200)--网站说明
logo--varchar(100)--LOGO地址
cdb_forums
数据表功能介绍:论坛版块信息表。
fid--smallint(6)--版块的ID
fup--smallint(6)--所在上级版块的ID
type--enum('group', 'forum',
'sub')--版块的类型,即:group(分类)、forum(默认版块)、sub
(下级子版)
icon--varchar(50)--版块图标
name--varchar(255)--版块名称
description--varchar(255)--版块简介
status--tinyint(1)--是否在论坛上显示
displayorder--tinyint(3)--各版块显示顺序
moderator--varchar(255)--版主名单
styleid--smallint(6)--所用的风格ID
threads--mediumint(8)--共有多少主题的统计
posts--mediumint(8)--共有多少贴子的统计
lastpost--varchar(110)--最后发帖用户名,发帖时间,标题这三个信息组成的字串
allowsmilies--tinyint(1)--是否允许使用表情
allowhtml--tinyint(1)--是否允许使用HTML
allowbbcode--tinyint(1)--是否允许使用Discuz!代码
allowimgcode--tinyint(1)--是否允许使用IMG代码
postcredits--tinyint(3)--发新贴加积分的数目
replycredits--tinyint(3)--回复加积分的数目
password--varchar(12)--论坛版块的访问密码
viewperm--varchar(100)--浏览版块许可
postperm--varchar(100)--发贴子许可
replyperm--varchar(100)--回复主题许可
getattachperm--varchar(100)--下载附件许可
cdb_karmalog
数据表功能介绍:用户评分记录。
kid--int(10)--评分记录的ID
uid--mediumint(8)--评分人的UID编号
pid--int(10)--被评分的贴子的ID
dateline--int(10)--评分的操作时间
score--tinyint(3)--评分所加减的积分
cdb_members
数据表功能介绍:论坛所有会员主信息表。
uid--mediumint(8)--用户的UID编号
username--varchar(15)--用户ID的名称
password--varchar(32)--用户的登录密码(MD5)
secques--varchar(8)--安全提问信息
gender--tinyint(1)--性别
adminid--smallint(3)--管理组ID号(1为管理员、2为总版主、3为版主、0表示否,即非管理组,-1表
特殊组及除了1,2,3以外的系统组(即4,5,6,7,8组))
groupid--smallint(6)--用户组ID号
regip--varchar(15)--注册时的IP记录
regdate--int(10)--注册日期
lastip--varchar(15)--上次访问IP记录
lastvisit--int(10)--上次访问日期
lastactivity--int(10)--最后活动时间
lastpost--int(10)--最后发表日期
postnum--smallint(6)--总贴数
credit--int(10)--积分
extracredit--int(10)--DZ25预留的扩展积分*
email--varchar(60)--会员的EM地址
site--varchar(75)--会员的主页
icq--varchar(12)--会员的ICQ
oicq--varchar(12)--会员的QQ
yahoo--varchar(40)--会员的雅虎通
msn--varchar(40)--会员的MSN
location--varchar(30)----来自
bday--date--生日
bio--text--自我介绍
avatar--varchar(100)--会员头像
avatarwidth--tinyint(3)--头像的宽度
avatarheight--tinyint(3)--头像的高度
signature--text--签名
customstatus--varchar(30)--自定义头衔
tpp--tinyint(3)--显示每页主题数的数量
ppp--tinyint(3)--显示每个主题的回复数的数量
styleid--smallint(6)--所选风格的ID
dateformat--varchar(10)--日期格式
timeformat--varchar(5)--时间格式
showemail--tinyint(1)--是否显示EM地址
newsletter--tinyint(1)--同意接收论坛通知
invisible--tinyint(1)--是否隐身
timeoffset--varchar(4)--时差设定
ignorepm--text--忽略的短消息列表
newpm--tinyint(1)--是否有新的短信并提示
accessmasks--tinyint(1)--表示该用户是否对某些板块指定了特别的权限
identifying--varchar(20)--当一个新注册的用户通过EM验证的时候、用户忘记密码需要通过EM取回的
候,该字段写入随机的认证字串
cdb_onlinelist
数据表功能介绍:在线会员信息。
groupid--smallint(6)--用户组所在ID
displayorder--tinyint(3)--显示顺序
title--varchar(30)--显示的名称
url--varchar(30)--小图标的URL
cdb_plugins
数据表功能介绍:插件信息表。
plug_id--smallint(6)--插件的ID
plug_title--varchar(255)--插件名称
plug_version--varchar(255)--插件版本
plug_author--varchar(255)--插件作者
plug_key--varchar(255)--插件英文标识(唯一)
plug_stats--tinyint(1)--是否显示插件在前台
plug_cp--varchar(255)--插件自定义管理程序
plug_tables--varchar(255)--插件数据表
plug_license--text--插件版权声明内容
plug_desc--text--插件说明
cdb_plugins_settings
数据表功能介绍:插件的配置设置信息相关。
conf_id--int(10)--插件配置项目的ID
conf_title--varchar(255)--插件配置名称
conf_desc--text--插件配置说明
conf_group--varchar(255)--插件配置所在组(即英文标识、即所对应着的插件)
conf_type--varchar(255)--插件配置项目类型
conf_key--varchar(255)--插件配置唯一标识
conf_value--text--插件配置数值
conf_extra--text--插件配置扩充
conf_position--smallint(3)--插件配置显示顺序
conf_cached--tinyint(1)--插件配置是否缓存
数据表功能介绍:论坛短信数据表。
pmid--int(10)--短消息的ID
msgfrom--varchar(15)--短信发起人的会员名称
msgfromid--mediumint(8)--短信发起人的会员UID编号
msgtoid--mediumint(8)--短信接收人的会员UID编号
folder--enum('inbox', 'outbox')--收件箱、发件箱(默认为收件箱)
new--tinyint(1)--是否已读标记(1=未读,且未忽略 2=未读,且已忽略)
subject--varchar(75)--短信标题
dateline--int(10)--发送日期
message--text--短信内容
数据表功能介绍:投票内容信息表。tid--mediumint(8)--投票贴子的主题ID
pollopts--mediumtext--投票贴子的投票项目
数据表功能介绍:论坛所有贴子信息表。
pid--int(10)--贴子的ID
fid--smallint(6)--贴子所在版块的版块ID
tid--mediumint(8)--贴子所在主题的主题ID
aid--tinyint(1)--贴子里的附件ID
author--varchar(15)--贴子的发表者的会员名称
authorid--mediumint(8)--贴子的发表者的会员UID编号
subject--varchar(80)--贴子的标题
dateline--int(10)--发表贴子的日期时间
message--mediumtext--贴子的内容
useip--varchar(15)--发表者的IP
usesig--tinyint(1)--显示发表者的个性签名
bbcodeoff--tinyint(1)--是否允许Discuz!代码
smilyoff--tinyint(1)--是否允许使用表情
parseurloff--tinyint(1)--禁用URL识别
rate--smallint(6)--贴子里用户评分记录
ratetimes--tinyint(3)--被评分的次数
数据表功能介绍:用户发贴等级记录。
rankid--smallint(6)--等级记录的ID
ranktitle--varchar(30)--等级头衔
postshigher--smallint(6)--发贴数高于
stars--tinyint(3)--星星数
color--varchar(7)--头衔颜色
cdb_searchindex
数据表功能介绍:搜索结果缓存。
searchid--int(10)--搜索结果的ID
keywords--varchar(255)--关键字
searchstring--varchar(255)--储选项,例如搜索的版块,用户名,全文搜索等等,是拼凑出来的字串
useip--varchar(15)--使用搜索功能的会员IP
uid--mediumint(10)--使用搜索功能的会员的UID编号
dateline--int(10)--使用搜索功能的日期时间
expiration--int(10)--过期的时间,下次搜索如果过了这时间就会重新搜索一次,更新资料
threads--smallint(6)--搜索结果的主题数
tids--text--搜索结果的贴子ID
cdb_sessions
数据表功能介绍:在线用户信息表(临时表)。
sid--char(6)--是由Dz自己生成的一个随机的session号
ip1、ip2、ip3、ip4--tinyint(3)--IP地址段,1,2,3,4各代表IP的四段
uid--mediumint(8)--会员的UID编号
username--char(15)--会员的名称
groupid--smallint(6)--会员的用户组
styleid--smallint(6)--会员所用的风格ID
invisible--tinyint(1)--会员是否隐身状态
action--tinyint(1)--会员的动作
lastactivity--int(10)--最后活动记录时间
fid--smallint(6)--所在的版块ID
tid--mediumint(8)--所在的贴子ID
cdb_settings
数据表功能介绍:论坛基本设置相关。
(包括后台基本设置、注册人数、最多在线人数、功能、其它设置等等。)
variable--varchar(32)--变量名*
value--text--改变变量的具体值*
cdb_smilies
数据表功能介绍:表情设置。id--smallint(6)--表情的ID
type--enum('smiley', 'icon')--表情的类型(即贴子里的表情和主题图标两类)
code--varchar(10)--smilies代码
url--varchar(30)--表情文件名的路径
数据表功能介绍:论坛统计信息。
type--varchar(20)--各类的统计,包括使用IE的统计、流量的统计等等
var--varchar(20)--各类统计的值,随上面的type而改变,如果为IE统计,则显示使用IE
BROWSER的多
少;如果为流量统计,则显示多少每时段的数值等等
count--int(10)--计数
cdb_styles
数据表功能介绍:风格信息表。
styleid--smallint(6)--风格的ID
name--varchar(20)--风格的名称
available--tinyint(1)--是否可用
templateid--smallint(6)--对应的模板ID
cdb_stylevars
数据表功能介绍:风格的配置信息。
stylevarid--smallint(6)--自动增加的编号,用来唯一的确定一条记录
styleid--smallint(6)--风格的ID
variable--text--对应风格的对应部分的名字,比如背景色
substitute--text--对应风格的对应部分的取值
cdb_subscriptions
数据表功能介绍:记录订阅主题的相关信息。
uid--mediumint(8)--会员的UID编号
tid--mediumint(8)--会员所订阅的主题ID
email--varchar(60)--会员的EM
lastnotify--int(10)--最后订阅的主题记录
cdb_templates
数据表功能介绍:模板信息表。
templateid--smallint(6)--模板的ID
name--varchar(30)--模板名称
charset--varchar(30)--模板所用语言编码类型
directory--varchar(100)--模板所在templates目录
copyright--varchar(100)--模板的版权信息
cdb_threads
数据表功能介绍:论坛所有主题信息表。tid--mediumint(8)--主题的ID
fid--smallint(6)--主题所在版块的版块ID
creditsrequire--smallint(6)--需设置多少积分才能浏览该主题
iconid--smallint(6)--主题图标
author--char(15)--主题的会员名称
authorid--mediumint(8)--主题的会员UID编号
subject--char(80)--主题的标题
dateline--int(10)--发表日期
lastpost--int(10)--最后发表日期
lastposter--char(15)--最后发表的会员名称
views--mediumint(8)--人气值(即浏览数)
replies--smallint(6)--回复数
displayorder--tinyint(1)--显示顺序
highlight--tinyint(1)--是否为高亮
digest--tinyint(1)--是否为精华贴
poll--tinyint(1)--是否为投票贴
attachment--tinyint(1)--是否为有附件的主题
closed--mediumint(8)--主题是否关闭事实上除了关闭以外,当主题被移动,并保留移动标记时,
中会存放移动后的目标tid。即当&1时,为被移动,=1时为被关闭,=0时普通帖子
cdb_usergroups
数据表功能介绍:用户组主信息表。
groupid--smallint(6)--用户组ID编号
type--enum('system', 'special',
'member')--用户组类型(即三种:系统管理组、特别用户组、普通
grouptitle--char(30)--用户组头衔
credithigher--int(10)--积分大于
creditlower--int(10)--积分小于
stars--tinyint(3)--星星数
color--char(7)--头衔颜色
groupavatar--char(60)--组头像
allowstatus--tinyint(1)--是否允许自定义头衔
allowavatar--tinyint(1)--是否允许自定义头像
allowvisit--tinyint(1)--是否允许访问论坛
allowview--tinyint(1)--是否允许浏览贴子
allowpost--tinyint(1)--是否允许发贴子
allowpostpoll--tinyint(1)--是否允许发投票
allowgetattach--tinyint(1)--是否允许下载附件
allowpostattach--tinyint(1)--是否允许发表附件
allowvote--tinyint(1)--是否允许参与投票
allowsearch--tinyint(1)--是否允许使用搜索功能
allowkarma--tinyint(1)--是否允许对用户评分
allowinvisible--tinyint(1)--是否允许隐身
allowsetviewperm--tinyint(1)--是否允许设置贴子权限(即设置积分查看)
allowsetattachperm--tinyint(1)--是否允许设置附件权限
allowhidecode--tinyint(1)--是否允许使用HIDE代码
allowsigbbcode--tinyint(1)--是否允许Discuz!代码
allowsigimgcode--tinyint(1)--是否允许IMG代码
allowviewstats--tinyint(1)--是否允许查看统计
maxpmnum--smallint(6)--最大短信收件箱容量
maxsigsize--smallint(6)--最大签名字节数
maxkarmarate--tinyint(3)--最大评分数
maxrateperday--smallint(6)--每日最多评分数
maxattachsize--int(10)--附件上传最大尺寸
attachextensions--char(255)--允许的附件类型
数据表功能介绍:不良词语过滤。id--smallint(6)--每项自动产生的ID编号
admin--varchar(15)--操作人记录
find--varchar(60)--找到的不良词语
replacement--varchar(60)--替换不良词语的内容
cdb_validating 用户审核表
uid 待审核用户id
submitdate 提交日期
moddate 审核日期
admin 进行审核的管理员
submittimes 提交的次数
status 状态
message 注册原因
remark 管理员留言
cdb_words 词语过滤(0条)
admin 操作者ID
find 不良词语
replacement 替换为
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Code changes the world
对于某一类网站, 管理界面 是基础设施中非常重要的一部分。 这是以网页和有限的可信任管理者为基础的界面,它可以让你添加,编辑和删除网站内容。 一些常见的例子: 你可以用这个界面发布博客,后台的网站管理者用它来润色读者提交的内容,你的客户用你给他们建立的界面工具更新新闻并发布在网站上,这些都是使用管理界面的例子。
但是管理界面有一问题: 创建它太繁琐。 当你开发对公众的功能时,网页开发是有趣的,但是创建管理界面通常是千篇一律的。 你必须认证用户,显示并管理表格,验证输入的有效性诸如此类。 这很繁琐而且是重复劳动。
Django 在对这些繁琐和重复的工作进行了哪些改进? 它用少的不能再少的代码为你做了所有的一切。 Django 中创建管理界面已经不是问题。
这一节是关于 Django 的自动管理界面。 这个特性是这样起作用的: 它读取你模型中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即工作。
请注意我们建议你读这节,即使你不打算用admin。因为我们将介绍一些概念,这些概念可以应用到Django的所有方面,而不仅仅是admin。
django.contrib 包
Django自动管理工具是django.contrib的一部分。django.contrib是一套庞大的功能集,它是Django基本代码的组成部分,Django框架就是由众多包含附加组件(add-on)的基本代码构成的。 你可以把django.contrib看作是可选的Python标准库或普遍模式的实际实现。 它们与Django捆绑在一起,这样你在开发中就不用“重复发明轮子”了。
管理工具是本教程讲述django.contrib的第一个部分。从技术层面上讲,它被称作django.contrib.admin(管理员站点)。django.contrib中其它可用的特性,如django.contrib.auth(认证授权系统), django.contrib.contenttypes(内容类型框架),django.contrib.sessions(会话框架),django.contrib.messages (消息框架),django.contrib.staticfiles(管理静态文件的框架)。这些,我们将在后续课程种详细讨论。在成为一个Django专家以前,你将会知道更多django.contrib的特性。 目前,你只需要知道Django自带很多优秀的附加组件,它们都存在于django.contrib包里。
激活管理界面
Django管理站点完全是可选择的,因为仅仅某些特殊类型的站点才需要这些功能。 这意味着你需要在你的项目中花费几个步骤去激活它。
第一步,对你的settings文件做如下这些改变:
Django2.0已经为你做好了这些,一切按缺省设置即可。
第二步, 先执行python manage.py makemigrations再执行python manage.py migrate最后执行python manage.py createsuperuser
第三,将admin访问配置在URLconf(记住,在urls.py中). 默认情况下,Django2.0已经做好了配置:
path('admin/', admin.site.urls),
当这一切都配置好后,现在你将发现Django管理工具可以运行了。 启动开发服务器(如前:python manage.py runserver ),然后在浏览器中访问:
使用管理工具
管理界面的设计是针对非技术人员的,所以它应该是自我解释的。
你要使用你原来设置的超级用户的用户名和密码。 如果无法登录,请运行python manage.py createsuperuser ,确保你已经创建了一个超级用户。
一旦登录了,你将看到管理页面。 这个页面列出了管理工具中可编辑的所有数据类型。 现在,由于我们还没有创建任何模块,所以这个列表只有寥寥数条类目: 它仅有两个默认的管理-编辑模块:用户组(Groups)和用户(Users)。
在Django管理页面中,每一种数据类型都有一个* change list* 和* edit form* 。前者显示数据库中所有的可用对象;后者可让你添加、更改和删除数据库中的某条记录。
如果你的母语不是英语,而你不想用它来配置你的浏览器,你可以做一个快速更改来观察Django管理工具是否被翻译成你想要的语言。 仅需添加‘django.middleware.locale.LocaleMiddleware’ 到MIDDLEWARE_CLASSES 设置中,并确保它在’django.contrib.sessions.middleware.SessionMiddleware’* 之后* 。
完成后,请刷新页面。 如果你设置的语言可用,一系列的链接文字将被显示成这种语言。这些文字包括页面顶端的Change password和Log out,页面中部的Groups和Users。 Django自带了多种语言的翻译。
更多关于admin的特性,可以在django官方文档进行查看。
将你的Models加入到Admin管理中
有一个关键步骤我们还没做。 让我们将自己的模块加入管理工具中,这样我们就能够通过这个漂亮的界面添加、修改和删除数据库中的对象了。 我们将继续上一节中的book 例子。在其中,我们定义了三个模块: Publisher 、 Author 和 Book 。
在books 目录下(mysite/books ),创建一个文件:admin.py ,然后输入以下代码:
from django.contrib import admin
from .models import Publisher, Author, Book
admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)
这些代码通知管理工具为这些模块逐一提供界面。
完成后,打开页面 http://127.0.0.1:8000/admin/ ,你会看到一个Books区域,其中包含Authors、Books和Publishers。 (你可能需要先停止,然后再启动服务(runserver ),才能使其生效。)
现在你拥有一个功能完整的管理界面来管理这三个模块了。
花点时间添加和修改记录,以填充数据库。 如果你跟着上一节的例子一起创建Publisher对象的话(并且没有删除),你会在列表中看到那些记录。
这里需要提到的一个特性是,管理工具处理外键和多对多关系(这两种关系可以在Book 模块中找到)的方法。 作为提醒,这里有个Book 模块的例子:
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
publication_date = models.DateField()
def __str__(self):
return self.title
在Add book页面中(http://127.0.0.1:8000/admin/books/book/add/ ),外键 publisher用一个选择框显示,多对多 字段author用一个多选框显示。 点击两个字段后面的绿色加号,可以让你添加相关的记录。 举个例子,如果你点击Publisher后面的加号,你将会得到一个弹出窗口来添加一个publisher。 当你在那个窗口中成功创建了一个publisher后,Add book表单会自动把它更新到字段上去 花巧。
Admin是如何工作的
在幕后,管理工具是如何工作的呢? 其实很简单。
当服务启动时,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管理工具的代码,请谨记它在读取关于模块的元数据过程中做了些不简单的工作,因此最好花些时间阅读和理解那些代码。)
设置字段可选
在摆弄了一会之后,你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选的。 举个例子,我们想要Author模块中的email字段成为可选,即允许不填。 在现实世界中,你可能没有为每个作者登记邮箱地址。
为了指定email字段为可选,你只要编辑Author模块(回想上一节,它在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,这使得它们不允许输入空值。
这里会发生一些有趣的事情。 直到现在,除了__str__()方法,我们的模块充当数据库中表定义的角色,即本质上是用Python的语法来写CREATE TABLE语句。 在添加blank=True过程中,我们已经开始在简单的定义数据表上扩展我们的模块了。 现在,我们的模块类开始成为一个富含Author对象属性和行为的集合了。 email不但展现为一个数据库中的VARCHAR类型的字段,它还是页面中可选的字段,就像在管理工具中看到的那样。
当你添加blank=True以后,刷新页面Add author edit form ( ),将会发现Email的标签不再是粗体了。 这意味它不是一个必填字段。 现在你可以添加一个作者而不必输入邮箱地址,即使你为这个字段提交了一个空值,也再不会得到那刺眼的红色信息“This field is required”。
设置日期型和数字型字段可选
虽然blank=True同样适用于日期型和数字型字段,但是这里需要详细讲解一些背景知识。
SQL有指定空值的独特方式,它把空值叫做NULL。NULL可以表示为未知的、非法的、或其它程序指定的含义。
在SQL中, NULL的值不同于空字符串,就像Python中None不同于空字符串("")一样。这意味着某个字符型字段(如VARCHAR)的值不可能同时包含NULL和空字符串。
这会引起不必要的歧义或疑惑。 为什么这条记录有个NULL,而那条记录却有个空字符串? 它们之间有区别,还是数据输入不一致? 还有: 我怎样才能得到全部拥有空值的记录,应该按NULL和空字符串查找么?还是仅按字符串查找?
为了消除歧义,Django生成CREATE TABLE语句自动为每个字段显式加上NOT NULL。 这里有个第五章中生成Author模块的例子:
CREATE TABLE "books_author" (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(40) NOT NULL,
"email" varchar(75) NOT NULL
在大多数情况下,这种默认的行为对你的应用程序来说是最佳的,因为它可以使你不再因数据一致性而头痛。 而且它可以和Django的其它部分工作得很好。如在管理工具中,如果你留空一个字符型字段,它会为此插入一个空字符串(而* 不是*NULL)。
但是,其它数据类型有例外:日期型、时间型和数字型字段不接受空字符串。 如果你尝试将一个空字符串插入日期型或整数型字段,你可能会得到数据库返回的错误,这取决于那个数据库的类型。 (PostgreSQL比较严谨,会抛出一个异常;MySQL可能会也可能不会接受,这取决于你使用的版本和运气了。)在这种情况下,NULL是唯一指定空值的方法。 在Django模块中,你可以通过添加null=True来指定一个字段允许为NULL。
因此,这说起来有点复杂: 如果你想允许一个日期型(DateField、TimeField、DateTimeField)或数字型(IntegerField、DecimalField、FloatField)字段为空,你需要使用null=True * 和* blank=True。
为了举例说明,让我们把Book模块修改成允许 publication_date为空。修改后的代码如下:
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
publication_date = models.DateField(blank=True, null=True)
添加null=True比添加blank=True复杂。因为null=True改变了数据的语义,即改变了CREATE TABLE语句,把publication_date字段上的NOT NULL删除了。 要完成这些改动,我们还需要更新数据库。
出于某种原因,Django不会尝试自动更新数据库结构。所以你必须执行ALTER TABLE语句将模块的改动更新至数据库。 像先前那样,你可以使用manage.py dbshell进入数据库服务环境。 以下是在这个特殊情况下如何删除NOT NULL:
ALTER TABLE books_book CHANGE COLUMN publication_date new_name DATE NULL;
现在让我们回到管理工具,添加book的编辑页面允许输入一个空的publication date。
自定义字段标签
在编辑页面中,每个字段的标签都是从模块的字段名称生成的。 规则很简单: 用空格替换下划线;首字母大写。例如: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')
修改后重启服务器,你会在author编辑页面中看到这个新标签。
请注意,你不必把verbose_name的首字母大写,除非是连续大写(如:"USA state")。Django会自动适时将首字母大写,并且在其它不需要大写的地方使用verbose_name的精确值。
最后还需注意的是,为了使语法简洁,你可以把它当作固定位置的参数传递。 这个例子与上面那个的效果相同。
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField('e-mail', blank=True)
但这不适用于ManyToManyField 和ForeignKey字段,因为它们第一个参数必须是模块类。 那种情形,必须显式使用verbose_name这个参数名称。
定义MoelAdmin类
迄今为止,我们做的blank=True、null=True和verbose_name修改其实是模块级别,而不是管理级别的。 也就是说,这些修改实质上是构成模块的一部分,并且正好被管理工具使用,而不是专门针对管理工具的。
除了这些,Django还提供了大量选项让你针对特别的模块自定义管理工具。 这些选项都在ModelAdmin classes里面,这些类包含了管理工具中针对特别模块的配置。
自定义列表
让我们更深一步:自定义Author模块的列表中的显示字段。 列表默认地显示查询结果中对象的__str()__中,我们定义Author对象的__str()__显示作者的姓和名。
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 __str__(self):
return '%s, %s' %(self.first_name, self.last_name
我们可以在这基础上改进,添加其它字段,从而改变列表的显示。 这个页面应该提供便利,比如说:在这个列表中可以看到作者的邮箱地址。如果能按照姓氏或名字来排序,那就更好了。
为了达到这个目的,我们将为Author模块定义一个ModelAdmin类。 这个类是自定义管理工具的关键,其中最基本的一件事情是允许你指定列表中的字段。 打开admin.py并修改:
from django.contrib import admin
from .models import Publisher, Author, Book
class AuthorAdmin(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的注册就属于这种情况。
弄好了这个东东,再刷新author列表页面,你会看到列表中有三列:姓氏、名字和邮箱地址。 另外,点击每个列的列头可以对那列进行排序。
接下来,让我们添加一个快速查询栏。 向AuthorAdmin追加search_fields,如:
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
search_fields = ('first_name', 'last_name')
刷新浏览器,你会在页面顶端看到一个查询栏。我们刚才所作的修改列表页面,添加了一个根据姓名查询的查询框。 正如用户所希望的那样,它是大小写不敏感,并且对两个字段检索的查询框。如果查询"bar",那么名字中含有Barney和姓氏中含有Hobarson的作者记录将被检索出来。
接下来,让我们为Book列表页添加一些过滤器。
from django.contrib import admin
from .models import Publisher, Author, Book
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
search_fields = ('first_name', 'last_name')
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
admin.site.register(Publisher)
admin.site.register(Author, AuthorAdmin)
admin.site.register(Book, BookAdmin)
由于我们要处理一系列选项,因此我们创建了一个单独的ModelAdmin类:BookAdmin。首先,我们定义一个list_display,以使得页面好看些。 然后,我们用list_filter这个字段元组创建过滤器,它位于列表页面的右边。 Django为日期型字段提供了快捷过滤方式,它包含:今天、过往七天、当月和今年。这些是开发人员经常用到的。
过滤器 同样适用于其它类型的字段,而不单是日期型 (请在布尔型 和外键 字段上试试)。当有两个以上值时,过滤器就会显示。
另外一种过滤日期的方式是使用date_hierarchy选项,如:
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
修改好后,页面中的列表顶端会有一个逐层深入的导航条,它从可用的年份开始,然后逐层细分到月乃至日。
请注意,date_hierarchy接受的是* 字符串* ,而不是元组。因为只能对一个日期型字段进行层次划分。
最后,让我们改变默认的排序方式,按publication date降序排列。 列表页面默认按照模块class Meta中的ordering所指的列排序。但目前没有指定ordering值,所以当前排序是没有定义的。
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
这个ordering选项基本像模块中class Meta的ordering那样工作,除了它只用列表中的第一个字段名。 如果要实现降序,仅需在传入的列表或元组的字段前加上一个减号(-)。
刷新book列表页面观看实际效果。 注意Publication date列头现在有一个小箭头显示排序。
我们已经学习了主要的选项。 通过使用它们,你可以仅需几行代码就能创建一个功能强大、随时上线的数据编辑界面。
自定义编辑表单
正如自定义列表那样,编辑表单多方面也能自定义。
首先,我们先自定义字段顺序。 默认地,表单中的字段顺序是与模块中定义是一致的。 我们可以通过使用ModelAdmin子类中的fields选项来改变它:
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
fields = ('title', 'authors', 'publisher', 'publication_date')
完成之后,编辑表单将按照指定的顺序显示各字段。 它看起来自然多了——作者排在书名之后。 字段顺序当然是与数据条目录入顺序有关, 每个表单都不一样。
通过fields这个选项,你可以排除一些不想被其他人编辑的fields 只要不选上不想被编辑的field(s)即可。 当你的admin用户只是被信任可以更改你的某一部分数据时,或者,你的数据被一些外部的程序自动处理而改变了了,你就可以用这个功能。 例如,在book数据库中,我们可以隐藏publication_date,以防止它被编辑。
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
fields = ('title', 'authors', 'publisher')
这样,在编辑页面就无法对publication date进行改动。 如果你是一个编辑,不希望作者推迟出版日期的话,这个功能就很有用。 (当然,这纯粹是一个假设的例子。)
注:field体现在修改(change)表单页面。
当一个用户用这个不包含完整信息的表单添加一本新书时,Django会简单地将publication_date设置为None,所以最好确保该字段满足null=True。
另一个常用的编辑页面自定义是针对多对多字段的。 真如我们在book编辑页面看到的那样,多对多字段 被展现成多选框。虽然多选框在逻辑上是最适合的HTML控件,但它却不那么好用。 如果你想选择多项,你必须还要按下Ctrl键(苹果机是command键)。 虽然管理工具因此添加了注释(help_text),但是当它有几百个选项时,它依然显得笨拙。
更好的办法是使用filter_horizontal。让我们把它添加到BookAdmin中,然后看看它的效果。
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
filter_horizontal = ('authors',)
(如果你一着跟着做练习,请注意移除fields选项,以使得编辑页面包含所有字段。)
刷新book编辑页面,你会看到Author区中有一个精巧的JavaScript过滤器,它允许你检索选项,然后将选中的authors从Available框移到Chosen框,还可以移回来。
我们强烈建议针对那些拥有十个以上选项的多对多字段 使用filter_horizontal。 这比多选框好用多了。 你可以在多个字段上使用filter_horizontal,只需在这个元组中指定每个字段的名字。
ModelAdmin类还支持filter_vertical选项。 它像filter_horizontal那样工作,除了控件都是垂直排列,而不是水平排列的。 至于使用哪个,只是个人喜好问题。
filter_horizontal和filter_vertical选项只能用在多对多字段 上, 而不能用于 ForeignKey字段。 默认地,管理工具使用下拉框 来展现外键 字段。但是,正如多对多字段 那样,有时候你不想忍受因装载并显示这些选项而产生的大量开销。 例如,我们的book数据库膨胀到拥有数千条publishers的记录,以致于book的添加页面装载时间较久,因为它必须把每一个publisher都装载并显示在下拉框 中。
解决这个问题的办法是使用raw_id_fields 选项。它是一个包含外键字段名称的元组,它包含的字段将被展现成文本框 ,而不再是下拉框
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
# fields = ('title', 'authors', 'publisher')
filter_horizontal = ('authors',)
raw_id_fields = ('publisher',)
在这个输入框中,你输入什么呢? publisher的数据库ID号。 考虑到人们通常不会记住这些数据库ID,管理工具提供了一个放大镜图标方便你输入。点击那个图标将会弹出一个窗口,在那里你可以选择想要添加的publishe。
用户、用户组和权限
因为你是用超级用户登录的,你可以创建,编辑和删除任何对像。 然而,不同的环境要求有不同的权限,系统不允许所有人都是超级用户。 管理工具有一个用户权限系统,通过它你可以根据用户的需要来指定他们的权限,从而达到部分访问系统的目的。
用户帐号应该是通用的、独立于管理界面以外仍可以使用。但我们现在把它看作是管理界面的一部分。 在后续章节,我们将讲述如何把用户帐号与你的网站(不仅仅是管理工具)集成在一起。
你通过管理界面编辑用户及其许可就像你编辑别的对象一样。 我们在本章的前面,浏览用户和用户组区域的时候已经见过这些了。 如你所想,用户对象有标准的用户名、密码、邮箱地址和真实姓名,同时它还有关于使用管理界面的权限定义。 首先,这有一组三个布尔型标记:
活动标志,它用来控制用户是否已经激活。 如果一个用户帐号的这个标记是关闭状态,而用户又尝试用它登录时,即使密码正确,他也无法登录系统。
成员标志,它用来控制这个用户是否可以登录管理界面(即:这个用户是不是你们组织里的成员) 由于用户系统可以被用于控制公众页面(即:非管理页面)的访问权限,这个标志可用来区分公众用户和管理用户。
超级用户标志,它赋予用户在管理界面中添加、修改和删除任何项目的权限。 如果一个用户帐号有这个标志,那么所有权限设置(即使没有)都会被忽略。
普通的活跃,非超级用户的管理用户可以根据一套设定好的许可进入。 管理界面中每种可编辑的对象(如:books、authors、publishers)都有三种权限: 创建 许可, 编辑 许可和 删除 许可。 给一个用户授权许可也就表明该用户可以进行许可描述的操作。
当你创建一个用户时,它没有任何权限,该有什么权限是由你决定的。 例如,你可以给一个用户添加和修改publishers的权限,而不给他删除的权限。 请注意,这些权限是定义在模块级别上,而不是对象级别上的。据个例子,你可以“让小强拥有修改所有书的权限吧!”,而不能“让小强只拥有修改机械工业出版社的图书的权限!”后面这种基于对象级别的权限设置比较复杂,并且超出了本书的覆盖范围,但你可以在Django documentation中寻找答案。
权限管理系统也控制编辑用户和权限。 如果你给某人编辑用户的权限,他可以编辑自己的权限,这种能力可能不是你希望的。 赋予一个用户修改用户的权限,本质上说就是把他变成一个超级用户。
你也可以给组中分配用户。 一个 组 简化了给组中所有成员应用一套许可的动作。 组在给大量用户特定权限的时候很有用。
何时、为什么使用管理界面?何时又不使用呢?
经过这一节的学习,你应该对Django管理工具有所认识。 但是我们需要表明一个观点:* 什么时候* 、* 为什么* 用,以及什么时候又* 不* 用。
Django的管理界面对非技术用户要输入他们的数据时特别有用;事实上这个特性就是专门为这个 实现的。 在Django最开始开发的新闻报道的行业应用中,有一个典型的在线自来水的水质专题报道 应用,它的实现流程是这样的:
负责这个报道的记者和要处理数据的开发者碰头,提供一些数据给开发者。
开发者围绕这些数据设计模型然后配置一个管理界面给记者。
记者检查管理界面,尽早指出缺少或多余的字段。 开发者来回地修改模块。
当模块认可后,记者就开始用管理界面输入数据。 同时,程序员可以专注于开发公众访问视图和模板(有趣的部分)。
换句话说,Django的管理界面为内容输入人员和编程人员都提供了便利的工具。
当然,除了数据输入方面,我们发现管理界面在下面这些情景中也是很有用的:
检查模块 :当你定义好了若干个模块,在管理页面中把他们调出来然后输入一些虚假的数据,这是相当有用的。 有时候,它能显示数据建模的错误或者模块中其它问题。
管理既得数据 :如果你的应用程序依赖外部数据(来自用户输入或网络爬虫),管理界面提供了一个便捷的途径,让你检查和编辑那些数据。 你可以把它看作是一个功能不那么强大,但是很方便的数据库命令行工具。
临时的数据管理程序 :你可以用管理工具建立自己的轻量级数据管理程序,比如说开销记录。 如果你正在根据自己的,而不是公众的需要开发些什么,那么管理界面可以带给你很大的帮助。 从这个意义上讲,你可以把它看作是一个增强的关系型电子表格。
最后一点要澄清的是: 管理界面不是终结者。 过往许多年间,我们看到它被拆分、修改成若干个功能模块,而这些功能不是它所支持的。 它不应成为一个* 公众* 数据访问接口,也不应允许对你的数据进行复杂的排序和查询。 正如本章开头所说,它仅提供给可信任的管理员。 请记住这一点,它是有效使用管理界面的钥匙。
阅读(...) 评论()

我要回帖

更多关于 经营杠杆的含义 的文章

 

随机推荐