文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Django auth组件

2023-01-30 22:47

关注

目录

  • 一.认证系统
  • 二.用户对象
    • 1.创建用户
    • 2.用户认证
    • 4.注销用户
    • 5.判断用户是否登录
    • 6.登录认证装饰器
    • 7.创建普通用户和超级用户
    • 8.校验密码
    • 9.修改密码
    • 10.is_staff和is_active
  • 三.扩展默认的auth_user表

一.认证系统

Django自带一个用户认证系统,用于处理用户账户、群组、许可和基于cookie的用户会话。
Django的认证系统主要包含:
    1.用户
    2.许可
    3.组
    4.可配置的密码哈希系统
    5.用于用户登录或者限制访问的表单和视图工具
    6.可插拔的后台系统

二.用户对象

用户对象是Django认证系统的核心,需要导入auth模块,该模块存在于django.contrib下

from django.contrib import auth

Django的认证框架只有一个用户模型,就是User模型,它位于django.contrib.auth.models下.

用户模型主要有下面几个字段:

  • username
  • password
  • email
  • first_name
  • last_name

1.创建用户

from django.contrib.auth.models import User
user = User.objects.create_user(name='yven',password='123456')
user.last_name = 'law'
user.save()

2.用户认证

提供的用户认证功能就是验证用户名以及密码是否正确,如果认证成功,便返回一个User对象,authenticate()会在该User对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的

user = auth.authenticate(request,username=name,password=pwd)
相当于查询:user=models.User.objects.filter(name=name,pwd=pwd).first()

3.用户登录

该函数接收一个HttpRequest对象和一个User对象参数,该方法会把用户的ID保存在Django的session中,一旦登录成功,函数中的request对象中,就会有一个user对象,就是当前登录的用户对象,如果没有登录,request.user=AnonymousUser,匿名用户

from django.contrib.auth import authenticate, login
def login(request):
    name = request.POST.get('name')
    pwd = request.POST.get('pwd')
    user = authenticate(username=name,password=pwd)
    if user:
        login(request,user)
        ...
    else:
        ...

4.注销用户

from django.contrib.auth import logout
def logout(request):
    logout(request)

5.判断用户是否登录

def my_view(request):
    if not request.user.is_authenticated()
        return redirect('%s?next=%s' % (settings.LOGIN_URL,requst.path))
    ...

6.登录认证装饰器

auth为我们提供了一个装饰器工具,用来快捷的给某个视图添加登录校验

from django.contrib.auth.decorators import login_required

@login_required(login_url='/login/')
def order(request):
    ...

login_url:如果没有登录,跳转到的页面,也可以通过全局设置,在settings中配置LOGIN_URL='/login/'

7.创建普通用户和超级用户

auth提供了创建新用户的方法,也提供了创建超级用户的方法,需要提供必要参数.

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

8.校验密码

auth提供一个检查密码是否正确的方法。正确返回true,错误false。

bool = request.user.check_password('密码)

9.修改密码

auth提供了一个修改密码的方法set_password,接收要设置新密码作为参数,设置完一定要调用用户对象的save()方法

request.user.set_password(password='新密码')
user.save()

10.is_staff和is_active

is_staff:用户是否拥有网站的管理权限。

is_active:是否允许用户登录,设置为False,可以在不删除用户的前提下禁止用户登录。

三.扩展默认的auth_user表

虽然内置的认证系统很好用,但是auth_user表的字段只有固定的几个,实际的应用中需要的字段更多,所以需要对默认的auth_user表进行扩展,第一时间想到的方法是新建另外一张表通过一对一和内置的auth_user表关联,这样的确可以满足要求,但是其实可以更好,就是通过继承内置的AbstractUser类,来定义一个自己的Model类。

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
    phone = models.CharField(max_length=255)
    address = models.CharField(max_length=255)

通过这种方法扩展内置的auth_user表之后,一定要在settings.py中告诉Django现在使用新定义的UserInfo表来做用户认证。

AUTH_USER_MODEL = 'app名.UserInfo'

一旦我们指定了新的认证系统所使用的表,我们就需要重新在数据库中创建该表,而不能继续使用原来默认的auth_user表了。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯