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',
]

 

posted @ 2019-02-21 23:15  离人怎挽_wdj  阅读(209)  评论(0编辑  收藏  举报