Django框架中views视图中如果多个函数都有同样的查询语句,例如:

allcategory = Category.objects.all()
remen = Article.objects.filter(tui__id=2)[:6]
tags = Tag.objects.all()

如果不优化,会导致每执行一次函数,都会重新查询一遍数据库,现进行简要优化:步骤如下

第一步,将以上三行语句拷贝出来,重构成一个独立的函数如下:

def global_variable(request):
allcategory = Category.objects.all()
remen = Article.objects.filter(tui__id=2)[:6]
tags = Tag.objects.all()
return locals()

第二步:在项目主文件settings.py文件中更新模板配置

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'blog.views.global_variable',
],
},
},
]

第三步:将views.py文件所有带上述三个查询的函数中此三行删除。

over,大功告成!

如此只需要查询一次数据库,便可以给众多的函数使用。

转自:https://www.django.cn/course/show-51.html 【单页面实现与代码优化】

Python之Django之views中视图代码重复查询的优化的更多相关文章

  1. Python的Django REST框架中的序列化及请求和返回

    Python的Django REST框架中的序列化及请求和返回 序列化Serialization 1. 设置一个新的环境 在我们开始之前, 我们首先使用virtualenv要创建一个新的虚拟环境,以使 ...

  2. python调用另一个文件中的代码,pycharm环境下:同文件夹下文件(.py)之间的调用,出现红线问题

    如何调用另一个python文件中的代码无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了“hello world”),通常情况下,我们都需要在一个文件中调用另外一个文件的函数呀数据等等, ...

  3. Django的views中的request

    Django使用request和response对象在系统间传递状态. 当一个页面被请示时,Django创建一个包含请求元数据的 HttpRequest 对象. 然后Django调入合适的视图,把Ht ...

  4. Django之views.py视图函数学习

    视图函数: 视图函数时存在django项目中的应用程的一个名为views.py的文件模块: 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 一 ...

  5. 基于RBAC权限验证, 中间价middleware实现, views 登录视图代码

    废话不多说  上代码: 基础实现: rom django.shortcuts import HttpResponse, redirect, render from django.http import ...

  6. Python、Django、Celery中文文档分享

    1.Python:链接:https://pan.baidu.com/s/12uzxbI-nMkpF7aMa966bTQ 密码:i1x9 2.Django:链接:https://pan.baidu.co ...

  7. mysql中百万级别分页查询性能优化

    前提条件: 1.表的唯一索引 2.百万级数据 SQL语句: select c.* FROM ( SELECT a.logid FROM tableA a where 1 = 1 <#if pho ...

  8. Python的Django框架中if标签的相关使用

    {% if today_is_weekend%} {% end if %} 系统会显示在这之间的内容 {% else %}标签是可选的 在python和django模板系统中,以下对象相当于布尔值的F ...

  9. [Django笔记] views.py 深入学习

    views.py 是django MTV 中的主要逻辑层,相当于MVC中的 Controller 以下的实例都基于这样一个路由表: urlpatterns = [ url(r'^(index)?$', ...

随机推荐

  1. DNS子域授权,区域传送

    dig 命令 +recurse  递归查询 默认    +norecurse 不递归查询 dig +recurse  -t A   www.baidu.com @127.0.0.1 dig  -t a ...

  2. SoC的设计变的如此复杂和高成本

    当一些硬件IP变成了标准的螺丝钉和螺母的时候,硬件设计的未来就没有了吗? 由于太过于复杂,而整体的毛利率又不高,无法迅速迭代,产生边际效应,也无法迅速扩张. 就成了一个传统行业,从业者也逐渐被时代遗忘 ...

  3. c++ default关键字

    PicServer() = default;   ~PicServer() = default; CString 似乎也可以写出来, https://blog.csdn.net/a1875566250 ...

  4. mysql数据库中的多表查询(内连接,外连接,子查询)

    用两个表(a_table.b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接.外连接( 左(外)连接.右(外)连接.全(外)连接). MySQL版 ...

  5. 《3+1团队》第九次团队作业:Beta冲刺与验收准备

    1.团队项目github仓库地址链接 https://github.com/HaiYou667/3-1Growingfruits 2.Scrum meeting导航: [Beta]Scrum meet ...

  6. Stone Game

    Description There is a stone game.At the beginning of the game the player picks n piles of stones in ...

  7. Mysql 碎片整理与统计信息收集

    ======重新收集统计信息======= 1.分析和存储表的关键字分布 analyze table table_name; analyze 用于收集优化器的统计信息.和tuning相关:对 myis ...

  8. learning java 获取环境变量及系统属性

    通过System.getenv( ) 获取环境变量 通过System.getProperties() 获取系统属情 通过System.currentTimeMillis()  System.nanoT ...

  9. Web API系列(四) 使用ActionFilterAttribute 记录 WebApi Action 请求和返回结果记录

    转自:https://www.cnblogs.com/hnsongbiao/p/7039666.html 需要demo在github中下载: https://github.com/shan333cha ...

  10. Java获取类方法上的注解

    , fullName.indexOf("$$")); try { clz = Class.forName(fullName); } catch (ClassNotFoundExce ...