zoukankan      html  css  js  c++  java
  • drf请求生命周期

    drf请求生命周期

    多app创建规范

    django框架:--url管理方法
    	
    	1.创建app:
            python manage.py startapp my_app_name
    	2.创建app --urls:
            from django.conf.urls import url
            from . import  views
            urlpatterns = {
                url(r'^book/$',views.BookAPIView.as_view()),
            }
    
    	3.urls配置 :
        	1.settings内添加 app;
            2.在urls内配置:
    	from django.conf.urls import url, include
    	from django.contrib import admin
    	urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^api/', include('my_app.urls')),
        ]
    --》创建新的app !!
    

    drf框架:

    -->原生Django与drf比较:drf不受csrf认证限制!!
    	Django REST framework is a powerful and flexible toolkit works with Django for building Restful Web APIs.
    
    	DRF是一个强大灵活的Django工具包,用于在Web后台构建Restful接口
    优势:
        提供了可视化的API调试界面,开发者可以在线测试接口
        提供了各种开箱即用的API认证授权工具,如OAuth2
        提供了orm数据序和非orm数据的序列化支持
        支持函数视图
        大量的文档和社区支持
    
    import rest_framework
    
    from rest_framework.views import APIView
    from rest_framework.request import Request
    from rest_framework.response import Response
    from rest_framework.exceptions import APIException
    from rest_framework.pagination import PageNumberPagination
    from rest_framework.settings import APISettings
    from rest_framework.parsers import JSONParser
    from rest_framework.filters import OrderingFilter
    

    APIView的请求生命周期:

    流程:
       1.APIView 继承View类,重写view类内的 as_view(),dispatch 方法
       2.重写的as_view方法,主体还是View的as_view,只是在返回视图view函数地址时,局部禁用csrf认证
    	3.重写的dispatch方法: 
           在执行请求逻辑前:请求模块(二次封装request)、解析模块(三种数据包格式的数据解析)
          在执行请求逻辑中:异常模块(执行出现任何异常交给异常模块处理)
          在执行请求逻辑后:响应模块(二次封装response)、渲染模块(响应的数据能JSON和页面两种渲染)
    
    小结:
    	APIView的as_view(局部禁用csrf) => 走父级的as_view调用dispatch分发请求 => APIView自己重写了dispatch,使用自己完成分发 => 分发前完成request二次封装、数据解析 => 三大认证 => 请求的实际响应(自己的视图类的处理分发) => 出现了异常,就会交给异常模块处理异常 => 响应模块完成响应、渲染模块可以json或浏览器两种方式渲染
    
    
  • 相关阅读:
    Java面试题:栈和队列的实现
    Java面试题:如何对HashMap按键值排序
    经典的Java基础面试题集锦
    9个Java初始化和回收的面试题
    20个高级Java面试题汇总
    Spring、Spring MVC、MyBatis整合文件配置详解2
    Spring、Spring MVC、MyBatis整合文件配置详解
    Spring:基于注解的Spring MVC
    margin百分比的相对值--宽度!
    jquery.cxSelect插件,城市没单位
  • 原文地址:https://www.cnblogs.com/shaozheng/p/12093331.html
Copyright © 2011-2022 走看看