解析器,路由控制,响应器

解析器

urlencode,formdata,json

urlencode编码,body体中的数据格式:
name = laqz&age=18&xx =yy

json编码:{"name":"lqz","age":18}

formdata: 需要有数据部分和文件部分的分割

作用:
根据请求头 content-type 选择对应的解析器对请求体内容进行处理。
有application/json,x-www-form-urlencoded,form-data等格式

使用:
    局部使用:
        from rest_framework.parsers import JSONParser,FormParse
        parser_classes = [JSONParser, ]

    全局使用:
 REST_FRAMEWORK = {
        'DEFAULT_PARSER_CLASSES':[
        'rest_framework.parsers.JSONParser'
        'rest_framework.parsers.FormParser'
        'rest_framework.parsers.MultiPartParser'
    ]
}

        局部使用指定的解析器:
            parser_classes = [JSONParser, ]
            

路由控制

三种
1.基本路由:url(r'^admin/', admin.site.urls)
2.半自动路由: url(r'^users/$', views.Users.as_view({'get':'list','post':'create'})),
    必须继承:ViewSetMixin,继承顺序

3.from django.conf.urls import url,include
from app01 import views
from rest_framework import routers
#生成对象
router=routers.DefaultRouter()
# 两个参数,一个是匹配的路由,一个是视图中写的CBV的类
router.register('publish',views.PublishView)
urlpatterns = [
    # http://127.0.0.1:8000/publish/format=json(渲染器通过这个判断,返回渲染的页面)
    # url(r'^publish/', views.PublishView.as_view({'get':'list','post':'create'})),
    # http://127.0.0.1:8000/publish.json(渲染器通过这个判断,返回渲染的页面)
    # url(r'^publish\.(?P<format>\w+)$', views.PublishView.as_view({'get':'list','post':'create'})),

    # 可以用 以下方式访问
    # 1 http://127.0.0.1:8000/publish/
    # 2 http://127.0.0.1:8000/publish.json
    # 3 http://127.0.0.1:8000/publish/3
    # 4 http://127.0.0.1:8000/publish/3.json
    url(r'',include(router.urls))
]

响应器

一般不需要配置,使用默认的

作用:
根据 用户请求URL 或 用户可接受的类型,筛选出合适的 渲染组件。
用户请求URL:
    http://127.0.0.1:8000/test/?format=json
    http://127.0.0.1:8000/test.json

内置的响应器
显示json格式:JSONRenderer
http://127.0.0.1:8000/test/?format=json
http://127.0.0.1:8000/test.json
http://127.0.0.1:8000/test/

默认显示格式:BrowsableAPIRenderer(可以修改它的html文件)
http://127.0.0.1:8000/test/?format=api
http://127.0.0.1:8000/test.api
http://127.0.0.1:8000/test/

表格方式:AdminRenderer
http://127.0.0.1:8000/test/?format=admin
http://127.0.0.1:8000/test.admin
http://127.0.0.1:8000/test/

form表单方式:HTMLFormRenderer
http://127.0.0.1:8000/test/?format=form
http://127.0.0.1:8000/test.form
http://127.0.0.1:8000/test/

局部使用:
from rest_framework.renderers import  HTMLFormRenderer,BrowsableAPIRenderer
class BookDetailView(APIView):
    renderer_classes = [HTMLFormRenderer,BrowsableAPIRenderer ]

全局使用:
    REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES':['rest_framework.renderers.JSONRenderer']
}

drf响应器的配置文件查找顺序

1.先从我们定义的视图类中找
class APIView(View):
    #我们定义的视图类继承了APIView,如果在视图类中定义了renderer(响应器,渲染器)_classes,则优先使用我们定义的
    renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES

2.再从配置文件中找
api_settings.DEFAULT_RENDERER_CLASSES
#api_settings如果没有DEFAULT_RENDERER_CLASSES属性,会触发__getattr__方法
    def __getattr__(self, attr):
        ...
        try:
            #先从user_settings中查找
            val = self.user_settings[attr]
        except KeyError:
            #如果没有找到,从默认配置中找
            val = self.defaults[attr]

        if attr in self.import_strings:
            val = perform_import(val, attr)

        self._cached_attrs.add(attr)
        setattr(self, attr, val)
        return val

 @property
    def user_settings(self):
        if not hasattr(self, '_user_settings'):
            #从配置文件的'REST_FRAMEWORK'中查找
            self._user_settings = getattr(settings, 'REST_FRAMEWORK', {})
        return self._user_settings

 3.从默认配置中找

def __init__(self, user_settings=None, defaults=None, import_strings=None):
    if user_settings:
        ...
        #可以实例化的时候传入
        self.defaults = defaults or DEFAULTS
#默认的配置文件
DEFAULTS = {
    # Base API policies
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    )

    #from django.conf import settings,如果用户定义了就用用户的配置,如果没有定义就去默认的

原文地址:https://www.cnblogs.com/robert-zhou/p/10651712.html

时间: 2024-08-29 11:37:54

解析器,路由控制,响应器的相关文章

Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)

一.url控制 基本路由写法:最常用 from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^books/', views.Books.as_view()), url(r'^book/', views.Book.as_view()), url(r'^login/

路由控制,版本控制,解析器,响应器

路由控制 基本路由写法 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^register/', views.register), url(r'^login/', views.Login.as_view()), url(r'^test/', views.Authtest.as_view()), ] 第二种写法 必须继承只要继承了ViewSetMixin: urlpatterns = [ url(r'^publish/$', view

DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)

url控制 第二种写法(只要继承了ViewSetMixin) url(r'^pub/$',views.Pub.as_view({'get':'list','post':'create'})), #获取所有记得路由后面加$结束符 #pub/?format=json url(r'^pub\.(?P<format>\w+)$',views.Pub.as_view({'get':'list','post':'create'})), #pub.json url(r'^pub/(?P<pk>\

rest_framework之解析器、路由控制、分页

解析器 我们都知道,网络传输数据只能传输字符串格式的,如果是列表.字典等数据类型,需要转换之后才能使用 但是我们之前的rest_framework例子都没有转换就直接可以使用了,这是因为rest_framework有一套解析器, 默认他会帮我们转换3种类型的数据,分别是,JSONParser,FormParser,MultiPartParser 而如果我们需要转换其他数据,需要在视图类里配置parser_classes参数,如下: from rest_framework.parsers impo

路由控制和响应器

1.路由控制 分为三种: 1)基本路由: url(r'^books/', views.Books.as_view()), 2)半自动路由 url(r'^publish/',views.Publish.as_view({'get':'list','post':'create'})), url(r'^publish/(?P<pk>\d+)',views.Publish.as_view({'get':'retrieve','put':'update','delete':'destroy'} 必须继承

DRF 版本、认证、权限、限制、解析器和渲染器

目录 一.DRF之版本控制 为什么要有版本控制? DRF提供的版本控制方案 版本的使用 全局配置 局部配置(使用较少) 二.DRF之认证 内置的认证 步骤 三.DRF之权限 1.自定义一个权限类 2.权限 局部配置 3.权限 全局配置 四.DRF之限制 1.使用自定义限制类 1.1自定义一个限制类 1.2限制 局部配置 1.3限制 全局配置 2.使用内置限制类 2.1定义内置限制类 2.2全局配置 五.DRF之分页 1.为什么要使用分页 2.DRF使用分页器 2.1分页模式 2.2全局配置 2.

Spring映射器、适配器、解析器

1 springmvc的映射器和适配器 1.1springmvc的映射器 根据客户端请求的url,找到处理本次请求的handler(处理器),将url和controller关联起来 1.2springmvc的适配器 对映射器查找到的controller中的方法进行调用. 第一种:Controller适配 第二种:HttpRequestHandler适配 第三种:注解适配 不同的处理器,对应不同的适配器,但是所有适配器最终都返回ModelAndView对象,springmvc通过对ModelAnd

FFmpeg的HEVC解码器源代码简单分析:解析器(Parser)部分

上篇文章概述了FFmpeg中HEVC(H.265)解码器的结构:从这篇文章开始,具体研究HEVC解码器的源代码.本文分析HEVC解码器中解析器(Parser)部分的源代码.这部分的代码用于分割HEVC的NALU,并且解析SPS.PPS.SEI等信息.解析HEVC码流(对应AVCodecParser结构体中的函数)和解码HEVC码流(对应AVCodec结构体中的函数)的时候都会调用该部分的代码完成相应的功能. 函数调用关系图 FFmpeg HEVC解析器(Parser)部分在整个HEVC解码器中的

angularJs模块ui-router之路由控制

原文地址:http://bubkoo.com/2014/01/02/angular/ui-router/guide/url-routing/ 在你的应用中大多数状态都有与其相关联的 url,路由控制不是设计完成 state 之后的事后想法,而是开始开发时就应该考虑的问题. 这里是如何设置一个基本url. $stateProvider .state('contacts', { url: "/contacts", templateUrl: 'contacts.html' }) 当我们访问i