web框架_django(调试工具、orm性能相关)

调试工具django_debug_toolbar

  • 简介
    • django_debug_toolbar是一组可以通过配置进行执行过程显示的面板。
  • 安装
    • pip3 install django-debug-toolbar
  • 配置
    • 1 settings.py中,进行app的注册。并进行相关配置,INSTALLED_APPS、MIDDLEWARE、INTERNAL_IPS、DEBUG_TOOLBAR_CONFIG
      • INSTALLED_APPS = [
            …
            'debug_toolbar',
        ]
        
        
        MIDDLEWARE = [
            # ...
            'debug_toolbar.middleware.DebugToolbarMiddleware',
            # ...
        ]
        
        
        # 如果是本机调试,还在将127.0.0.1加入 INTERNAL_IPS
        INTERNAL_IPS = [‘127.0.0.1’, ]
        
        # 配置jQquery,默认的是google的jquery,改成过程的cdn加速
        DEBUG_TOOLBAR_CONFIG = {
            "JQUERY_URL": '//cdn.bootcss.com/jquery/2.2.4/jquery.min.js',
        }
        
        #如果在Django项目中使用了jquery的话就可以直接将这一项置为空,那么django-debug-toolbar 就会使用你项目中用到的jquery:
        DEBUG_TOOLBAR_CONFIG = {
            "JQUERY_URL": '',
        }
        settings.py配置

         

    • 2 urls.py中,进行路由配置,如果有
      • from django.conf import settings
        from django.conf.urls import include, url
        
        if settings.DEBUG:
            import debug_toolbar
            urlpatterns = [
                url(r'^__debug__/', include(debug_toolbar.urls)),
            ] + urlpatterns
        路由配置示例
    • 3 根据urls.py中配置的调试路由,访问。  

 

 

orm性能

  • 1 连表操作,一般的,直接使用  .    可以直接跨表进行查询操作,但每执行一次,都会进行一次连表操作,效率低
      • 解决方式一,降低sql查询次数,结合values使用连表查询直接获取最终数据,减少直接使用   .    进行连表查询操作。
        • from django.shortcuts import render
          from app01 import models
          # Create your views here.
          
          def index(request):
              all_students = models.Student.objects.all().values('classes__id','classes__name')
              # all_students = models.Student.objects.all()
              for i in all_students:
                  # print(i.name,i.classes_id) # 1.通过django-debug-toolbar可以看到
                  # 查询本表子段的时候用到了一次sql查询
                  # print(i.name,i.classes.id,i.classes.name) # 2.但是如果进行关联表数据的查询
                  print(i['classes__id'],i['classes__name']) # 4.首先通过values进行了连表操作,效率就高一些了
                  
          
              return render(request,'index.html',{'all_students':all_students})
          示例
      • 解决方式二,可以通过select_realated提前实现连表。这样,在使用    .    跨表,就不是每次都进行一遍查询了
        • from django.shortcuts import render
          from app01 import models
          # Create your views here.
          
          def index(request):
              all_students = models.Student.objects.all().select_related('classes')
              # 使用了select_related之后,里面的参数写的是关系字段的名称,那么就会先进行
              # 连表操作,所以sql也是执行了一次,效率高一些,但是他用在外键或者一对一的关系上
              for i in all_students:
                  # print(i.name,i.classes_id)
                  print(i.name,i.classes.id,i.classes.name)
          示例
      • 解决方式三,通过prefetch_related实现子查询方式,完成连表操作。
        • from django.shortcuts import render
          from app01 import models
          # Create your views here.
          
          def index(request):
              all_students = models.Student.objects.all().prefetch_related('classes')
              # prefetch_related,里面的参数写的是关系字段的名称,那么会执行两次sql,子查询的效果,但是支持外键或一对一或者一对多的查询了
              for i in all_students:
                  # print(i.name,i.classes_id)
                  print(i.name,i.classes.id,i.classes.name)
          
          
              return render(request,'index.html',{'all_students':all_students})
          示例
  • only,defer
    • 取出来的结果,还是queryset内部包含对象,但是,这些对象只包含,only,defer指定的数据。
    • only指定包含的字段
    • defer指定需要排除的字段。  
    • 示例代码
      • from django.shortcuts import render
        from app01 import models
        # Create your views here.
        
        def index(request):
            all_students = models.Student.objects.all().only('name')#只要这个字段数据
            all_students = models.Student.objects.all().defer('name')#排除,除了这个字段其他字段数据都要
            for i in all_students:
                print(i.name)
        
        
            return render(request,'index.html',{'all_students':all_students})
        View Code

         

 

posted @ 2024-06-25 18:58  林山风火  阅读(1)  评论(0编辑  收藏  举报