美文网首页
django rest_framework

django rest_framework

作者: Oscar_hailiang | 来源:发表于2019-10-10 10:48 被阅读0次

    1. 渲染器

    渲染器格式如下:

    from rest_framework.renderers import JSONRenderer, ....等等
    1. JSONRenderer  # 序列化为json的呈现程序
    2. AdminRender  # 表格格式
    3. TemplateHTMLRenderer  # 用于模板的HTML呈现程序
    4. StaticHTMLRenderer # 一个html呈现器类,它只返回预先呈现的html
    5. HTMLFormRenderer  # 渲染器将数据序列化为HTML表单。
    6. BrowsableAPIRenderer  # 浏览器的html呈现程序
    7. AdminRenderer  # 基于rest_framework/admin.html渲染数据
    8. DocumentationRenderer  # ...
    9. SchemaJSRenderer  # 
    10. MultiPartRenderer
    11. CoreJSONRenderer  # 基于coreapi的json.
    

    2. 分页器

    # 引用分页器
    from rest_framework.pagination import PageNumberPagination, \
    LimitOffsetPagination, \
    CursorPagination
    

    分页器有如下几种 :

    (1) PageNumberPagination

    一种简单的基于页码的样式,支持将页码作为查询参数。例如:

    # The default page size.
        # Defaults to `None`, meaning pagination is disabled.
        page_size = api_settings.PAGE_SIZE
    
        django_paginator_class = DjangoPaginator
    
        # Client can control the page using this query parameter.
        page_query_param = 'page'
        page_query_description = _('A page number within the paginated result set.')
    
        # Client can control the page size using this query parameter.
        # Default is 'None'. Set to eg 'page_size' to enable usage.
        page_size_query_param = None
        page_size_query_description = _('Number of results to return per page.')
    
        # Set to an integer to limit the maximum page size the client may request.
        # Only relevant if 'page_size_query_param' has also been set.
        max_page_size = None  # 每页最多显示多少个
    
        last_page_strings = ('last',)
    
    (2) LimitOffsetPagination

    基于限制/偏移的样式。例如:
    http://api.example.org/accounts/?limit=100
    http://api.example.org/accounts/?offset=400&limit=100

    配置参数如下:

        default_limit = api_settings.PAGE_SIZE
        limit_query_param = 'limit'
        limit_query_description = _('Number of results to return per page.')
        offset_query_param = 'offset'
        offset_query_description = _('The initial index from which to return the results.')
        max_limit = None
    
    (3) CursorPagination

    游标分页实现必然很复杂。有关我们使用的位置/偏移样式的概述,请参阅以下文章:https://cra.mr/2011/03/08/building-cursors-for-the-disks-api
    主要配置参数如下:

    cursor_query_param = 'cursor'
        cursor_query_description = _('The pagination cursor value.')
        page_size = api_settings.PAGE_SIZE
        invalid_cursor_message = _('Invalid cursor')
        ordering = '-created'
        template = 'rest_framework/pagination/previous_and_next.html'
    
        # Client can control the page size using this query parameter.
        # Default is 'None'. Set to eg 'page_size' to enable usage.
        page_size_query_param = None
        page_size_query_description = _('Number of results to return per page.')
    
        # Set to an integer to limit the maximum page size the client may request.
        # Only relevant if 'page_size_query_param' has also been set.
        max_page_size = None
    
        # The offset in the cursor is used in situations where we have a
        # nearly-unique index. (Eg millisecond precision creation timestamps)
        # We guard against malicious users attempting to cause expensive database
        # queries, by having a hard cap on the maximum possible size of the offset.
        offset_cutoff = 1000
    

    3. 视图

    1. django的CBV
    class User(View):
        pass
    
    2. rest_framework - APIView
    class User(APIView)
    
    3. rest_framework - APIView
    from api.utils.seriallizsers.user import UserSerialiser
    from rest_framework.generics import GenericAPIView
    class User(GenericAPIView):
        queryset = model.object.all()
        serializer_class = UserSerialiser
         def get(self, request, *args, **kwargs):
              # 获取数据
               users = self.get_queryset()  # models.User.objects.all()
              # 序列化
              ser = self.get_serializer(instance=users, many=True)
              return Response(ser.data)
    
    3. rest_framework - GenericViewSet
    from api.utils.seriallizsers.user import UserSerialiser
    from rest_framework.generics import GenericViewSet
    # url定义时,需要在as_view中添加参数“{'get': 'list'}”,例如:path('user/', user.as_view({'get': 'list'}))
    class User(GenericAPIView):
        queryset = model.object.all()
        serializer_class = UserSerialiser
         def list(self, request, *args, **kwargs):
              # 获取数据
               users = self.get_queryset()  # models.User.objects.all()
              # 序列化
              ser = self.get_serializer(instance=users, many=True)
              return Response(ser.data)
    

    相关文章

      网友评论

          本文标题:django rest_framework

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