路由控制,版本控制,解析器,响应器
路由控制
基本路由写法
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/$', views.PublishView.as_view({'get':'list','post':'create'})), url(r'^publish\.(?P<format>\w+)$', views.PublishView.as_view({'get':'list','post':'create'})), url(r'^publish/(?P<pk>\d+)$',views.PublishView.as_view({'get':'retrieve','delete':'destroy','put':'update'})), ]
第三种
自动生成路由,必须继承ModelViewSet,本质上是继承ViewSetMixin:
#SimpleRouter 自动生成两条路由 from rest_framework.routers import SimpleRouter,DefaultRouter router=SimpleRouter() router.register('publish',views.PublishView) 、、、、 url(r'', include(router.urls)), #DefaultRouter自动生成四条路由 from rest_framework.routers import SimpleRouter,DefaultRouter router=DefaultRouter() router.register('publish',views.PublishView) 、、、、 url(r'', include(router.urls)),
解析器
(一般不需要动,项目最开始全局配置一下就可以了)
作用是控制我的视图类能够解析前端传过来的格式是什么样的
全局使用:
在setting中配置:
REST_FRAMEWORK = {
"DEFAULT_PARSER_CLASSES":[
'rest_framework.parsers.JSONParser',
]
}
全局使用:
在视图类中:
parser_classes=[JSONParser,]
-源码流程:
-当调用request.data的时候去执行解析方法----》根据传过来的编码方式选择一个解析器对象,调用解析器对象的parser方法完成解析
响应器
-from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
-不用动,就用全局配置即可
-全局使用:
-在setting中配置
'DEFAULT_RENDERER_CLASSES':[xxx,xxx]
-局部使用:
-在视图类中配置:
renderer_classes = [JSONRenderer, BrowsableAPIRenderer]
版本控制
-作用用于控制版本
-全局使用:
-在setting中配置:
'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',
'DEFAULT_VERSION': 'v1', # 默认版本(从request对象里取不到,显示的默认值)
'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
'VERSION_PARAM': 'version' # URL中获取值的key
-路由需要修改
-url(r'^(?P<version>[v1|v2]+)/test/', views.Test.as_view()),
-在视图类中就可以通过:request.version取出当前访问哪个版本,相应的取执行相应版本的代码