Django认证系统

Django内置了用户认证系统--auth  , 默认使用auth-user表来存储用户信息 . 

Django的认证同时提供认证和授权,并通常统一称为认证系统,因为这些功能某些地方是耦合的。

一.User对象

       User对象是认证系统的核心。它们通常表示与你的站点进行交互的用户,并用于启用限制访问、注册用户信息和给创建者关联内容等。在Django的认证框架中只存在一种类型的用户,因此诸如‘superusers‘或管理员‘staff‘用户只是具有特殊属性集的user对象,而不是不同类型的user对象。

默认user的基本属性有:

  • 用户名
  • 密码
  • 电子邮件
  • 名字

二 . auth模块

from django.contrib import auth
  • auth模块中常用的方法
  • authenticate()   

    提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。

    如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。

    authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。

    #用法
    user = authenticate(username='theuser',password='thepassword')

     

  •  login(HttpRequest, user)

    该函数接受一个HttpRequest对象,以及一个经过认证的User对象。

    该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据。

       注意:

         只要使用login(request, user_obj)之后,request.user就能拿到当前登录的用户对象。否则request.user得到的是一个匿名             用户对象(AnonymousUser Object)。

 

  •  logout(request) 

           当调用该函数时 , 当前请求的session会全部清除

 

  • is_authenticated()

         用来判断当前请求是否通过认证

 

  • create_user()

    auth 提供的一个创建新用户的方法,需要提供必要参数(username、password)等。

from django.contrib.auth.models import User
user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)
  • create_superuser()

      创建超级用户

 

  • check_password(raw_password)

   检查密码是否正确 , 需要 输入当前用户的密码

 

  • set_password(raw_password)

    更改密码. 更改完需要保存

user_obj.set_password('新密码')
user_obj.save()

三. 扩展auth-user表

在user表中固定的字段很少 , 在项目中没法拿来使用 , 所以需要扩展的auth-user表 。 

我们可以通过继承内置的 AbstractUser 类,来定义一个自己的Model类。

这样既能根据项目需求灵活的设计用户表,又能使用Django强大的认证系统了。

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):

    nid = models.AutoField(primary_key=True)
    phone = models.CharField(max_length=11, null=True, unique=True)

扩展之后 , 需要在setting.py文件中设置

# 引用Django自带的User表,继承使用时需要设置
AUTH_USER_MODEL = "app名.UserInfo"
  • 使用Userinfo表
#创建用户:

UserInfo.objects.create_user(username='用户名', password='密码')

在扩展后 , 就要重新在数据库中创建该表 , 不能使用原来的auth-user表.

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值