返回顶部
首页 > 资讯 > 后端开发 > Python >django 认证类配置实现
  • 405
分享到

django 认证类配置实现

2024-04-02 19:04:59 405人浏览 独家记忆

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

摘要

目录一、配置认证类1.认证全局配置文件2.局部使用3.匿名用户配置:二、内置认证类1.BaseAuthentication2.其他认证类三、总结1.自定义认证类:2.认证配置:3.源

一、配置认证类

1.认证全局配置文件

经过认证的源码流程剖析,DRF的认证全局配置在api_setting中,以下是api_setings部分源码:


api_settings = APISettings(None, DEFAULTS, IMPORT_STRINGS)

def reload_api_settings(*args, **kwargs):
    setting = kwargs['setting']
    if setting == 'REST_FRAMEWORK':  #项目中settings.py的key
        api_settings.reload()

setting_changed.connect(reload_api_settings)

其中引用了Django,settings.py中的REST_FRAMEWORK作为key作为配置,所以全局配置示例:


#全局认证配置
REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES":['API.utils.auth.Authentication',]   #其中写认证的类的路径,不要在views中,这里我放在了utils目录下auth.py中
}

2.局部使用

局部某个视图不需要认证,则在视图类中加入authentication_classes=[]


authentication_classes = []    #authentication_classes为空,代表不需要认证

3.匿名用户配置:


REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES":['API.utils.auth.Authentication',],  #其中写认证的类的路径,不要在views中,这里我放在了utils目录下auth.py中    "UNAUTHENTICATED_USER": lambda:"匿名",#匿名用户配置,只需要函数或类的对应的返回值,对应request.user="匿名"
"UNAUTHENTICATED_token": None,#匿名token,只需要函数或类的对应的返回值,对应request.auth=None
}

二、内置认证类

1.BaseAuthentication

BaseAuthentication是djanGo rest framework为我们提供了最基本的认证类,正如源码流程一样,该类中其中定义的两个方法authenticate和authenticate_header(认证失败返回的响应头),使用时候重写该两个方法进行认证,正如示例:


class BaseAuthentication(object):
    """
    All authentication classes should extend BaseAuthentication.
    """def authenticate(self, request):
        """
        Authenticate the request and return a two-tuple of (user, token).
        """raise NotImplementedError(".authenticate() must be overridden.")

    def authenticate_header(self, request):
        """
        Return a string to be used as the value of the `WWW-Authenticate`
        header in a `401 Unauthenticated` response, or `None` if the
        authentication scheme should return `403 Permission Denied` responses.
        """pass

2.其他认证类


##路径:rest_framework.authentication
BasicAuthentication  #基于浏览器进行认证
SessionAuthentication #基于django的session进行认证
RemoteUserAuthentication #基于django admin中的用户进行认证,这也是官网的示例
TokenAuthentication #基于drf内部的token认证

三、总结

1.自定义认证类:

继承BaseAuthentication,重写authenticate方法和authenticate_header(pass就可以),authenticate()方法需要有三种情况(返回元祖、出现异常、返回none)。

2.认证配置:


#全局认证
REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES":['API.utils.auth.Authentication',]
}

#局部认证
authentication_classes = [BaseAuthentication,]

#是某个视图不进行认证
authentication_classes =[]

3.源码流程:

1.在django(CBV)中,客户端的发来的请求会执行视图类的as_view方法,而as_view方法中会执行dispacth方法,然后在根据请求的类型(反射)执行相应的方法(get、post等)。

2.使用django rest framework中的视图类需要继承APIView,请求到达视图类会执行视图类的as_view方法,而OrderView中没有as_view()方法,所以执行APIView的as_view()方法,

3.从APIView源码中可以看到APIView中as_view又执行了父类的as_view方法,在看看APIView的父类是View类,这恰好是django中的view视图类,

4.从View源码可以看出View类的as_view()方法执行流程:验证请求方法--->返回view函数名称(view函数会执行dispatch方法),一旦有请求进来执行view函数-->执行dispatch方法

5.当APIView的as_view方法执行了父类的as_view方法以后,请求进来会执行view方法,view方法中会执行dispatch方法,而Oderview没有dispatch方法,所以执行父类(APIView)的dispatch方法,

6.从APIView源码分析,执行APIView的dispatch方法时候会执行self.initialize_request方法,会对django原始的request进行封装。

7.self.initialize_request()源码分析,实例化Request()类,封装原始的request,authenticators(认证),执行self.get_authenticators(),到了这里就开始django rest framework的认证流程

8.self.get_authenticators()源码分析,采用列表生成式,循环self.authentication_classes,实例化其中的每一个类,返回列表,不难发现authentication_classes属性正式我们在认证的时候用到认证类列表,这里会自动寻找该属性进行认证。倘若我们的视图类没有定义认证方法呢?,当然django rest framework 已经给我们加了默认配置,如果我们没有定义会自动使用settings中的DEFAULT_AUTHENTICATION_CLASSES作为默认(全局),

 9.继续分析APIView的dispatch方法,此时执行self.inital方法,并将封装过后的request对象(Reuqest)作为参数进行传递,

10.在self.inital方法中会执行self.perfORM_authentication方法,而self.perform_authentication方法用会执行request.user,此时的request是Request对象,所以需分析Request类中的user属性,

11.从源码分析,在Request对象中,user属性是一个属性方法,并会执行self._authentication方法,

12.从源码分析,Request对象的self._authentication中循环self.authenticators(该列表是由认证对象构成的[对象1,对象2]),并执行每一个对象中的authenticate方法返回tuple,同时对该过程其进行了异常捕捉,有异常将返回给用户,下面是异常验证逻辑:

如果有异常则执行self._not_authenticated()方法,继续向上抛异常。
如果有返回值必须是一个元组,分别赋值给self.user, self.auth(request.user和request.auth),并跳出循环。
如果返回None,则由下一个循环处理,如果都为None,则执行self._not_authenticated(),返回 (AnonymousUser,None)
13.当都没有返回值,就执行self._not_authenticated(),相当于匿名用户,没有通过认证,并且此时django会返回默认的匿名用户设置AnonymousUser,如需要单独设置匿名用户返回值,则编写需要写UNAUTHENTICATED_USER的返回值:

14.所以经过以上分析,我们需要进行认证时候,需要在每一个认证类中定义authenticate进行验证,并且需要返回元祖。

到此这篇关于django 认证类配置实现的文章就介绍到这了,更多相关django 认证类配置内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: django 认证类配置实现

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

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

猜你喜欢
  • django 认证类配置实现
    目录一、配置认证类1.认证全局配置文件2.局部使用3.匿名用户配置:二、内置认证类1.BaseAuthentication2.其他认证类三、总结1.自定义认证类:2.认证配置:3.源...
    99+
    2024-04-02
  • django认证类配置实现方法是什么
    这篇文章主要介绍“django认证类配置实现方法是什么”,在日常操作中,相信很多人在django认证类配置实现方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”django认证类配置实现方法是什么”的疑...
    99+
    2023-06-25
  • Django 实现jwt认证的示例
    目录一、 jwt 安装和配置安装配置总路由配置分路由配置postman 测试前端配置登录按钮remember me 认证登录后确定框一、 jwt 安装和配置 安装 虚拟环境下执行...
    99+
    2024-04-02
  • Nginx配置Https安全认证的实现
    1、Http与Https的区别 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,...
    99+
    2024-04-02
  • ospfv3 认证配置
        ospfv3是基于ipv6的路由协议,因为IPV6本身的IPSEC安全特性,OSPFV3本身就已经没有再带安全认证功能,这一功能由IPV6协议来完成。     (我查了好久,书里并没有提到如何配置,国内的论坛也很少说到,即使有说到配...
    99+
    2023-01-31
  • django restframework使用redis实现token认证
    目录一、前言二、详解1. 前期准备2. 配置redis3. 将token写入redis3.1 原来的登录代码3.2 重写后的登录代码3.3 登录后redis存储的用户记录4. 重写认...
    99+
    2024-04-02
  • 怎么在Django中实现jwt认证
    本篇文章为大家展示了怎么在Django中实现jwt认证,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、 jwt 安装和配置安装虚拟环境下执行以下命令pip install dj...
    99+
    2023-06-14
  • Django Rest Framework实现身份认证源码详解
    目录一.Django框架二.身份认证的两种实现方式:三.身份认证源码解析流程一.Django框架 Django确实是一个很强大,用起来很爽的一个框架,在Rest Framework中...
    99+
    2024-04-02
  • Django 中间件实现用户认证与IP频
    1.URL访问过滤 通过装饰器进行用户认证非常方便,但是在添加部分需要认证的功能时,就需要再次添加装饰器,如果通过中间件来实现,就不需要再进行添加的操作. import re LOGIN_URL = '/login/' class MyL...
    99+
    2023-01-30
    中间件 用户 Django
  • Django中怎么实现用户认证与授权
    在Django中,用户认证和授权可以通过内置的认证系统来实现。以下是实现用户认证和授权的步骤: 创建用户模型:Django提供了...
    99+
    2024-04-02
  • django配置DJANGO_SETTINGS_MODULE的实现
    目录DJANGO_SETTINGS_MODULEDjangosettings详解DJANGO_SETTINGS_MODULE 使用Django时要通知Django当前使用的是哪个配置...
    99+
    2024-04-02
  • BSCI—3:配置EIGRP-MD5认证
    一、概述: EIGRP启用认证,用于防止恶意路由进入EIGRP自治系统导致路由***。EIGRP认证原理采用“密码比对”的形式,在接口受到EIGRP数据包后,检查认证类型、认证密码等字段,如果与本地接口定义的密码串匹配,那么接收该...
    99+
    2023-01-31
    BSCI EIGRP
  • Redis怎么配置认证密码
    本篇内容主要讲解“Redis怎么配置认证密码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis怎么配置认证密码”吧! redis配置密码1.通过...
    99+
    2024-04-02
  • 利用Django内置的认证视图实现用户密码重置功能详解
    前言 密码重置功能相信对大家来说都不陌生,本文主要给大家介绍了关于使用Django内置的认证视图实现简单的通过邮箱重置密码的功能,分享出来供大家参考学习,下面话不多说了,来一起来看看详细的介绍吧。 版本:...
    99+
    2022-06-04
    视图 详解 用户密码
  • redis配置认证密码的方法
    1.通过配置文件进行配置 yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到 #requirepass foobared 去掉行前的注释,并修改密码为所需的密...
    99+
    2022-06-04
    密码 方法 redis
  • NGINX 配置本地HTTPS(双向认证)
    SSL协议即用到了对称加密也用到了非对称加密(公钥加密),在建立传输链路时,SSL首先对对称加密的密钥使用公钥进行非对称加密,链路建立好之后,SSL对传输内容使用对称加密。 1.对称加密 速度高,可加密内容较大,用来加密...
    99+
    2023-01-31
    双向 NGINX HTTPS
  • Swagger2怎么配置Security授权认证
    本篇内容主要讲解“Swagger2怎么配置Security授权认证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Swagger2怎么配置Security授权认证”吧!Swagger2配置Secu...
    99+
    2023-07-05
  • Django通过自定义认证后端实现多种登录方式验证
    目录前言实现自定义认证后端前言 我们见到几乎所有的 Web 网站或者手机 App 也好,它们的最终目的都是要留住用户,提升自己网站的用户注册量,所以说用户的概念也必须深入到每一个程序...
    99+
    2024-04-02
  • vsftpd快速配置及配合mysql认证登录
    vsftpdvsftpd 是“very secure FTP daemon”,安全性是它的一个最大的特点,下面来看一下vsftpd的快速配置.vsftpd主要的配置文件:/etc/pam.d/vsftpd ...
    99+
    2024-04-02
  • Spring Security实现HTTP认证
    目录前言一、HTTP基本认证是什么?二、HTTP基本认证流程一.Spring Security使用HTTP基本认证1.创建项目spring-security-http-auth2.创...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作