django - 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_data
for :TabX
request.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)
```
解决方案
推荐阅读
- sql - SQL DATETIMEOFFSET (Eventdatetime) - 从字符串转换日期和/或时间时转换失败
- c++ - WinAPI/MFC 用户自定义函数
- markdown - Github 风格的降价:不解读 emojis?
- python - 在 try/catch 块中重新排列声明
- amazon-web-services - 无法创建/终止实例(我是管理员)
- accessibility-insights - FastPass 辅助功能模式更新
- qgis - QGIS如何计算Uber h3_9细胞的面积
- excel - 具有多个条件和通配符的 SUMPRODUCT
- python - 如果命令已经具有错误功能,如何不从其他文件引发错误?
- fonts - 如果我为我们的 Web 应用禁用 webkit-font-smoothing,它对 Windows 用户来说会看起来很糟糕吗?