Django作为一个成熟的python后台开发框架,为开发者提供了很多内置的功能,开发者只需要做一些配置就可以完成原生操作中比较复杂的代码编写。这些内置功能中其中一个比较强大的功能就是后台用户管理类。
首先什么是用户?用户指能够登录站点,进行对本站点的进行操作(例如session会话,日志管理等)的开发者账号。
在Django中可以输入网址url/admin(例如:localhost:8000/admin)进入管理页面来创建用户和进行组管理。什么是组?组就是指用户拥有的权限,一个组可以将用户允许拥有的权限放在一起。
Django管理页面之用户创建
首先,想用进入管理页面,需要去创建一个超级用户。如何创建?
Linux操作系统进入项目所在的目录(manage.py文件同级目录)输入
./manage.py createsuperuser
接下来跟着终端输入的提示来输入就可以了,需要设置的值有用户名,密码,邮箱(注意:密码要大于8位,且不能全部为数字,并且不能跟用户名太相似,否则就会报错)。
创建好超级用户之后,在浏览器输入localhost:8000/admin进入用户登录入口
输入账号和密码后,可以看到主页的界面
Django管理页面之用户和组
下面主要讲讲认证和权限这一块的内容。
以修改超级用户Tan为例
点击进入Tan的管理页面,拖动到下面可以看到用户权限一栏,可以为每个用户设置不同的权限,如对日志的管理权限,对其他用户的管理权限,对数据库的管理权限等等。直接点击选择,再按中间的箭头就可以添加权限了。
在当前页面往上拉,可以看到组管理栏,点击右上角的‘+’符号,可以进入组添加页面
那么什么是组,组有什么用呢?
Django管理后台管理中将同类型的管理权限组织在一起,就叫做一个组,为这个组织起的名称叫组名。而用户可以自由地添加到组中,被添加到组中的用户会拥有这个组中所包含的管理权限。这样就很好地实现了多人拥有相同权限的管理,而不需要手动为每个用户添加相同重复的权限,用户只需要添加自己独特拥有的权限就可以。
创建完组后,可以在‘用户’设置页面,看到创建好的组,只要点击中间的箭头按钮就可以将用户添加到组里面。(这里由于字符集的关系,我用英文‘log admin’来表示‘日志管理’组)
回退到‘站点管理’页面,点击‘组’,可以看到之前创建的组。点击进去还可以修改组的权限。
注意以下这一栏的内容
一般对于超级用户而言是全部选择的,而对于普通用户(由超级用户创建)而言,就可以通过以下的选项来对用户是否可以登录管理站点和(超级用户)是否可以删除用户进行设置。
Django管理页面之数据库管理
Django另外一个强大的功能是它能够在管理页面中对数据库进行直接的操作。当初的设计据说是为了方便新闻内容的更新所以添加上上去的。
那么Django是如何实现这个过程的呢?首先我把一些必要的代码写出来。
在admin.py文件中的代码如下
from django.contrib import admin #这一句代码是在初始化app应用的时候,Django自动帮我们写好的,不用改动 from .models import * admin.site.register(Author)
原理解析:
首先第一句代码:from django.contrib import admin
contrib模块是Django的强大的功能包,也可以说是Django的标准库,就像math数学库是python的标准库一样。实际上,这个Django的标准库在Django中的地位可就强得多了。打个比喻,就好像腾讯在国内手机移动端通信App一家独大的位置一样,Django的很多模块包是基于contrib来构建的。具体有什么包,这些包又有什么用?需要讲的内容很多,笔者自己也没有学习完每一个包。在这里就大概说一下一些常用的包和它们的用途。
admin : 自动化的站点管理工具(我们这里的管理页面就是用到了这个包)。
auth : Django的用户验证包。
csrf : 用于防御跨站请求伪造的包。
redirects : 用来管理重定向的包。
sessions : 会话包。
sites : 一个可以让开发者在同一个数据库与 Django项目中管理多个网站的包。
这里借用网上一张总结得比较完整的图
第二句和第三句代码:
from .models import *
admin.site.register(Author)
from .models import * 将models.py中定义的映射类引入到当前文件中,那么就可注册任何一个想在管理页面中进行管理的数据库表。
为了在管理页面中对数据库表进行管理和操作,同时还需要在admin.site中注册相应的表。这里Django用的是admin下的site模块进行一个代理,将数据库表传输到管理页面中。如果打开Django的sites.py文件,就会看到下面一段说明
意思是用register()来注册在models.py中定义的类,并通过get_urls()方法来提供一个获取管理views模型层的接口,跟我们平常经常的MTV架构(即Models-Templates-Views)没有什么太大的区别,本质上权限管理页面也是一个页面,服务端的逻辑还是那样。理解这一点很有用,接下来修改数据库实体对象的名称在页面上的显示结果就很好理解了。
在管理页面中可以看到Inedx-Authors表
点击进入Authors表之后可以看到以下这个页面,但是有没发现,这个管理页面的字段都是英文?显然,这是跟实体类的字段保持一致的。那么如果是一个后台管理者,在平常阅读英文的时候觉得比较麻烦,那怎么办呢?
可以在实体类的字段定义时为字段添加verbose_name属性(默认条件下verbose_name=None),例如:
class Author(models.Model): name = models.CharField(max_length=30,null=False,verbose_name='用户名') age = models.IntegerField(verbose_name='年龄') email = models.URLField(null=True,verbose_name='Email')
添加verbose_name属性值之后,字段的名称变为中文
既然我上面说到,本质上权限管理页面也是一个页面,那么可以通过在页面中对数据进行一定的修改,那么映射到数据库中的数据也会跟着改变。上面的Authors实体类中,name,age,email字段都是可以修改的(注意id值不会显示在管理页面中)
在页面中可以数据库的内容进行修改,那么一个即使不懂编程的管理者,也可以为网站添加需要的内容。比如说一个新闻网站,有一个Aritcle的数据库,其中有一个Content的字段,那么新闻编辑人员就可以大段大段地往数据库里面添加文本。这就是为什么Django早期是为新闻网站而设计的框架的原因。自动化的管理可以让不懂编程的人在管理网站的时候更加方便和容易操作。这就是Django的强大之处。