返回顶部
首页 > 资讯 > 精选 >django认证类配置实现方法是什么
  • 229
分享到

django认证类配置实现方法是什么

2023-06-25 14:06:37 229人浏览 泡泡鱼
摘要

这篇文章主要介绍“Django认证类配置实现方法是什么”,在日常操作中,相信很多人在djanGo认证类配置实现方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”django认证类配置实现方法是什么”的疑

这篇文章主要介绍“Django认证类配置实现方法是什么”,在日常操作中,相信很多人在djanGo认证类配置实现方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”django认证类配置实现方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、配置认证类

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.authenticationBasicAuthentication  #基于浏览器进行认证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.源码流程:

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

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

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

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

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

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

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

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

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

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

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

从源码分析,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的返回值:

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

到此,关于“django认证类配置实现方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: django认证类配置实现方法是什么

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

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

猜你喜欢
  • django认证类配置实现方法是什么
    这篇文章主要介绍“django认证类配置实现方法是什么”,在日常操作中,相信很多人在django认证类配置实现方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”django认证类配置实现方法是什么”的疑...
    99+
    2023-06-25
  • django 认证类配置实现
    目录一、配置认证类1.认证全局配置文件2.局部使用3.匿名用户配置:二、内置认证类1.BaseAuthentication2.其他认证类三、总结1.自定义认证类:2.认证配置:3.源...
    99+
    2024-04-02
  • 怎么在Django中实现jwt认证
    本篇文章为大家展示了怎么在Django中实现jwt认证,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、 jwt 安装和配置安装虚拟环境下执行以下命令pip install dj...
    99+
    2023-06-14
  • redis配置认证密码的方法
    1.通过配置文件进行配置 yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到 #requirepass foobared 去掉行前的注释,并修改密码为所需的密...
    99+
    2022-06-04
    密码 方法 redis
  • Spring Security认证的方法是什么
    今天小编给大家分享一下Spring Security认证的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2023-06-28
  • ADO.NET模型认证的方法是什么
    本篇内容主要讲解“ADO.NET模型认证的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ADO.NET模型认证的方法是什么”吧!一、SqlConnection对象ADO.NET使用Sq...
    99+
    2023-06-17
  • Nginx配置Https安全认证的实现
    1、Http与Https的区别 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,...
    99+
    2024-04-02
  • django实现表单的方法是什么
    在Django中,可以通过以下步骤实现表单:1. 创建一个继承自`forms.Form`的表单类。在表单类中,定义需要的字段,并为每...
    99+
    2023-09-26
    django
  • nginx配置证书和域名的方法是什么
    在Nginx中配置证书和域名的方法如下:1. 购买SSL证书:首先需要购买SSL证书,并获得证书文件和私钥文件。2. 配置域名解析:...
    99+
    2023-05-22
    nginx配置证书 nginx
  • Django中怎么实现用户认证与授权
    在Django中,用户认证和授权可以通过内置的认证系统来实现。以下是实现用户认证和授权的步骤: 创建用户模型:Django提供了...
    99+
    2024-04-02
  • HBase默认配置是什么
    小编给大家分享一下HBase默认配置是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!hbase.rootdir这个目录是region server的共享目录,...
    99+
    2023-06-03
  • 配置Linux使用LDAP用户认证的方法
    我这里使用的是CentOS完成的LDAP用户管理,可能与网上的大部分教程不同,不过写出来了,那么是肯定能用的了,不过会有部分文件,忘指教。 这里使用的 OPENLdap 配合 CentOS7 完成的用户管理,需要配置 n...
    99+
    2022-06-04
    配置Linux LDAP用户认证
  • windows下mongodb关闭认证的方法是什么
    在Windows下关闭MongoDB的身份验证方法如下:1. 打开命令提示符(CMD)或PowerShell。2. 使用cd命令导航...
    99+
    2023-08-23
    mongodb windows
  • springboot实现配置两个parent的方法是什么
    本篇文章为大家展示了springboot实现配置两个parent的方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。配置两个parent的方法在向pom.xml 文件中添加依赖之前需要先添加s...
    99+
    2023-06-22
  • IIS服务器配置SSL证书的方法是什么
    本篇内容介绍了“IIS服务器配置SSL证书的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前提条件1)已安装IIS服务器,且您...
    99+
    2023-07-04
  • mybatis-plus插入修改配置默认值的实现方式是什么
    这篇文章主要介绍“mybatis-plus插入修改配置默认值的实现方式是什么”,在日常操作中,相信很多人在mybatis-plus插入修改配置默认值的实现方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-07-02
  • ldap认证服务器搭建的方法是什么
    LDAP(Lightweight Directory Access Protocol)认证服务器的搭建方法如下:1. 安装LDAP服...
    99+
    2023-06-14
    ldap认证
  • django channels使用、配置及实现群聊的方法
    这篇文章主要介绍“django channels使用、配置及实现群聊的方法”,在日常操作中,相信很多人在django channels使用、配置及实现群聊的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-30
  • Django通过自定义认证后端实现多种登录方式验证
    目录前言实现自定义认证后端前言 我们见到几乎所有的 Web 网站或者手机 App 也好,它们的最终目的都是要留住用户,提升自己网站的用户注册量,所以说用户的概念也必须深入到每一个程序...
    99+
    2024-04-02
  • SpringBootsecurity安全认证登录的实现方法
    目录前言一、登录时序图二、配置与代码1.引入库2.代码文件参考文档前言 本文章主要从spring security安全认证登录内部调用流程来流程分析登录过程。 一、登录时序图 时序...
    99+
    2023-02-25
    SpringBoot security安全认证登录 SpringBoot security登录 SpringBoot安全认证登录
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作