广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Django的认证系统
  • 305
分享到

Django的认证系统

系统Django 2023-01-30 22:01:59 305人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。 Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内

我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。

Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。

auth模块

from djanGo.contrib import auth

auth中提供了许多实用方法:

1、authenticate()   

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

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

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

用法:

user = authenticate(username='theuser',password='thepassword')

2、login(HttpRequest, user)  

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

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

用法:

from django.contrib.auth import authenticate, login
   
def my_view(request):
  username = request.POST['username']
  password = request.POST['password']
  user = authenticate(username=username, password=password)
  if user is not None:
    login(request, user)
    # Redirect to a success page.
    ...
  else:
    # Return an 'invalid login' error message.
    ...

3、logout(request) 

该函数接受一个HttpRequest对象,无返回值。

当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。

用法:

from django.contrib.auth import logout
   
def logout_view(request):
  logout(request)
  # Redirect to a success page.

4、is_authenticated()

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

用法:

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

5、login_requierd()

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

用法:

from django.contrib.auth.decorators import login_required
      
@login_required
def my_view(request):
  ...

若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。

如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。

示例:

LOGIN_URL = '/login/'  # 这里配置成你项目登录页面的路由

6、create_user()

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

用法:

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

7、create_superuser()

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

用法:

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

8、check_password(password)

auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。

密码正确返回True,否则返回False。

用法:

ok = user.check_password('密码')

9、set_password(password)

auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。

注意:设置完一定要调用用户对象的save方法!!!

用法:

user.set_password(password='')
user.save()

一个修改密码功能的简单示例

@login_required
def set_password(request):
    user = request.user
    err_msg = ''
    if request.method == 'POST':
        old_password = request.POST.get('old_password', '')
        new_password = request.POST.get('new_password', '')
        repeat_password = request.POST.get('repeat_password', '')
        # 检查旧密码是否正确
        if user.check_password(old_password):
            if not new_password:
                err_msg = '新密码不能为空'
            elif new_password != repeat_password:
                err_msg = '两次密码不一致'
            else:
                user.set_password(new_password)
                user.save()
                return redirect("/login/")
        else:
            err_msg = '原密码输入错误'
    content = {
        'err_msg': err_msg,
    }
    return render(request, 'set_password.html', content)

修改密码示例
View Code

10、User对象的属性

User对象属性:username, password

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

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

扩展默认的auth_user表

这内置的认证系统这么好用,但是auth_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)
    
    def __str__(self):
        return self.username

注意:

按上面的方式扩展了内置的auth_user表之后,一定要在settings.py中告诉Django,我现在使用我新定义的UserInfo表来做用户认证。写法如下:

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

再次注意:

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

 

 

......

--结束END--

本文标题: Django的认证系统

本文链接: https://www.lsjlt.com/news/179705.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Django的认证系统
    我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。 Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内...
    99+
    2023-01-30
    系统 Django
  • Django用户认证系统(三)组与权限
    原文:https://www.cnblogs.com/linxiyue/p/4060817.html Django的权限系统很简单,它可以赋予users或groups中的users以权限。 Django admin后台就使用了该权限系统,...
    99+
    2023-01-30
    权限 用户 系统
  • Django 实现jwt认证的示例
    目录一、 jwt 安装和配置安装配置总路由配置分路由配置postman 测试前端配置登录按钮remember me 认证登录后确定框一、 jwt 安装和配置 安装 虚拟环境下执行...
    99+
    2022-11-12
  • django验证系统的具体使用
    目录user对象创建用户创建超级用户更改密码验证用户web请求认证用户如何登陆用户如何登出限制对未登录用户的访问LoginRequired Mixinuser对象 用户对象是认证系统...
    99+
    2023-03-21
    django 验证系统
  • django 认证类配置实现
    目录一、配置认证类1.认证全局配置文件2.局部使用3.匿名用户配置:二、内置认证类1.BaseAuthentication2.其他认证类三、总结1.自定义认证类:2.认证配置:3.源...
    99+
    2022-11-12
  • Django之用户认证组件
      用户认证组件用的是Django自带一个表:auth_user   一、auth模块   1,authenticate()判断用户是否存在方法 user=authenticate(username='xxx',password='xx...
    99+
    2023-01-30
    组件 用户 Django
  • 浅谈django中的认证与登录
    认证登录 django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1 authenticate(**credentials) 提供了用户认证,即验证用户名以及密码是否正确 ...
    99+
    2022-06-04
    浅谈 django
  • django验证系统如何使用
    这篇文章主要介绍了django验证系统如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇django验证系统如何使用文章都会有所收获,下面我们一起来看看吧。user对象用户对象是认证系统的核心。django...
    99+
    2023-07-05
  • Django基础7——用户认证系统、Session管理、CSRF安全防护机制
    文章目录 一、用户认证系统二、案例:登陆认证2.1 平台登入2.2 平台登出2.3 login_required装饰器 三、Django Session管理3.1 Django使用Session3.1.1 Cookie用法3.1...
    99+
    2023-08-30
    django csrf 安全 python linux
  • Linux系统如何实现pam认证
    这期内容当中小编将会给大家带来有关Linux系统如何实现pam认证,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、pam简介:PMA(Pluggable Authentication Module)是一...
    99+
    2023-06-28
  • django restframework使用redis实现token认证
    目录一、前言二、详解1. 前期准备2. 配置redis3. 将token写入redis3.1 原来的登录代码3.2 重写后的登录代码3.3 登录后redis存储的用户记录4. 重写认...
    99+
    2022-11-12
  • 怎么在Django中实现jwt认证
    本篇文章为大家展示了怎么在Django中实现jwt认证,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、 jwt 安装和配置安装虚拟环境下执行以下命令pip install dj...
    99+
    2023-06-14
  • Django中auth模块用户认证的使用
    目录auth模块是什么auth模块常用方法authenticate()login(HttpRequest, user)logout(request)is_authenticated(...
    99+
    2023-03-20
    Django auth模块用户认证 Django auth模块
  • 如何使用Django默认的Auth权限管理系统
    目录1.Django默认已经提供了认证系统Auth模块。2.Django用户模型3.自定义User对象1.Django默认已经提供了认证系统Auth模块。 认证系统包含: 用户管理权...
    99+
    2023-02-13
    Django Auth权限管理系统 Django 权限管理系统
  • Oracle 禁止操作系统认证登录
    以操作系统认证方式登录数据库的方法 1.最基本的方法就是使用“sqlplus / as sysdba”登录数据库 sqlplus / as sysdba 斜杠“/”左面是用户名,右面是密码,这里表示不给出用...
    99+
    2022-10-18
  • Linux系统PAM认证机制是什么
    本篇文章给大家分享的是有关Linux系统PAM认证机制是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。PAM是由sun提出的认证机制,通过一些动态链接库和一套统一的API可...
    99+
    2023-06-28
  • JWT技术解决IM系统的认证痛点
    一、痛点随着业务的发展,多个业务线接入了IM系统,IM系统长连接的安全问题变得很重要。瓜子有统一登录认证系统SSO,IM长连接通道也利用这个系统做安全认证,结构如下图。 认证步骤如下用户登录App,App从业务后台拿到单点系统SS...
    99+
    2023-06-05
  • Linux系统pam的服务模块及如何认证
    这篇文章跟大家分析一下“Linux系统pam的服务模块及如何认证”。内容详细易懂,对“Linux系统pam的服务模块及如何认证”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“Lin...
    99+
    2023-06-28
  • django-7-django模型系统
    <<<常用的模型字段类型>>>https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types  InterField Char...
    99+
    2023-01-31
    模型 系统 django
  • Django Rest Framework实现身份认证源码详解
    目录一.Django框架二.身份认证的两种实现方式:三.身份认证源码解析流程一.Django框架 Django确实是一个很强大,用起来很爽的一个框架,在Rest Framework中...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作