auth模块和Admin后台管理
Django auth应用模块
Django的auth模块
Django相较于其他轻型框架,另外一个优点就是,Django自带的auth模块,Django提供的auth模块能够快速的实现用户模块的功能,新建项目后,Django就把auth模块的所有功能提供给了开发者使用,
-
开发者可以使用Django提供的auth模块快速实现用户模块的功能,配合Admin很方便的实现一个简易的后台管理界面
-
auth模块同时还定义了一张名为auth_user的数据表,是auth模块的内建用户表,开发者只需要调用auth模块的相应接口生成此表
操作auth_user表
auth_user表的表结构如下:
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| password | varchar(128) | NO | | NULL | |
| last_login | datetime(6) | YES | | NULL | |
| is_superuser | tinyint(1) | NO | | NULL | |
| username | varchar(150) | NO | UNI | NULL | |
| first_name | varchar(30) | NO | | NULL | |
| last_name | varchar(150) | NO | | NULL | |
| email | varchar(254) | NO | | NULL | |
| is_staff | tinyint(1) | NO | | NULL | |
| is_active | tinyint(1) | NO | | NULL | |
| date_joined | datetime(6) | NO | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
11 rows in set (0.02 sec)#auth_user表
现在新建一张 auth_user 用户表,并为此表添加一个新用户 user。首先用如下方式引入 auth模块的 User 方法:
from django.contrib.auth.modles import User # 从Django自带的auth模块导入User类表
然后通过下面方法创建新用户 user ,如下所示:
user = User.object.create_user(username="jinx",password="123456",email="15645458@qq.com") # 利用该方法创建一个新的用户
user.save() # 调用save方法保存修改后的
同时也可以使用如下方法修改密码:
user.set_password(password="123456aaa") # 对user用户的原密码进行修改
根据具体的业务需求,还可以对表的字段进行增加、删除、更改等。
此外,当设计到用户时,随之产生的也就是权限的问题,例如,如何划分超级管理员和普通用户的权限,针对这一点,Django提供的auth模块也提供了标准的权限管理系统,配合Admin可以快速建立网站管理系统。
auth模块提供了认证用户的功能,可以用下面方式方式引入后使用:
from django.contrib.auth import authenticate # auth模块提供的用户认证功能
然后使用关键字传参的方法来传递用户凭证,从而达到用户认证的目的:
user=authenticate(user="jinx",password="123456aaa") # 通过提交用户名密码的方式来达到用户认证的目的
auth应用模块的其他作用
除了上述的功能外,auth模块还提供了下面的一些功能:
- 用户的登录(login),登出(logout)等功能,封装在
django.contrib.auth
里; - 用户权限系统封装在
django.contrib.auth.modles.Permission
,可以对用户的权限进行编辑; - 用户组可以通过
from django.contrib.auth.modles.Group
导入后来创建组或者删除组。
下面列举了一些常用的方法:
user.user_permission.add(permission) # 给某个用户的权限添加权限
group = Group.objects.create(name=group_name) # 添加新的用户组
group.save() # 保存新建好的用户组
group.delete() # 删除用户组
auth模块总结
综上所述,auth模块的总体功能总结如下:
· 实现并维护了用户/用户组的增加、删除、和修改;
· 实现了用户/用户组权限的增加、删除、和修改;
· 实现了可以自定义用户权限与用户组权限的功能;
· 提供了用户认证功能。
总的来说,Django提供的auth模块提高了开发人员的工作效率,在用户管理和权限管理这方面,不用再重复“造轮子”,不必再为一些重复的逻辑进行构建,但是在实际的开发中,用户管理模块和权限管理模块需要与实际的开发场景结合,决定是否要重写相应方法或者自定义相关接口。
Django Admin后台管理系统
Django的后台管理系统在新建项目以后,Django就为我们设置了后台管理系统的各种功能。
后台管理系统的重要性
针对web开发而言,web站点上有些操作需要后台管理员进行操作,例:博客网站某些博客内容不合法,用户的权限等;作为后台的管理员就需要将该类博客删除,如果没有后台管理系统,管理员只能通过shell脚本或者SQL手动去敲命令执行相关操作,暂先不谈管理人员是否是一个懂技术的人,即使懂技术,操作起来也比较麻烦,所以一个后台管理系统是很有必要的,主要是为了管理员能更快捷的操作。
其次,针对后台管理系统,主要是对数据表的存储进行管理,就像上面说的博客网站某些不合法的博客,管理员需要将其删除,而这些就是通过数据表的管理去实现。单一功能的后台管理系统比较容易构建,但是如果功能增多,就需要对多个数据表进行管理,这就增加了开发人员的重复工作量,而Django的后台管理系统很好的解决了这个问题。
进入Django的后台管理系统
-
新建项目
-
安装django
pip install django=="django的版本"
-
创建django项目
python manage.py startproject "项目名称" # 创建完项目以后,会生成一个和项目名重名的包,可以看成是django自带的主app
-
创建app
python manage.py startapp "app名称" # 这里的app可以理解为一个个的功能模块或者说一个功能
-
-
配置数据库
-
修改配置文件的位置,打开manage.py文件,该文件一般是整个项目的管理文件,配置文件的路径可以在manage.py文件里设置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings文件的路径') # 这里设置的是什么,就会去该路径里读取配置
-
配置数据库,进入到settings文件里,该文件一般是整个项目的配置文件,新建项目时,该文件一般在主app(即和项目重名的那个包)下。
DATABASES = { # 数据库配置 # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎类型 'NAME': 'django_demo', # 要连接的数据库名 'USER': 'root', # 连接数据库的用户名 'PASSWORD': '666', # 连接数据库的密码 'HOST': 'localhost', # 连接的数据库地址(ip) 'PORT': '3306', # 数据库启动端口号,默认3306 } }
-
-
数据库迁移
# 进入到控制台(Terminal) python manage.py makemigrations # 该操作相当于在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,这一步并不会作用到数据库 python manage.py migrate # 这一步才是真正作用到数据库,例:创建表之类的
-
创建超级用户
python manage.py createsuperuser # 创建用户,在执行完数据库迁移以后,数据库中就会有一个auth_user表,创建的超级用户就存在auth_user表里 输入用户名,密码(输入两次,第二次确认)
-
启动项目
# 进入到控制台(Terminal) python manage.py runserver "指定运行的地址" # 不指定运行地址则在当前地址运行
-
进入后台管理界面
浏览器输入`http://127.0.0.1:8000/admin/`
Admin后台管理总结
针对Django原生的Admin后台管理界面,可以利用Model Admin实现界面的个性化定制,比如字段值的过滤功能、表字段展示的排序、搜索功能等,通过重写Admin来定制自己专属的后台管理系统