zoukankan      html  css  js  c++  java
  • Django:DRF框架渲染模版

    DRF官方文档渲染器传送门 --写在最后怕看不到

    原始方法:

    后端使用drf写好接口后,前端页面仍采用视图函数方式跳转至html页面

     优化:

      1、不用写视图函数

      2、修改路由为   url(r'^server_list$', server_info.ServerInfoList.as_view()),

      3、修改类视图

      实际drf基于类的视图(CBV模式)是可以直接渲染模版的,只需要加上renderer_classes 和 template_name 

    from rest_framework import generics, serializers, renderers
    from ..models import ServerInfo
    from rest_framework.response import Response
    
    class ServerInfoList(generics.ListAPIView):
        """
        获取所有服务器信息
        """
        queryset = ServerInfo.objects.all()
        serializer_class = ServerInfoSerializers
        # 渲染页面
        renderer_classes = (renderers.TemplateHTMLRenderer, renderers.JSONRenderer)
        template_name = 'server_list.html'
    
        # 重写ListModelMixin中的list方法修改返回体格式为{"total": 2,"rows": [{},{}]},以便前端使用(server分页模式)
    
        def list(self, request, *args, **kwargs):
            queryset = self.filter_queryset(self.get_queryset())
    
            page = self.paginate_queryset(queryset)
            if page is not None:
                serializer = self.get_serializer(page, many=True)
                return self.get_paginated_response(serializer.data)
    
            serializer = self.get_serializer(queryset, many=True)
            return Response({"rows": serializer.data, "total": ServerInfo.objects.count()})
            # return Response(serializer.data)

    添加上面两个属性后,还必须重写对应的返回数据的方法,此处子类视图ListAPIView对应的返回数据方法为list,

    如不重写直接返回 return Response(serializer.data),默认数据格式为list类型[{},{}]则会报错 context must be a dict rather than ReturnList.

    所以必须修改返回为dict类型,刚好结合前端框架需要的数据格式略作修改

    重写list根本原因:

      如果返回需要渲染模版,则最终都会调用Python27libsite-packagesdjango emplatecontext.py模块的make_context方法,此方法要求上下文必须为dict

  • 相关阅读:
    CSS选择器
    CSS选择器详解(二)通用选择器和高级选择器
    CSS选择器详解(一)常用选择器
    30个最常用css选择器解析
    常用CSS缩写语法总结
    XHTML 代码规范
    命名空间(xmlns属性)
    HTML 5 <meta> 标签
    HTML <!DOCTYPE> 标签
    Mybatis-generator 逆向工程
  • 原文地址:https://www.cnblogs.com/gcgc/p/13811073.html
Copyright © 2011-2022 走看看