Django基础篇--用户权限管理和组管理
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的强大之处。
Django基础篇--用户权限管理和组管理的更多相关文章
- 用户管理_组管理_权限管理.ziw
2017年1月10日, 星期二 用户管理_组管理_权限管理 用户管理: useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage ...
- 01: Django基础篇
目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...
- Jenkins拾遗--第三篇(用户权限管理)
采访过很多实用Jenkins的同学,发现Jenkins的安全是一个很薄弱的地方.很多公司用作生产部署的Jenkins安全管理都不是很规范,就更别提测试用的Jenkins了. 其实Jenkins是一个很 ...
- 用户管理_组管理_设置主机名_UGO_文件高级权限_ACL权限
用户管理: 添加用户:useradd tom 设置密码:passwd tom 切换账户: su - tom (不加-也能切换,但是 -会有两点不同 1.有-会切换到该用户的主目录 2.会切换到该用户 ...
- .NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程
写在前面 这篇我们对用户权限进行极简设计并保留其扩展性.首先很感谢大家的阅读,前面六章我带着大家快速入门了ASP.NET Core.ASP.NET Core的启动过程源码解析及配置文件的加载过程源码解 ...
- python的django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
- python3之Django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
- 【linux之用户,密码,组管理】
一.用户及密码 用户账户 超级用户:UID=0 root 普通用户:UID!=0 系统用户: 0<UID<500 为了维持系统的某些功能或者实现某些服务 不能完成登录时候的身份验证 普通用 ...
- 01:django基础篇
Django其他篇 目录: 1.1 django初探 1.2 第一个django项目 1.3 django render/redirect/HttpResponse 和 request.GET req ...
随机推荐
- iOS开发笔记-一种任意字体、颜色混排UILabel的实现
最近开发新App,射妓狮给的图上出现一种不同大小字体混排的Label,就像下面这种: 想了想,最简单的方法是使用多个UILabel排列显示,但是这样不仅麻烦而且效果也不好,索性自定义UILabel来尽 ...
- python numpy安装
一.python下的numpy安装方法 第一步:安装python,这里不做介绍. 第二步:打开cmd看python是否安装成功. 第三步:输入 python -m pip install -U pip ...
- OpenMP初探
OpenMP支持c.cpp.fortran,本文对比使用openmp和未使用openmp的效率差距和外在表现,然后讲解基础知识. 一.举例 1.使用OpenMP与未使用OpenMP的比较. OpenM ...
- vs2015+qt5.9.7配置跨平台的工程
环境:vs2015 update 3 + qt 5.9.7 问题:代码中存在中文无法编译 附加目的:支持跨平台 问题分析:代码的编码格式导致中文编译错误,windows默认gb2312编码,qt默认u ...
- LoadRuner12.53教程(二)
使用HP Web访问示例应用程序 shǐ使 yòng用 H P W e b fǎng访 wèn问 shì示 lì例 yìng应 yòng用 chén ...
- git第十节--git hub
github 是一个开源的协作社区 github 插件octtree 为别人的仓库做贡献 fork 别人仓库内容到自己的个人仓库 git clone 到本地进行开发push 到个人仓库 提PR(pul ...
- rem布局原理深度理解(以及em/vw/vh)
一.前言 我们h5项目终端适配采用的是淘宝那套<Flexible实现手淘H5页面的终端适配>方案.主要原理是rem布局.最近和别人谈弹性布局原理,发现虽然已经使用了那套方案很久,但是自己对 ...
- python的Web框架,auth权限系统
使用django默认权限系统实现用户登录退出 判断用户是否登录 request.user.is_authenticated 返回的为bool值 一个简单的登录视图范式: # 导包 from djang ...
- [POI2006] PRO-Professor Szu
Description \(n\) 个别墅以及一个主建筑楼,从每个别墅都有很多种不同方式走到主建筑楼,其中不同的定义是(每条边可以走多次,如果走边的顺序有一条不同即称两方式不同). 询问最多的不同方式 ...
- Vue之项目搭建
一.Vue自动化工具的安装 nvm:nodejs 版本管理工具. 也就是说:一个 nvm 可以管理很多 node 版本和 npm 版本. nodejs:在项目开发时的所需要的代码库 npm:nodej ...