zoukankan      html  css  js  c++  java
  • django之restframework使用 (四)版本渲染器和跨域

    版本处理

    简介

    API版本控制可以用来在不同的客户端使用不同的行为。REST框架提供了大量不同的版本设计。 

    版本控制是由传入的客户端请求决定的,并且可能基于请求URL,或者基于请求头。 
    有许多有效的方法达到版本控制的目的。特别是为具有多个客户的长期系统工程进行设计时,没有版本控制的系统也是可以的。

     QueryParameterVersioning

    settings中配置

    REST_FRAMEWORK = {
    
         'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.QueryParameterVersioning',
        'ALLOWED_VERSIONS':['v1','v2'], # 允许的版本
        'VERSION_PARAM':'version', # 参数
        'DEFAULT_VERSION':'v1', # 默认版本
    
    }
    

     view中

    versioning_class=QueryParameterVersioning
    

     url中

    urlpatterns = [
        url(r'^course/?version=v1', course.CourseView.as_view()),
    ]
    

     URLPathVersioning(推荐使用)

    settings中

    REST_FRAMEWORK={
     'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',#路由配置版本
        'DEFAULT_VERSION':'v1', #默认的版本
        'ALLOWED_VERSIONS':['v1','v2'], #允许的版本
        'VERSION_PARAM':'version', # 版本参数
    

     2.设置路由:

    urlpatterns = [
        #url(r'^admin/', admin.site.urls),
        url(r'^api/(?P<version>w+)/', include('api.urls')),
    ]
    
    urlpatterns = [
        url(r'^course/$', course.CourseView.as_view()),
    ]
    

     3.获取版本:

      request.version #获取版本
    

    渲染器

    什么是渲染器

    根据 用户请求URL 或 用户可接受的类型,筛选出合适的 渲染组件

    渲染器的作用

    序列化、友好的展示数据

    渲染器配置

    首先要在settins.py中将rest_framework组件加进去

    局部配置渲染器

    引入渲染器类,然后将他们作为一个列表的元素赋值给renderer_classes 配置属性,如下:

    from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
     
    class Course(APIView):
        renderer_classes = [JSONRenderer,BrowsableAPIRenderer]
        def get(self,request):
            return Response('...')
    

     全局配置渲染器

    在setting.py文件中加入如下配置:

    REST_FRAMEWORK = {
        'DEFAULT_RENDERER_CLASSES':['rest_framework.renderers.JSONRenderer','rest_framework.renderers.BrowsableAPIRenderer',],
     
    ...
    }
    

     BrowsableAPIRenderer的渲染效果如下

    JSONRenderer类的就是只渲染数据,如下

    可以看到,只是简单的数据展示

    跨域请求CORS

    域名或者浏览器的不同,会造成浏览器的跨域,需要加请求头解决。

    CORS:
    解决跨域的时候是加上特殊的响应头
    jsonp跨域只能是get请求,
    cors可以发送post和get请求.
    
    配置中间件
    from django.utils.deprecation import MiddlewareMixin
    class CORSMiddleware(MiddlewareMixin):
        def process_response(self,request,response):
            #添加响应头
            # 允许你的域名来获取我的数据
            # 允许所有的域名来获取数据
            response['Access-Control-Allow-Origin']='*'
    
            # 允许你携带Content-Type请求头 如果要多的用逗号,隔开
            response['Access-Control-Allow-Headers']='Content-Type'
    
            # 允许你发送DELETE,和PUT
            response['Access-Control-Allow-Methods']='DELETE,PUT'
    
            return response
    #setting里配置
    MIDDLEWARE = [
    'api.cors.CORSMiddleware',
    ]
    

    I can feel you forgetting me。。 有一种默契叫做我不理你,你就不理我

  • 相关阅读:
    MySQL索引底层的实现
    mysql索引深入优化
    explain详解与索引最佳实践
    (MYSQL)回表查询原理,利用联合索引实现索引覆盖
    为什么重复值高的字段不能建索引(比如性别字段等)
    Spring的事务
    为什么要用Redis?Redis为什么这么快?
    spring AOP
    钩子教程
    钩子教程
  • 原文地址:https://www.cnblogs.com/weidaijie/p/10415950.html
Copyright © 2011-2022 走看看