zoukankan      html  css  js  c++  java
  • Django Rest Framework框架源码流程

           在详细说django-rest-framework源码流程之前,先要知道什么是RESTFULREST API

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

    - 表征状态转移
    - 面向资源编程,对互联网上的任意东西都视为资源。  

    REST API 其中API是一种接口,有两个用途:1)为别人提供服务 2)前后端分离

    restful api书写规范(面试会问)

    url(能够在url中表现出来它是一个api,注意api写在前面和后面的问题,会存在跨域问题)
    url名词 (url一定要是名词)
    版本(在url中标明版本号)
    提交方式(重要--根据提交方式判断该执行什么操作)
    status(返回的状态码)
    Hypermedia link(在api中返回链接)
    错误详细(根据状态码的不同,显示不同的错误信息)  

    接下来看看具体的源码流程

             

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

    在view.py文件中自己定义了一个类HostView,首先,请求刚进来会执行类中的dispatch()方法,如果当前类中没有此方法,就会去它的基类中找。

    接下来,调用initialize_request将返回值重新赋值给request,此时的request就不是django中的request了,如下图:

     在initialize_request方法中重新封装了request对象,即在request对象总重新加了一些东西,接下来我们来看看在get_authenticators()中做了什么?

    此时的authenticatiors=self.get_authenticators()是一个对象列表。

    在get_authenticators这个方法中遍历循环了self.authentication_classes并返回了一个列表对象,因为它调用的是self.找的,所有它先去我们写的那个类中去找authentication_classes,我们写的类中没有才去基类中找,因此我们就可以自定义这个列表类了,在定义之前要知道它默认的类中都有什么,我们才会好根据它默认的类去定义。

     

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

    接下来看看这两个类中做了些什么?

    BasicAuthentication类

    BasicAuthentication这样的类,必须实现authenticate方法,并且返回一个用户,赋值给request.user,这个request.user就是系统中进行用户认证的user对象,后续的权限验证一般都是通过判断request.user的user对象是否拥有某个权限。rest-framework默认的就是BasicAuthentication,也就是跟admin登陆用的一样的认证。

    SessionAuthentication类

    不难看出这两个类都继承了BaseAuthentication类,都实现了一个authenticate()方法,接下来我们看看BaseAuthentication类中到底干了什么?

     

    我们可以看出BaseAuthentication实际上是一个接口类,让继承它的类都实现authenticate()方法。

    接下来在request对象中封装了一些关于认证的方法及对象,接着就执行到了这里

    然后执行initial方法,进行相应的操作。

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

    最后就在request.user中执行authenticate这个方法进行认证(权限认证流程基本类似)

  • 相关阅读:
    Android 系统广播机制
    NBUT 1457 Sona (莫队算法)
    内存分配--静态内存、栈和堆
    Hibernate主键生成策略
    UVA 1482
    servlet开篇
    C语言的代码内存布局具体解释
    Mirantis Fuel fundations
    openstack中文文档
    C++ 之再继续
  • 原文地址:https://www.cnblogs.com/moning/p/8419301.html
Copyright © 2011-2022 走看看