3.9k 4 分钟

# 中间件的应用 之前我们已经实现了用户必须登录才能投票的限制,但是一个新的问题来了。如果我们的应用中有很多功能都需要用户先登录才能执行,例如将前面导出 Excel 报表和查看统计图表的功能都做了必须登录才能访问的限制,那么我们是不是需要在每个视图函数中添加代码来检查 session 中是否包含 userid 的代码呢?答案是否定的,如果这样做了,我们的视图函数中必然会充斥着大量的重复代码。编程大师 Martin Fowler 曾经说过:代码有很多种坏味道,重复是最坏的一种。在 Python 程序中,我们可以通过装饰器来为函数提供额外的能力;在 Django...
6.6k 6 分钟

# 日志和调试工具栏 # 配置日志 项目开发阶段,显示足够的调试信息以辅助开发人员调试代码还是非常必要的;项目上线以后,将系统运行时出现的警告、错误等信息记录下来以备相关人员了解系统运行状况并维护代码也是很有必要的。与此同时,采集日志数据也是为网站做数字化运营奠定一个基础,通过对系统运行日志的分析,我们可以监测网站的流量以及流量分布,同时还可以挖掘出用户的使用习惯和行为模式。 接下来,我们先看看如何通过 Django 的配置文件来配置日志。Django...
3k 3 分钟

# 制作报表 # 导出 Excel 报表 报表就是用表格、图表等格式来动态显示数据,所以有人用这样的公式来描述报表: 报表 = 多样的格式 + 动态的数据 有很多的三方库支持在 Python 程序中写 Excel 文件,包括 xlwt 、 xlwings 、 openpyxl 、 xlswriter 等,其中的 xlwt 虽然只支持写 xls 格式的 Excel 文件,但在性能方面的表现还是不错的。下面我们就以 xlwt 为例,来演示如何在 Django 项目中导出 Excel 报表。 安装 xlwt 。 pip install xlwt 导出包含所有老师信息的 Excel...
17k 15 分钟

# Cookie 和 Session 我们继续来完成上一章节中的项目,实现 “用户登录” 的功能,并限制只有登录的用户才能投票。 # 用户登录的准备工作 我们先为实现用户登录做一些准备工作。 创建用户模型。之前我们讲解过如果通过 Django 的 ORM 实现从二维表到模型的转换(反向工程),这次我们尝试把模型变成二维表(正向工程)。 class User(models.Model): """用户""" no = models.AutoField(primary_key=True,...
4.1k 4 分钟

# 静态资源和 Ajax 请求 # 加载静态资源 如果要在 Django 项目中使用静态资源,可以先创建一个用于保存静态资源的目录。在 vote 项目中,我们将静态资源置于名为 static 的文件夹中,在该文件夹包含了三个子文件夹:css、js 和 images,分别用来保存外部 CSS 文件、外部 JavaScript 文件和图片资源,如下图所示。 为了能够找到保存静态资源的文件夹,我们还需要修改 Django 项目的配置文件 settings.py ,如下所示: STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),...
13k 12 分钟

# 深入模型 在上一个章节中,我们提到了 Django 是基于 MVC 架构的 Web 框架,MVC 架构追求的是 “模型” 和 “视图” 的解耦合。所谓 “模型” 说得更直白一些就是数据(的表示),所以通常也被称作...
8.8k 8 分钟

# Django 快速上手 Web 开发的早期阶段,开发者需要手动编写每个页面,例如一个新闻门户网站,每天都要修改它的 HTML 页面,随着网站规模和体量的增大,这种做法一定是非常糟糕的。为了解决这个问题,开发人员想到了用程序来为 Web 服务器生成动态内容,也就是说网页中的动态内容不再通过手动编写而是通过程序自动生成。最早的时候,这项技术被称为 CGI(公共网关接口),当然随着时间的推移,CGI 暴露出的问题也越来越多,例如大量重复的样板代码,总体性能较为低下等。在时代呼唤新英雄的背景下,PHP、ASP、JSP 这类 Web 应用开发技术在上世纪 90...
3k 3 分钟

# Hive 简介 Hive 是 Facebook 开源的一款基于 Hadoop 的数据仓库工具,是目前应用最广泛的大数据处理解决方案,它能将 SQL 查询转变为 MapReduce(Google 提出的一个软件架构,用于大规模数据集的并行运算)任务,对 SQL 提供了完美的支持,能够非常方便的实现大数据统计。 <img src="https://gitee.com/jackfrued/mypic/raw/master/20220210080608.png"> 说明:可以通过...
6.4k 6 分钟

# Python 程序接入 MySQL 数据库 在 Python3 中,我们可以使用 mysqlclient 或者 pymysql 三方库来接入 MySQL 数据库并实现数据持久化操作。二者的用法完全相同,只是导入的模块名不一样。我们推荐大家使用纯 Python 的三方库 pymysql ,因为它更容易安装成功。下面我们仍然以之前创建的名为 hrs 的数据库为例,为大家演示如何通过 Python 程序操作 MySQL 数据库实现数据持久化操作。 # 建库建表 -- 创建名为hrs的数据库并指定默认的字符集 create database `hrs` default character set...
15k 14 分钟

# 深入 MySQL # 索引 索引是关系型数据库中用来提升查询性能最为重要的手段。关系型数据库中的索引就像一本书的目录,我们可以想象一下,如果要从一本书中找出某个知识点,但是这本书没有目录,这将是意见多么可怕的事情!我们估计得一篇一篇的翻下去,才能确定这个知识点到底在什么位置。创建索引虽然会带来存储空间上的开销,就像一本书的目录会占用一部分篇幅一样,但是在牺牲空间后换来的查询时间的减少也是非常显著的。 MySQL 数据库中所有数据类型的列都可以被索引。对于 MySQL 8.0 版本的 InnoDB 存储引擎来说,它支持三种类型的索引,分别是 B+ 树索引、全文索引和 R...