我的网站后台管理有普通管理员和子账号超级管理员员两个选项,点击普通管理员之后就无权编辑了

问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
前端新手学习 node.js ,写了一个博客,但是不知道 后台管理员账号和密码这一块功能如何编写,希望大家给个提示,介绍大概流程。在此不胜感激
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
先写一个超级管理员,然后给超级管理员权限去添加账户密码,像你添加文章那样、、不过要注意加密
同步到新浪微博
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:当前位置: >>
制作 后台管理界面、管理员管理
制作 后台管理界面 管理员管理 后台管理界面接PPT19(设置IIS,建立站点) 1.文件→新建→动态页→ ASP VBScript →存至www下的admin中→名为 sorry1.asp 2.修改标题(&title&)→无权访问 3.页面中输入:对不起,你没有本页面的管理权限!→设为标题3,红色,居中 4.editnews.as
p→服务器行为→用户身份验证→限制对页的访问 后台管理界面5.同理,manage.asp、newsedit.asp、addnews.asp都需要设置访问控制。 凭用户名和密码 admin_authority=0 →用户身份验证→注销用户6. manage.asp→选中左侧注销→服务器行为→ →填充如图 后台管理界面7. manage.asp→左侧:加管理员管理(产品管理下面) 8.文件→新建→动态页→ ASP VBScript →存至www下的admin中→名为 usermanage.asp 9.修改标题(&title&)→管理员管理 10.修改菜单→页面属性→文字大小:12,上下左右边距:0 11.回车→居中→输入:管理员管理→属性:标题3 12.插入表格→2行 5列:600,0,0,0 居中 后台管理界面13. 创建记录集:Rsuser 绑定面板→ →记录集→填充如图 后台管理界面用户名 权限 查看 修改 删除高:50 30居中超级管理员 普通管理员居中宽:各120 14. 光标定位 →绑定面板→admin_username →插入 15. 选中第二行 (&tr&标签)→服务器行为→重复区域 →10条16.安装条件式显示区域插件.mxp 17. 选中超级管理员→服务器行为→→条件式显示区域→栏位与 输入码→填充如下页图 18. 选中普通管理员→服务器行为→→条件式显示区域→栏位与 输入码→填充如下页图 后台管理界面超级管理员普通管理员19. 查看、修改、删除→参考PPT18、19:新闻的查看、修改、删除 20.文件→新建→动态页→ ASP VBScript →存至www下的admin中→名为 addadmin.asp 21.修改标题(&title&)→添加管理员 22.修改菜单→页面属性→文字大小:12,上下左右边距:0 后台管理界面23.回车→居中→输入:添加管理员→属性:标题3 24.其后插入表单→(表单内)插入表格→4行 2列:600,0,0,0 居中,高:各40用户名: 密码: 权限:单行文本字段 单行文本字段 单选按钮添加按钮宽:150 右对齐450 左对齐 合并单元格,水平居中 后台管理界面25.用户名文本字段属性:admin_username,40 26.密码文本字段属性:admin_password,30,密码27.权限单选按钮属性:admin_authority超级管理员普通管理员 后台管理界面28.manage.asp→选中管理员管理→属性面板→链接:#(虚拟链接) 选中标签&a& → →窗口菜单→行为→ →显示弹出式菜单→如图 后台管理界面29.manage.asp→代码视图→找 (“管理员管理”,“window.open(?usermanage.asp?, ?_blank?);”);windows30.manage.asp→代码视图→找 (“添加管理员”,“window.open(?addadmin.asp?, ?_blank?);”); → windows
网站后台管理基本操作_互联网_IT/计算机_专业资料。网站做好后,如何管理和操作后台...4、有些网站会有留言系统。这个网站公司一般会把它设置在“插件”中.&留言板...后台管理员使用说明书_计算机软件及应用_IT/计算机_专业资料。后台使用说明书 尊敬...如果您需要点击添加教师信息,此时,在界面的右边,会弹出窗口,需要 您输入教师的...后台管理登陆页面 adminlogin.asp 供管理员进行登陆管理的登陆入口 2. 管理类别...评论页面 pinglun_del.asp 2 各功能模块的详细制作方法如下: 一、 后台管理...网站后台,左侧为网站栏目选项,分为网站基本设置、栏目 内容管理、管理员管理 3 ...修改好相关信息后, 单击页面底部&提交&按钮保存所做的修改。 图 3-1 四、...后台管理登录 1.打开计算机学院网站首页,在左上方点击网站管理,进入后台管理页面 ...1.1、这时对数据库事务日志做备份(注意,如果没做个数据库完整备份,是不能做...图8.2 管理员登录页界面 要将此页功能改为管理员登录,需要做如下改动: 9.2...(7) 在弹出的菜单中选择“重命名” ,将其改名为“后台管理页.aspx” 。 (...(普通监控员) 车辆管理―〉用户管理―〉增加用户 监控员名称:增加的用户(普通监控员)名称 密码:设置的初始密码,该用户(普通监控员)可凭此密码登录后台管理系统。...北汽银翔后台管理系统管理员操作手册_财务管理_经管营销_专业资料。北汽银翔后台...4.2.2.4 预约管理系统管理员能查看所有 4S 点预约的信息,但是不能做其它的...后台管理人员操作手册一:后台网址登录 1 :输入网址: /Admin ,输入后则会进 入登录界面 2 用户名为单位代码, 原始密码也为单位代码, ,如...可将文件 back_01.gif~back_06.gif 复 制作图像文件 保存在制到 AImage ...(管理页面) 1.网页功能 . 后台管理员模块首页,显示管理目录树结构,导航栏可...
All rights reserved Powered by
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&Django项目实践4 - Django站点管理(后台管理员)&&
上篇:Django项目实践3 - Django模型
Introduction
对于某一类网站, 管理界面 是基础设施中非常重要的一部分。 这是以网页和有限的可信任管理者为基础的界面,它可以让你添加,编辑和删除网站内容。
常见的例子: 你可以用这个界面发布博客,后台的网站管理者用它来润色读者提交的内容,你的客户用你给他们建立的界面工具更新新闻并发布在网站上,这些都是使用管理界面的例子。
创建管理界面通常是千篇一律的。 你必须认证用户,显示并管理表格,验证输入的有效性诸如此类。Django 的自动管理界面: 它读取你模式中的元数据,然后提供给你一个强大可使用的界面,网站管理者可以用它立即工作。
django.contrib包
Django自动管理工具是django.contrib的一部分。django.contrib是一套庞大的功能集,它是Django基本代码的组成部分,Django框架就是由众多包含附加组件(add-on)的基本代码构成的。管理工具是讲述django.contrib的第一个部分。从技术层面上讲,它被称作django.contrib.admin。django.contrib中其它可用的特性,如用户鉴别系统(django.contrib.auth)、支持匿名会话(django.contrib.sessioins)以及用户评注系统(ments)。第十六章详细讨论。Django自带很多优秀的附加组件,它们都存在于django.contrib包里。
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应用程序一样,都会自行添加到管理工具。综上所述,管理工具其实就是一个Django应用程序,包含自己的模块、模板、视图和URLpatterns。 你要像添加自己的视图一样,把它添加到URLconf里面。 你可以在Django基本代码中的django/contrib/admin 目录下,检查它的模板、视图和URLpatterns,但你不要尝试直接修改其中的任何代码,因为里面有很多地方可以让你自定义管理工具的工作方式。
激活管理界面
Django管理站点完全是可选择的,因为仅仅某些特殊类型的站点才需要这些功能。
修改settings文件 1. 将
'django.contrib.admin'加入setting的
INSTALLED_APPS配置中 (
INSTALLED_APPS中的配置顺序是没有关系的)
INSTALLED_APPS中包含
'django.contrib.auth',
'django.contrib.contenttypes'和
'django.contrib.sessions',Django的管理工具需要这3个包。确保
MIDDLEWARE_CLASSES 包含
'monMiddleware' 、
'django.contrib.sessions.middleware.SessionMiddleware' 和
'django.contrib.auth.middleware.AuthenticationMiddleware' 。
python manage.py syncdb。这一步将生成管理界面使用的额外数据库表。 当你把'django.contrib.auth'加进INSTALLED_APPS后,第一次运行syncdb命令时, 系统会请你创建一个超级用户。 如果你不这么作,你需要运行python manage.py createsuperuser来另外创建一个admin的用户帐号,否则你将不能登入admin
Note:只有当INSTALLED_APPS包含'django.contrib.auth'时,pythonmanage.py createsuperuser这个命令才可用。
4. 将admin访问配置在URLconf(urls.py). 默认情况下,命令django-admin.pystartproject生成的文件urls.py是将Django admin的路径注释掉的, 取消注释。
# Include these import statements...
from django.contrib import admin
admin.autodiscover()
# And include this URLpattern...
urlpatterns = patterns('',
(r'^admin/', include(admin.site.urls)),
使用管理工具
运行Django管理工具
启动开发服务器(python manage.py runserver),然后在浏览器中访问:http://127.0.0.1:8000/admin/
管理界面的设计是针对非技术人员的,所以它应该是自我解释的。
登录管理界面
使用你原来设置的超级用户的用户名和密码。
1. 如果无法登录,请运行`` python manage.py createsuperuser`` ,确保你已经创建了一个超级用户。
2. 如果看到如下所示的错误页面报告:ImportError at /admin/cannot import name patterns...很可能使用的 Django 版本不符合,可以切换到对应的旧版本教程去或者更新到较新的 Django 版本。
1. 这个页面列出了管理工具中可编辑的所有数据类型。 它仅有两个默认的管理-编辑模块:用户组(Groups)和用户(Users)。
2. 界面上并没有显示之前创建的数据表,因为我们的这个表没有在admin.py中注册,也就是admin后台并不知道。后面会讲怎么添加/注册 -- 将Models加入到Admin管理。
3. 在Django管理页面中,每一种数据类型都有一个* change list* 和* editform* 。前者显示数据库中所有的可用对象;后者可让你添加、更改和删除数据库中的某条记录。
配置Django管理工具语言
如果你的母语不是英语,而你不想用它来配置你的浏览器,你可以做一个快速更改来观察Django管理工具是否被翻译成你想要的语言。
仅需添加`` ‘django.middleware.locale.LocaleMiddleware’`` 到`` MIDDLEWARE_CLASSES`` 设置中,并确保它在’django.contrib.sessions.middleware.SessionMiddleware’* 之后* 。 完成后,请刷新页面。 如果你设置的语言可用,一系列的链接文字将被显示成这种语言。这些文字包括页面顶端的Changepassword和Log out,页面中部的Groups和Users。 Django自带了多种语言的翻译。[ Django更多的国际化特性]
点击Uers行中的Change链接。这个页面显示了数据库中所有的用户。可以将它看作是一个漂亮的网页版查询:`` SELECT * FROM auth_`` ,你会发现页面中还有过滤器、排序和查询框。 过滤器在右边;排序功能可通过点击列头查看;查询框在页面顶部,它允许你通过用户名查询。
点击其中一个用户名,你会看见关于这个用户的编辑窗口。
1. 这个页面允许你修改用户的属性,如姓名和权限。 (如果要更改用户密码,你必须点击密码字段下的change the password using this form)
2. 不同类型的字段会用不同的窗口控件显示。例如,日期/时间型用日历控件,布尔型用复选框,字符型用简单文本框显示。
3. 你可以通过点击编辑页面下方的删除按钮来删除一条记录。 你会见到一个确认页面。有时候,它会显示有哪些关联的对象将会一并被删除。 (例如,如果你要删除一个出版社,它下面所有的图书也将被删除。)
4. 你可以通过点击管理主页面中某个对象的Add来添加一条新记录。 一个空白记录的页面将被打开,等待你填充。
5. 你还能看到管理界面也控制着你输入的有效性。 你可以试试不填必需的栏目或者在时间栏里填错误的时间,你会发现当你要保存时会出现错误信息。 6. 当你编辑已有的对像时,你在窗口的右上角可以看到一个历史按钮。 通过管理界面做的每一个改变都留有记录,你可以按历史键来检查这个记录。
将Models加入到Admin管理
将自己的模块加入管理工具中,这样我们就能够通过这个漂亮的界面添加、修改和删除数据库中的对象了。之前我们定义了三个模块:Publisher 、Author 和Book 。
在mysite/books/创建admin.py,输入以下代码,通知管理工具为这些模块逐一提供界面。
from django.contrib import admin
from VoteSite.books.models import Publisher, Author, Book
# Register your models here.
admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)
完成后,打开页面`` http://127.0.0.1:8000/admin/`` ,你会看到一个Books区域,其中包含Authors、Books和Publishers。& (你可能需要重启runserver)
Note:这里有个神奇的bug:修改后Django服务器会报错,但python文件中不报错,把
fromVoteSite.books.models
importPublisher, Author, Book修改为
frombooks.models
importPublisher, Author, Book后Django服务器不报错,但python文件中会显示错误,只是这个错误没影响- -,runserver成功!
修正方法:pycharm & settings & languages & framworks & Django & pythonworkspace & Enable Django Support: Django project root:E:\mine\python_workspace\VoteSite settings: VoteSite\settings.py & OK。这样做是为了告诉python这是一个Django项目。(跳跳乱说,不能解决)
管理工具处理外键和多对多关系的方法
`` Book`` 模块的例子:
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
在Add book页面中(`` http://127.0.0.1:8000/admin/books/book/add/`` ),`` 外键`` publisher用一个选择框显示,`` 多对多`` 字段author用一个多选框显示。 点击两个字段后面的绿色加号,可以让你添加相关的记录。
举个例子,如果你点击Publisher后面的加号,你将会得到一个弹出窗口来添加一个publisher。 当你在那个窗口中成功创建了一个publisher后,Add book表单会自动把它更新到字段上去.
自定义管理工具-自定义模块
Note:记住这三步来实现模型的变更(否则在日期型和数字型字段设置时保存信息到数据库会成功,但会显示错误)[Django项目实践3 - Django模型]
修改你的模型(在models.py中)。
运行python manage.py makemigrations命令为这些改动创建迁移文件。
运行python manage.py migrate命令将这些改动应用到数据库中。
设置字段可选
管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选的,即允许不填,允许输入空值。
为了指定email字段为可选,你只要编辑Book模块,在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,这使得它们不。
当你添加blank=True以后,刷新页面Add author edit form(http://127.0.0.1:8000/admin/books/author/add/ ),将会发现Email的标签不再是粗体了。
Note:blank=True就是说默认值是‘’,而不是NULL,因为从下面可知,Django生成CREATETABLE语句自动为每个字段显式加上NOT NULL。
设置日期型和数字型字段可选(还有ImageField等)
虽然blank=True同样适用于日期型和数字型字段,但是这里需要详细讲解一些背景知识。
SQL有指定空值的独特方式,它把空值叫做NULL。NULL可以表示为未知的、非法的、或其它程序指定的含义。在SQL中,NULL的值不同于空字符串,就像Python中None不同于空字符串(&&)一样。这意味着某个字符型字段(如VARCHAR)的值不可能同时包含NULL和空字符串。这会引起不必要的歧义或疑惑。 为什么这条记录有个NULL,而那条记录却有个空字符串? 怎样才能得到全部拥有空值的记录,应该按NULL和空字符串查找还是仅按字符串查找?
为了消除歧义,Django生成CREATETABLE语句自动为每个字段显式加上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
数据一致性:在管理工具中,如果你留空一个字符型字段,它会为此插入一个空字符串(而不是NULL)。
但是,日期型、时间型和数字型字段不接受空字符串,可能会得到数据库返回的错误。 (PostgreSQL比较严禁,会抛出一个异常;MySQL可能会也可能不会接受。)
在这种情况下,NULL是唯一指定空值的方法。 因此,如果你想允许一个日期型(DateField、TimeField、DateTimeField)或数字型(IntegerField、DecimalField、FloatField)字段为空,你需要使用null=True 和blank=True。
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)
def __str__(self):
return self.title
因为null=True改变了数据的语义,即改变了CREATETABLE语句,把publication_date字段上的NOTNULL删除了。 要完成这些改动,我们还需要更新数据库。
出于某种原因,Django不会尝试自动更新数据库结构。所以你必须执行ALTERTABLE语句将模块的改动更新至数据库。可以使用python manage.py dbshell进入数据库服务环境。[Mysql数据库安装及配置]
ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;
以上SQL语法是PostgreSQL特有的。[详细数据库结构更改]
自定义字段标签
在编辑页面中,每个字段的标签都是从模块的字段名称生成的。 规则很简单: 用空格替换下划线;首字母大写。例如: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编辑页面中看到这个新标签。
Note:不必把verbose_name的首字母大写,Django会自动适时将首字母大写,并且在其它不需要大写的地方使用verbose_name的精确值。
django后台设置可动态增删的add字段
{实现如工作经历随时增删}
class WorkExp(models.Model):
work_experience = models.TextField(verbose_name='工作经历')
class People(models.Model):
name = models.CharField(max_length=150, verbose_name='姓名')
work_experiences = models.ManyToManyField(WorkExp, blank=True, null=True, verbose_name='工作经历') 这样就可以在后台随时点击add,在弹出框中增加工作经历
Note:在表WorkExp未建立前,后面的+符号是没有的,所以要确保表WorkExp已建立。
自定义ModelAdmin类-自定义管理工具
我们做的blank=True、null=True和verbose_name修改其实是模块级别,而不是管理级别的。 也就是说,这些修改实质上是构成模块的一部分,并且正好被管理工具使用,而不是专门针对管理工具的。
自定义管理工具选项都在ModelAdmin classes里面,这些类包含了管理工具中针对特别模块的配置。
自定义显示字段
{自定义Author模块的列表中的显示字段 - Select& *** to change界面}
列表默认地显示查询结果中对象的__unicode__()。&
class Author(models.Model):
作者有姓,有名及email地址
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 u'%s %s' % (self.first_name, self.last_name)
列表中显示的是每个作者的姓名。
添加其它字段,从而改变列表的显示
比如说:在这个列表中可以看到作者的邮箱地址;能按照姓氏或名字来排序。
为Author模块定义一个ModelAdmin类。 这个类是自定义管理工具的关键,其中最基本的一件事情是允许你指定列表中的字段。 打开admin.py并修改:
from django.contrib import admin
from books.models import Publisher, Author, Book
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
# Register your models here.
admin.site.register(Publisher)
# admin.site.register(Author)
admin.site.register(Author, AuthorAdmin)
admin.site.register(Book)
1. 新建类AuthorAdmin,从django.contrib.admin.ModelAdmin派生出来的子类,保存着一个类的自定义配置,以供管理工具使用。 我们只自定义了一项:list_display, 它是一个字段名称的元组,用于列表显示。 当然,这些字段名称必须是模块中有的。
2. 我们修改了admin.site.register()调用,在Author后面添加了AuthorAdmin: 用AuthorAdmin选项注册Author模块。admin.site.register()函数接受一个ModelAdmin子类作为第二个参数。
3. the value of list_display must not be a manyToManyField!& 如BookAdmin中的list_display不能有authors。
刷新author列表页面
添加一个快速查询栏
{Select& *** to change界面}
&向AuthorAdmin追加search_fields,如:
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
search_fields = ('first_name', 'last_name')
刷新浏览器,你会在页面顶端看到一个根据姓名查询的查询框。正如用户所希望的那样,它是大小写敏感,并且对两个字段检索的查询框。如果查询&bar&,那么名字中含有Barney和姓氏中含有Hobarson的作者记录将被检索出来。
添加过滤器
{Select& *** to change界面}
from django.contrib import admin
from books.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 = ('publisher_date',)
# Register your models here.
admin.site.register(Publisher)
# admin.site.register(Author)
admin.site.register(Author, AuthorAdmin)
admin.site.register(Book, BookAdmin)
1. 由于我们要处理一系列选项,因此我们创建了一个单独的ModelAdmin类:BookAdmin。
2. 首先,我们定义一个list_display,以使得页面好看些。 然后,我们用list_filter这个字段元组创建过滤器,它位于列表页面的右边。
3. Django为日期型字段提供了快捷过滤方式,它包含:今天、过往七天、当月和今年。这些是开发人员经常用到的。
`` 过滤器`` 同样适用于其它类型的字段
不单是`` 日期型`` (`` 布尔型`` 和`` 外键`` 字段)。当有两个以上值时,过滤器就会显示。
另外一种过滤日期的方式是使用date_hierarchy选项,如:
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
**date_hierarchy = 'publication_date'**
修改后页面中的列表顶端会有一个逐层深入的导航条,效果如图 6-11. 它从可用的年份开始,然后逐层细分到月乃至日。
Note:date_hierarchy接受的是* 字符串* ,而不是元组。因为只能对一个日期型字段进行层次划分。
改变默认的排序方式
按publication date降序排列。 列表页面默认按照模块classMeta中的ordering所指的列排序。但目前没有指定ordering值,所以当前排序是没有定义的。
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
**ordering = ('-publication_date',)**
Note:这个ordering选项基本像模块中classMeta的ordering那样工作,除了它只用列表中的第一个字段名。如果要实现降序,仅需在传入的列表或元组的字段前加上一个减号(-)。
刷新book列表页面观看实际效果。 注意Publicationdate列头现在有一个小箭头显示排序。
自定义编辑表单
{change *** 编辑界面}
先自定义字段顺序。 默认地,表单中的字段顺序是与模块中定义是一致的。通过使用
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)即可。 当你的admi用户只是被信任可以更改你的某一部分数据时,或者,你的数据被一些外部的程序自动处理而改变了了,你就可以用这个功能。 例如,在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')**
Note:1. 上图中就没有修改publication日期的选项了。
2. 当一个用户用这个不包含完整信息的表单添加一本新书时,Django会简单地将publication_date设置为None,以确保这个字段满足null=True的条件。
另一个常用的编辑页面自定义是针对多对多字段的。 真如我们在book编辑页面看到的那样,`` 多对多字段`` 被展现成多选框。虽然多选框在逻辑上是最适合的HTML控件,但它却不那么好用。 如果你想选择多项,你必须还要按下Ctrl键(苹果机是command键)。 虽然管理工具因此添加了注释(help_text),但是当它有几百个选项时,它依然显得笨拙。
使用filter_horizontal
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
**filter_horizontal = ('authors',)**
刷新book编辑页面,你会看到Author区中有一个精巧的JavaScript过滤器,它允许你检索选项,然后将选中的authors从Available框移到Chosen框,还可以移回来。
强烈建议针对那些拥有十个以上选项的`` 多对多字段`` 使用filter_horizontal。 这比多选框好用多了。 你可以在多个字段上使用filter_horizontal,只需在这个元组中指定每个字段的名字。
ModelAdmin类还支持filter_vertical选项
它像filter_horizontal那样工作,除了控件都是垂直排列,而不是水平排列的。 至于使用哪个,只是个人喜好问题。
Note:filter_horizontal和filter_vertical选项只能用在多对多字段 上, 而不能用于ForeignKey字段。&
raw_id_fields选项
默认地,管理工具使用`` 下拉框`` 来展现`` 外键`` 字段。但是,正如`` 多对多字段`` 那样,有时候你不想忍受因装载并显示这些选项而产生的大量开销。 例如,我们的book数据库膨胀到拥有数千条publishers的记录,以致于book的添加页面装载时间较久,因为它必须把每一个publishe都装载并显示在`` 下拉框`` 中。
解决这个问题的办法是使用`` raw_id_fields`` 选项。它是一个包含外键字段名称的元组,它包含的字段将被展现成`` 文本框`` ,而不再是`` 下拉框`` 。
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
filter_horizontal = ('authors',)
**raw_id_fields = ('publisher',)**
在这个输入框中,你输入什么呢? publisher的数据库ID号。 考虑到人们通常不会记住这些数据库ID,管理工具提供了一个放大镜图标方便你输入。点击那个图标将会弹出一个窗口,在那里你可以选择想要添加的publishe。
关联对象inline models:
class Professor(People):
job_title = models.CharField(max_length=150, blank=True, verbose_name='职称')
&class ResDir(models.Model):
research_direction = models.TextField(blank=True, verbose_name='研究方向')
professor = models.ForeignKey(Professor)
# postgraduate = models.ForeignKey(Postgraduate) admin.py:
class inlineBase(admin.TabularInline):
class ResDirInline(inlineBase):
# 要重启runserver
model = ResDir
class ProfessorAdmin(admin.ModelAdmin):
inlines = [ResDirInline, ] [Django admin site(三)InlineModelAdmin]
嵌套关联对象nested inline
安装django-nested-inline
pip install django-nested-inline
settings.py中的INSTALLED_APPS中添加nested_inline
INSTALLED_APPS = (
&'nested_inline'
Note:否则会出现找不到tabular-nested.html模板错误: TemplateDoesNotExist at /admin/bigdata/lab/add/ admin/edit_inline/tabular-nested.html
# 实验室相关信息
class Lab(models.Model):
introduction = models.TextField(null=True)
achievement = models.TextField(null=True)
class Directions(models.Model):
research_direction = models.TextField(blank=True, verbose_name='研究方向')
lab = models.ForeignKey(Lab)
class Images(models.Model):
images = models.ImageField(blank=True, verbose_name='图片')
directions = models.ForeignKey(Directions)
class ImagesInline(NestedInlineBase):
model = Images
class DirectionsInline(NestedInlineBase):
model = Directions
inlines = [ImagesInline]
class LabAdmin(NestedModelAdmin):
inlines = [DirectionsInline]
admin.site.register(Lab, LabAdmin)
[ django-nested-inline 0.3.4]
[ Nested Inline in Django Admin]
[ Django Admin nested inline]
用户、用户组和权限
因为你是用超级用户登录的,你可以创建,编辑和删除任何对像。
管理工具有一个用户权限系统,通过它你可以根据用户的需要来指定他们的权限,从而达到部分访问系统的目的。用户帐号应该是通用的、独立于管理界面以外仍可以使用。但我们现在把它看作是管理界面的一部分。 [如何把用户帐号与你的网站(不仅仅是管理工具)集成在一起]
你通过管理界面编辑用户及其许可就像你编辑别的对象一样。& 如你所想,用户对象有标准的用户名、密码、邮箱地址和真实姓名,同时它还有关于使用管理界面的权限定义。
首先,这有
一组三个布尔型标记:
活动标志,它用来控制用户是否已经激活。 如果一个用户帐号的这个标记是关闭状态,而用户又尝试用它登录时,即使密码正确,他也无法登录系统。
成员标志,它用来控制这个用户是否可以登录管理界面(即:这个用户是不是你们组织里的成员) 由于用户系统可以被用于控制公众页面(即:非管理页面)的访问权限,这个标志可用来区分公众用户和管理用户。
超级用户标志,它赋予用户在管理界面中添加、修改和删除任何项目的权限。 如果一个用户帐号有这个标志,那么所有权限设置(即使没有)都会被忽略。
普通的活跃、非超级用户的管理用户可以根据一套设定好的许可进入。
管理界面中每种可编辑的对象(如:books)都有三种权限:创建 许可,编辑 许可和删除 许可。 给一个用户授权许可也就表明该用户可以进行许可描述的操作。
当你创建一个用户时,它没有任何权限,该有什么权限是由你决定的。 例如,你可以给一个用户添加和修改publishers的权限,而不给他删除的权限。 请注意,这些权限是定义在模块级别上,而不是对象级别上的。这种基于对象级别的权限设置比较复杂,可以在Django documentation中寻找答案。
Note:权限管理系统也控制编辑用户和权限。 如果你给某人编辑用户的权限,他可以编辑自己的权限,这种能力可能不是你希望的。 赋予一个用户修改用户的权限,本质上说就是把他变成一个超级用户。
你也可以给组中分配用户。 一个 组 简化了给组中所有成员应用一套许可的动作。 组在给大量用户特定权限的时候很有用。
何时、为什么使用管理界面?
Django的管理界面对非技术用户要输入他们的数据时特别有用;事实上这个特性就是专门为这个 实现的。
在Django最开始开发的新闻报道的行业应用中,有一个典型的在线自来水的水质专题报道 应用,它的实现流程是这样的:
负责这个报道的记者和要处理数据的开发者碰头,提供一些数据给开发者。
开发者围绕这些数据设计模型然后配置一个管理界面给记者。
记者检查管理界面,尽早指出缺少或多余的字段。 开发者来回地修改模块。
当模块认可后,记者就开始用管理界面输入数据。 同时,程序员可以专注于开发公众访问视图和模板(有趣的部分)。
换句话说,Django的管理界面为内容输入人员和编程人员都提供了便利的工具。
除了数据输入方面,管理界面在下面这些情景中也是很有用的:
1. 检查模块* :当你定义好了若干个模块,在管理页面中把他们调出来然后输入一些虚假的数据,这是相当有用的。 有时候,它能显示数据建模的错误或者模块中其它问题。
2. 管理既得数据* :如果你的应用程序依赖外部数据(来自用户输入或网络爬虫),管理界面提供了一个便捷的途径,让你检查和编辑那些数据。 你可以把它看作是一个功能不那么强大,但是很方便的数据库命令行工具。
3. 临时的数据管理程序* :你可以用管理工具建立自己的轻量级数据管理程序,比如说开销记录。 如果你正在根据自己的,而不是公众的需要开发些什么,那么管理界面可以带给你很大的帮助。 从这个意义上讲,你可以把它看作是一个增强的关系型电子表格。 最后一点要澄清的是: 管理界面不是终结者。 过往许多年间,我们看到它被拆分、修改成若干个功能模块,而这些功能不是它所支持的。 它不应成为一个* 公众* 数据访问接口,也不应允许对你的数据进行复杂的排序和查询。 正如本章开头所说,它仅提供给可信任的管理员。 请记住这一点,它是有效使用管理界面的钥匙。
[已过滤文章中的超链接]
被转藏 : 1次
被转藏 : 1次

我要回帖

更多关于 win10超级管理员 的文章

 

随机推荐