美文网首页
(了解)rest_framework之版本控制, 响应器, ur

(了解)rest_framework之版本控制, 响应器, ur

作者: aq_wzj | 来源:发表于2018-12-18 19:12 被阅读0次

    本文均为了解点

    版本控制

    掌握的:URLPathVersioning

    from rest_framework.versioning import URLPathVersioning
    -在setting中配置:
    REST_FRAMEWORK = {
        'VERSION_PARAM':'version', # url中的key
        'DEFAULT_VERSION':'v1', # 默认版本
        'ALLOWED_VERSIONS': ['v1', 'v2'], # 允许的版本
    }
    
    
    

    -局部使用:
    ​ versioning_class = URLPathVersioning

    -全局使用:

    在setting中配置:
    REST_FRAMEWORK = {
        'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',
    }
    

    路由配置:

    url(r'^(?P<version>[v1|v2|v3]+)/books/$', views.Book.as_view({'get':'get_all'}),name='ttt'),    
    

    在视图类中的request对象中,就可以取出版本号

    print(request.version)
    

    反向解析:

    url2=request.versioning_scheme.reverse('ttt',request=request)
    

    响应器

    rest_framework中用Response返回数据时, 默认返回给浏览器的是一个好看的页面,例如

    url为: http://127.0.0.1:8000/book/时, 返回的是页面

    如果不要返回页面, 而是只返回数据需要这样

    http://127.0.0.1:8000/book/?format=json

    自己指定返回啥

    局部使用:
        首先导入: 
        from rest_framework.renderers import  JSONRenderer,BrowsableAPIRenderer
        在视图类中加一行, 想返回什么里面放什么
        renderer_classes = [JSONRenderer, BrowsableAPIRenderer]
    
    全局使用:
        setting配置:
        REST_FRAMEWORK = {
        'DEFAULT_RENDERER_CLASSES':['rest_framework.renderers.JSONRenderer']
    }
    
    

    url控制器

    1. 自定义路由(原始方式)

    urls.py中:
    from django.conf.urls import url
    from app01 import views
    urlpatterns = [
        url(r'^books/$', views.BookView.as_view()),
        url(r'^books/(?P<pk>\d+)$', views.BookDetailView.as_view()),
    ]
    
    
    views.py中
    class BookView(APIView):
    
        def get(self, request):
            book_list = models.Book.objects.all()
            bs = BookSerializers(book_list, many=True)
            return Response(bs.data)
    
        def post(self, request):
            # 添加一条数据
            print(request.data)
    
            bs=BookSerializers(data=request.data)
            if bs.is_valid():
                bs.save()  # 生成记录
                return Response(bs.data)
            else:
    
                return Response(bs.errors)
    
    class BookDetailView(APIView):
        def get(self,request,pk):
            book_obj=models.Book.objects.filter(pk=pk).first()
            bs=BookSerializers(book_obj,many=False)
            return Response(bs.data)
        def put(self,request,pk):
            book_obj = models.Book.objects.filter(pk=pk).first()
    
            bs=BookSerializers(data=request.data,instance=book_obj)
            if bs.is_valid():
                bs.save() # update
                return Response(bs.data)
            else:
                return Response(bs.errors)
        def delete(self,request,pk):
            models.Book.objects.filter(pk=pk).delete()
    
            return Response("")
    

    2. 半自动路由(视图类必须继承)

    urls.py中
    from django.conf.urls import url
    from app01 import views
    urlpatterns = [
        url(r'^publish/$', views.PublishView.as_view({'get':'list','post':'create'})),
        url(r'^publish/(?P<pk>\d+)/$',
            views.PublishView.as_view({'get':'retrieve','put':'update','delete':'destroy'})),
    ]
    
    
    views.py中.
    from rest_framework.viewsets import ModelViewSet
    class PublishView(ModelViewSet):
        queryset=models.Publish.objects.all()
        serializer_class=PublishSerializers
    

    3. 全自动路由(自动生成路由)

    urls.py中
    from django.conf.urls import url,include
    from app01 import views
    from rest_framework import routers
    router=routers.DefaultRouter()
    # 两个参数,一个是匹配的路由,一个是视图中写的CBV的类
    router.register('publish',views.PublishView)
    urlpatterns = [
        # http://127.0.0.1:8000/publish/format=json(渲染器通过这个判断,返回渲染的页面)
        # url(r'^publish/', views.PublishView.as_view({'get':'list','post':'create'})),
        # http://127.0.0.1:8000/publish.json(渲染器通过这个判断,返回渲染的页面)
        # url(r'^publish\.(?P<format>\w+)$', views.PublishView.as_view({'get':'list','post':'create'})),
        
        # 可以用 以下方式访问
        # 1 http://127.0.0.1:8000/publish/
        # 2 http://127.0.0.1:8000/publish.json
        # 3 http://127.0.0.1:8000/publish/3
        # 4 http://127.0.0.1:8000/publish/3.json   
        url(r'',include(router.urls))
    ]
    
    
    
    views.py中.
    from rest_framework.viewsets import ModelViewSet
    class PublishView(ModelViewSet):
        queryset=models.Publish.objects.all()
        serializer_class=PublishSerializers
    

    相关文章

      网友评论

          本文标题:(了解)rest_framework之版本控制, 响应器, ur

          本文链接:https://www.haomeiwen.com/subject/ybtrkqtx.html