版本处理
简介
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',
]