zoukankan      html  css  js  c++  java
  • django的rest_framework框架源码剖析

    在看源码之前先了解一下什么是rest,restful api.

    什么是rest

    可以总结为一句话:REST是所有Web应用都应该遵守的架构设计指导原则。 REST是Representational State Transfer的简称,中文翻译为“表征状态转移”.

    restful api

    符合REST架构设计的API。

    restful api的书写规范:

    - URL(在url中表现出来它是一个api)
    - url名词(url应当是名词)
    - 版本 (在url中表明版本号)
    - 提交方式(提交方式最为重要,根据提交方式的不同来判断要执行什么样的操作)
    - status(返回的状态码)
    - Hypermedia link(在api中返回链接)
    - 错误详细(状态码是4xx时,应返回错误信息,error当做key。)

    下面就来看看它源码中的流程

    UserInfo类:

    from django.shortcuts import render,HttpResponse
    from rest_framework.views import APIView
    from rest_framework.exceptions import APIException
    
    class UserInfo(APIView):
        authentication_classes=[Myauthentication,]
        def get(self,request):
            return HttpResponse(".....")

    首先,请求刚进来会执行对应类中的dispathch()方法,若当前类中没有,就去它的父类APIView中找。

    第二步,它又调用了initialize_request并将它的返回值重新赋值给了request。说明现在的request就不是django原来的request了,然后我们点进去它里面都做了些什么。

    在initialize_request方法中,又重新封装了request对象,在原来的基础上又重新封装了一些东西,现在我们来看看get_authenticators()中到底做了什么

     

    在get_authenticators这个方法中循环了self.authentication_classes返回了一个列表对象,因为他是self.找的,所有它先去我们写的那个类中去找authentication_classes,我们

    写的类中没有才去父类中找,因此我们就可以自定义这个列表类了。在定义之前要知道它默认的类中都有什么,我们才会好根据它默认的类去定义。

    由此可以看出它默认的authentication_classes是从它的配置文件中读出来的。现在就可以去看看它配置文件中的类了。

    现在就可以去看看这两个类中都有什么方法。

     

    可以看出他们都继承了一个BaseAuthentication的类并且都实现了authenticate方法。所以现在我们去看看BaseAuthentication类到底是什么?

     

    由此可以看出BaseAuthentication类其实是一个接口类,让继承它的类必须实现authenticate方法。

    最后就是在request对象中的authenticatotes中封装了一些关于认证的对象,然后我们接着往下看 ,

    然后又执行initial这个方法。

    然后就在request.user中执行authenticate这个方法进行认证

    这就是认证的大概流程,其它权限什么的都一样,就不一一说明了。

  • 相关阅读:
    .net 5中配置Quartz集群
    .net 5中使用Quartz构建单机版定时任务器
    error: src refspec future does not match any
    .net core通过jenkins + gogs + docker实现自动化部署
    Format of the initialization string does not conform to specification starting at index 75
    .net core中解决vue使用axios请求接口时未携带cookie信息的处理
    .net core在Docker->Linux及Window平台环境变量的获取的兼容
    centos7.x中安装mysql
    使用docker部署.net core3.1时的Dockerfile写法(持续补充)
    ARTS-WEEK-019
  • 原文地址:https://www.cnblogs.com/wxp5257/p/8418668.html
Copyright © 2011-2022 走看看