Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
在前一小节中,使用 log 记录访问日志,将用户请求的信息通过中间件存入 django 配置的 log 文件中。
一、分析日志任务
① 通过读取上一小节中日志统计的 log 内容,将分析请求次数、最大值、最小值、平均值
# 读取统计的 log 内容
data_file = os.path.join(settings.BASE_DIR, "log", "statistics.log")
if not os.path.exists(data_file):
logger.warning("file not exists. file=[%s]" % data_file)
return
② 打开统计的 log 文件
result = {}
with open(data_file, "r") as data_file:
for line in data_file:
# 去掉前后换行符
line = line.strip()
# 用空格作为分割
content = line.split(" ")[2]
content_list = content.split(settings.STATISTICS_SPLIT_FLAG)
# 取出时间,用等号作为分割,取后面一项,前面和后面的中括号去掉
log_time = int(content_list[0].split("=")[1][1:-1])
path = content_list[1].split("=")[1][1:-1]
full_path = content_list[2].split("=")[1][1:-1]
cost = float(content_list[3].split("=")[1][1:-1])
# 记录数据
# path: value_list
if path not in result.keys():
result[path] = []
result[path].append(cost)
③ 最大值、最小值、平均值
# 最大值、最小值、平均值
report_content = []
for k, v_list in result.items():
# 请求次数,时间的次数
count = len(v_list)
# 最大值
v_max = max(v_list)
# 最小值
v_min = min(v_list)
# 平均值
v_avg = sum(v_list) * 1.00 / count
# k 请求地址,从右边40
content = "%-40s COUNT: %d MAX_TIME: %.4f(s) MIN_TIME: %.4f(s) AVG_TIME: %.4f(s)" % (k, count, v_max, v_min, v_avg)
report_content.append(content)