如何使用Django默认的Auth权限管理系统

目录
  • 1.Django默认已经提供了认证系统Auth模块。
  • 2.Django用户模型
  • 3.自定义User对象

1.Django默认已经提供了认证系统Auth模块。

认证系统包含:

  • 用户管理
  • 权限
  • 用户组
  • 密码哈希系统
  • 用户登录或内容显示的表单和视图
  • 一个可插拔的后台系统 admin

Django默认用户的认证机制依赖Session机制,我们在项目中将引入JWT认证机制,将用户的身份凭据存放在Token中,然后对接Django的认证系统,帮助我们来实现:

  • 用户的数据模型
  • 用户密码的加密与验证
  • 用户的权限系统

auth存在的位置 External Libraries\site-packages\django\contrib\..其中包括auth模块和admin模块.

2.Django用户模型

Django认证系统中提供了用户模型类User保存用户的数据,模型保存位置:D:\anaconda\Lib\site-packages\django\contrib\auth\models.py,默认的User包含以下常见的基本字段:

字段名 字段描述
username 必选。150个字符以内。 用户名可能包含字母数字,_@+ .-个字符。
first_name 可选(blank=True)。 少于等于30个字符。
last_name 可选(blank=True)。 少于等于30个字符。
email 可选(blank=True)。 邮箱地址。
password 必选。 密码的哈希加密串。 (Django 不保存原始密码)。 原始密码可以无限长而且可以包含任意字符。
groups Group 之间的多对多关系。
user_permissions Permission 之间的多对多关系。
is_staff 布尔值。 设置用户是否可以访问Admin 站点。
is_active 布尔值。 指示用户的账号是否激活。 它不是用来控制用户是否能够登录,而是描述一种帐号的使用状态。
is_superuser 是否是超级用户。超级用户具有所有权限。
last_login 用户最后一次登录的时间。
date_joined 账户创建的时间。 当账号创建时,默认设置为当前的date/time。

常用方法:

  • set_password(raw_password)

设置用户的密码为给定的原始字符串,并负责密码的。 不会保存User 对象。当Noneraw_password 时,密码将设置为一个不可用的密码。

  • check_password(raw_password)

如果给定的raw_password是用户的真实密码,则返回True,可以在校验用户密码时使用。

管理器方法:

管理器方法即可以通过User.objects. 进行调用的方法。

  • create_user(username, email=None, password=None, **extra_fields)

创建、保存并返回一个User对象。

  • create_superuser(username, email, password, **extra_fields)

create_user() 相同,但是设置is_staffis_superuserTrue

3.自定义User对象

因为系统默认自带的user对象很多属性和功能并不是我自己需要的,所以需要我们自己重新定义一个user对象.

第一步:创建一个user app

python manage.py startapp user

创建自定义user对象models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.
class user(AbstractUser):
    # 声明自定义user对象
    mobile=models.CharField(max_length=11,unique=True,verbose_name="手机号码")
    avatar=models.ImageField(upload_to="avatar",verbose_name="用户头像")

    class Mata:
        db_table="user"
        verbose_name="用户信息"
        verbose_name_plural=verbose_name

第二步:配置相关信息

进入主app下面的setting文件中

注册userapp

注册自定义模型

第三步:执行数据迁移

注意事项:如果是在第一次数据迁移之后,猜设置的AUTH_USER_MODEL自定义模型则会报错,解决方法如下:

  • 先把现有的数据库导出备份,然后清掉数据库中所有的数据表。
  • 把开发者创建的所有子应用下面的migrations目录下除了__init__.py以外的所有迁移文件,只要涉及到用户的,一律删除
  • 把django.contrib.admin.migrations目录下除了__init__.py以外的所有迁移文件,全部删除。
  • 把django.contrib.auth.migrations目录下除了__init__.py以外的所有迁移文件,全部删除。
  • 把reversion.migrations目录下除了__init__.py以外的所有迁移文件,全部删除。
  • 把xadmin.migrations目录下除了__init__.py以外的所有迁移文件,全部删除。
  • 接下来,执行数据迁移,回顾第0步中的数据,以后如果要修改用户相关数据,不需要重复本次操作,直接数据迁移即可。

删除表

删除user.migrations目录下除了__init__.py以外的所有迁移文件,只要涉及到用户的,一律删除

django.contrib.admin.migrations,django.contrib.auth.migrations,reversion.migrations,xadmin.migrations目录下除了__init__.py以外的所有迁移文件,全部删除

* 执行数据迁移
在terminal中执行:

python manage.py makemigrations
python manage.py migrate

到此这篇关于如何使用Django默认的Auth权限管理系统的文章就介绍到这了,更多相关Django Auth权限管理系统内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Django 自定义权限管理系统详解(通过中间件认证)

    1. 创建工程文件, 修改setting.py文件 django-admin.py startproject project_name 特别是在 windows 上,如果报错,尝试用 django-admin 代替 django-admin.py 试试 setting.py 最终的配置文件 import os import sys # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR =

  • 如何使用Django默认的Auth权限管理系统

    目录 1.Django默认已经提供了认证系统Auth模块. 2.Django用户模型 3.自定义User对象 1.Django默认已经提供了认证系统Auth模块. 认证系统包含: 用户管理 权限 用户组 密码哈希系统 用户登录或内容显示的表单和视图 一个可插拔的后台系统 admin Django默认用户的认证机制依赖Session机制,我们在项目中将引入JWT认证机制,将用户的身份凭据存放在Token中,然后对接Django的认证系统,帮助我们来实现: 用户的数据模型 用户密码的加密与验证 用户

  • django自带的权限管理Permission用法说明

    前言 一些公司内部的CMS系统存在某些内容让指定的用户有权限访问,这时候可以用django自带的权限管理进行限制,比较方便. 缺点:django自带的权限是针对model(模型)的,不能针对单条数据,要针对单条数据需要额外的操作. 默认的权限(add, change, delete, view) django针对每个模型,生成了四个默认的权限(add, change, delete, view).例如,我有一个model叫Log,那么这四个默认权限在数据库的存储格式为: 表auth_permis

  • MVC+EasyUI+三层架构简单权限管理系统

    闲来无事把以前做的一个项目整理了一下,今天拿出来跟大家分享,交流和探讨.希望大家多多指正. 一.项目架构图 其中Entity为模型实体层类库:DAL为数据访问层类库,主要负责数据库操作:BLL为业务逻辑类库,Common为公共帮助类库,WebUI为用户层. 非Web层的所有实体类模板都已在项目中创建好,直接用动软生成就可以了. 二.数据库相关表 数据库文件放在web层的DB目录中 三.功能界面 *整个项目的样式都采用的是easyui自带的bootstrap样式.项目中涉及到的相关js验证规则,都

  • Linux下安装Python3和django并配置mysql作为django默认服务器方法

    我的操作系统为centos6.5 1  首先选择django要使用什么数据库.django1.10默认数据库为sqlite3,本人想使用mysql数据库,但为了测试方便顺便要安装一下sqlite开发包. yum install mysql mysql-devel #为了测试方便,我们需要安装sqlite-devel包 yum install sqlite-devel 2  接下来需要安装Python了,因为Python3已经成为主流,所以接下来我们要安装Python3,到官网去下载Python3

  • thinkPHP5框架auth权限控制类与用法示例

    本文实例讲述了thinkPHP5框架auth权限控制类.分享给大家供大家参考,具体如下: 这个是比较简单的用法: 直接把类贴出来,这里我改了,我没有用uid,因为我建的表是admin表,所以代码里对应查询改成了aid 还有表名,我都去掉了前缀 <?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] //

  • 更换Django默认的模板引擎为jinja2的实现方法

    本机环境 操作系统:fedora24 python版本:3.5 Django版本:1.11.1 jinja2版本:2.9.6 为何要更换 DTL 先来谈谈Django的模板引擎,找了下,并没有一个确定的名字,就简单的叫Django Templates Language(DTL),中文就叫Django模板语言.使用中,大家会发现很多局限性,最明显的就是四则运算.就只能加减,乘除都不支持.另外还有判断相等,不能直接if,要用ifequal.确实不太方便.还有一点,DTL很慢,jinja2宣称比DTL

  • Django REST framwork的权限验证实例

    在这里插入代码片# Django REST framwork的权限验证 一.用户是否登录 (1)判断用户是否登录: permission_classes = (IsAuthenticated, ) 注意:permission_classes设置的是:验证的是用户是否登录.用户是否可以操作该数据等的权限: 权限组合方式,目前支持:与&(and) 或|(or) 非~(not) 例如:permission_classes = (SecAdminPermission | AudAdminPermissi

  • Django中session进行权限管理的使用

    目录 1.urls.py 2.login/models.py 3.views.login和login.html 4.views.index 4.views.index 5.views.logout 6.总结session和forms的搭配 当session启用后,传递给视图request参数的HttpRequest对象将包含一个session属性,就像一个字典对象一样.你可以在Django的任何地方读写request.session属性,或者多次编辑使用它. 这个文件在我的C:\Users\17

  • django中的auth模块与admin后台管理方法

    目录 1. auth模块 1.1 auth模块的常用方法 1.2 如何扩展auth_user表 2.admin后台管理 2.1 admin后台管理的准备工作 2.2 为admin后台设置样式和增加数据 1. auth模块 auth模块是对登录认证方法的一种封装,本身就是一个对象,可以获取用户的详细信息,有了auth模块可以验证登录信息是否存在数据库中,还可以检验用户是否已经登录,校验密码等. 在创建完django项目之后,执行数据库迁移之后,数据库里会增加很多新表,其中有一张名为auth_use

随机推荐