首页 > 解决方案 > Django 站点:如何更快地使用 Databse 加载站点页面

问题描述

建筑类型的一般理论问题

我有网站页面,其中包含Tabs. Tab在某些数据表的每个问题中。实际上,所有这些数据表 -filter与 MySQL 数据库中的某个 QuerySet 不同。(此查询中的最大行数:~5000-10000 行,包含 5-8 个字符(45)/整数字段。)

如何更快且通常更正确:

1. 我对 DBMS-server 使用一个 sql-request:

```Python
    def Page(request):
    ....
    GeneralQuery = MyTable.objects().all()
        
        # After make all needed filter for `GeneralQuery` QuerySet in memory, without any reconnect to 
        # Django.Models (DBMS MySQL in fact)
        
    tab1_qry = GeneralQuery.filter(field1__in=[filter_list1])
    tab2_qry = GeneralQuery.filter(field2__in=[filter_list2])
    tab2_qry = GeneralQuery.filter(field3__in=[filter_list3])
        
    exit_tabs = {
        'tab1_data`: tab1_qry,
        'tab2_data`': tab2_qry,
        'tab3_data`': tab3_qry,
        }
    return(request, template_name="data_tabs.html", context=exit_tabs)

所以 - 所有需要的数据 - 在网络服务器内存中。模板 - 仅在一页上的 Tab1、Tab2、Tab3 之间切换并发出其中之一tabX_data

2.例如,我通过获取 Tab_name (或其他方法 - 我想这不是问题)来添加任何tabX_datafor :TabXrequest.GET

   ```Python
        def Page(request):

        GeneralQuery = MyTable.objects().all()
            
            # After make all needed filter from `GeneralQuery` QuerySet in memory, 
    #but get own `render` function for each `Tab`. 

        if (not request.GET) or (request.GET[`tab1`] == `yes`): #By default `tab1`
          return tab1(request, GeneralQuery)
    elif request.GET[`tab2`] == `yes`:
          return tab2(request, GeneralQuery)
    elif request.GET[`tab3`] == `yes`:
          return tab3(request, GeneralQuery)
       
        def tab1(request, GeneralQuery):
          exit_tab = {
            'TabX': 'tab1'   # For Activate `Tab1` on page
            'tab_data': GeneralQuery.filter(field1__in=[filter_list1])
        }
 
       return render(request, template_name="data_tabs.html", context=exit_tab)

        def tab2(request, GeneralQuery):
          exit_tab = {
            'TabX': 'tab2'   # For Activate `Tab2` on page
            'tab_data': GeneralQuery.filter(field2__in=[filter_list2])
        }
 
       return render(request, template_name="data_tabs.html", context=exit_tab)
```

3. 与第 2 页类似,但每个问题都向数据库进行自我查询:

   ```Python
        def Page(request):


        if (not request.GET) or (request.GET[`tab1`] == `yes`): #By default `tab1`
          return tab1(request)
    elif request.GET[`tab2`] == `yes`:
          return tab2(request)
    elif request.GET[`tab3`] == `yes`:
          return tab3(request)
       
        def tab1(request, GeneralQuery):
          tab_data = MyTable.objects.filter(field1__in=[filter_list1])

          exit_tab = {
            'TabX': 'tab1'   # For Activate `Tab1` on page
            'tab_data': tab_data
        }
 
       return render(request, template_name="data_tabs.html", context=exit_tab)

        def tab2(request, GeneralQuery):
          tab_data = MyTable.objects.filter(field2__in=[filter_list2])
          exit_tab = {
            'TabX': 'tab2'   # For Activate `Tab2` on page
            'tab_data': tab_data
        }
 
       return render(request, template_name="data_tabs.html", context=exit_tab)
```

标签: djangodjango-modelsdjango-templates

解决方案


推荐阅读