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。。 有一种默契叫做我不理你,你就不理我