跳到内容
当前位置:首页>考研真题>【Flask实战】复刻软考APS在线模拟考试系统|带Excel批量导入试题、答题卡网格、倒计时、标记作答

【Flask实战】复刻软考APS在线模拟考试系统|带Excel批量导入试题、答题卡网格、倒计时、标记作答

  • 2026-10-28 07:36:44
【Flask实战】复刻软考APS在线模拟考试系统|带Excel批量导入试题、答题卡网格、倒计时、标记作答

【Flask实战】在线模拟考试系统|带Excel批量导入试题、答题卡网格、倒计时、标记作答

大家好,我是打铁的二哥,专注Python工业数字化实战。 如果你喜欢Python、Flask、APS排程、制造业数字化项目实战,欢迎关注公众号:Python学在坚持,持续分享可直接跑通的工业小工具、完整源码、避坑踩坑笔记,所有代码都经过调试,拿来就能用!

今天这套系统,是对标软考/APS智能制造面试的在线答题平台,界面和商用考试系统一致:左侧网格答题卡、顶部进度条+倒计时、单选/多选/简答三种题型、支持Excel模板导入30道甚至上百道题库、题目标记、自动判分。 之前有朋友运行时报错AttributeError: 'NoneType' object has no attribute 'strip',这份源码已经修复空单元格兼容问题,增加异常捕获,直接复制就能跑。

✅ 功能清单

  1. 试题管理页:下载导入模板 + 上传xlsx批量导入题库
  2. 三种题型:single单选 / multi多选 / essay简答
  3. 考试主界面:和截图一致,网格答题卡(未答白色、已答绿色、标记黄色、当前题蓝色)
  4. 答题功能:上一题、下一题、标记题目、交卷自动批改客观题
  5. 服务端计时,答卷保存在session,切换题目自动保存答案
  6. 容错优化:Excel单元格为空不崩溃,导入失败友好提示

📦 安装依赖

打开终端执行:

pip install flask openpyxl xlsxwriter

📁 目录结构

exam_flask/├── app.py└── templates/    ├── import.html    └── exam.html

一、主程序 app.py

from flask import Flask, render_template, request, session, redirect, url_for, send_file, flashimport timefrom openpyxl import load_workbookfrom xlsxwriter import Workbookfrom io import BytesIOapp = Flask(__name__)app.secret_key = "exam_2026_aps_secretkey"# 试题库(内存存储,重启程序数据清空;生产环境建议换成SQLite)questions = []# 考试总时长:120分钟EXAM_TOTAL_SEC = 120 * 60def load_excel_to_questions(file):"""加载Excel试题,修复空单元格None报错问题"""    wb = load_workbook(file)    ws = wb.active    rows = list(ws.iter_rows(min_row=2, values_only=True))    qlist = []for r in rows:if not r or not r[0]:continue# 空值兜底判断,防止.strip()报错        qtype = r[0].strip() if r[0] is not None else""        title = r[1].strip() if r[1] is not None else""        optA = r[2].strip() if r[2] is not None else""        optB = r[3].strip() if r[3] is not None else""        optC = r[4].strip() if r[4] is not None else""        optD = r[5].strip() if r[5] is not None else""        answer = r[6].strip() if r[6] is not None else""        opts = []if optA:            opts.append("A." + optA)if optB:            opts.append("B." + optB)if optC:            opts.append("C." + optC)if optD:            opts.append("D." + optD)        qlist.append({"id": len(qlist) + 1,"type": qtype,"title": title,"options": opts,"answer": answer        })return qlist@app.route("/")def index():return redirect(url_for("import_page"))@app.route("/import", methods=["GET", "POST"])def import_page():    global questionsif request.method == "POST":        f = request.files.get("excel_file")if f and f.filename.endswith(".xlsx"):            try:                questions = load_excel_to_questions(f)                flash(f"✅ 导入成功,共 {len(questions)} 道试题!")            except Exception as e:                flash(f"❌ 导入失败:{str(e)}")else:            flash("⚠️ 请上传后缀为 .xlsx 的Excel文件")return render_template("import.html", q_count=len(questions))@app.route("/download_template")def download_template():"""下载Excel试题导入模板"""    output = BytesIO()    wb = Workbook(output)    ws = wb.add_worksheet("试题模板")    headers = ["题型(single/multi/essay)", "题干", "A选项", "B选项", "C选项", "D选项", "标准答案"]    ws.write_row(0, 0, headers)    ws.write_row(1, 0, ["single", "以下哪项是面向对象特性?", "封装", "递归", "继承", "多态", "B"])    ws.write_row(2, 0, ["multi", "哪些是开发模型?", "瀑布", "螺旋", "V模型", "马尔可夫", "A,B,C"])    ws.write_row(3, 0, ["essay", "简述APS排程作用", "", "", "", "", ""])    wb.close()    output.seek(0)return send_file(output, download_name="试题导入模板.xlsx", as_attachment=True)@app.route("/start")def start_exam():if not questions:        flash("⚠️ 请先导入试题!")return redirect(url_for("import_page"))    session["start_ts"] = time.time()    session["answers"] = {}    session["marked"] = []    session["current"] = 0return redirect(url_for("exam"))@app.route("/exam", methods=["GET", "POST"])def exam():    global questionsif"start_ts" not in session:return redirect(url_for("start_exam"))    qs = questions    total = len(qs)if total == 0:return redirect(url_for("import_page"))if request.method == "POST":        action = request.form.get("action")        cidx = int(request.form.get("current_idx", 0))        q = qs[cidx]        aid = q["id"]        ans_dict = session.get("answers", {})        marked = session.get("marked", [])# 保存当前题答案if q["type"] == "single":            sel = request.form.get("single_ans")if sel:                ans_dict[aid] = selelif q["type"] == "multi":            sel_list = request.form.getlist("multi_ans")            ans_dict[aid] = sel_listelif q["type"] == "essay":            txt = request.form.get("essay_txt", "").strip()            ans_dict[aid] = txt        session["answers"] = ans_dict# 标记题目        mark_flag = request.form.get("mark")if mark_flag:if aid in marked:                marked.remove(aid)else:                marked.append(aid)            session["marked"] = marked# 页面跳转逻辑if action == "prev":            cidx = max(0, cidx - 1)elif action == "next":            cidx = min(total - 1, cidx + 1)elif action == "goto":            cidx = int(request.form.get("goto_idx"))elif action == "submit":return submit()        session["current"] = cidx    cidx = session.get("current", 0)    q = qs[cidx]    used = time.time() - session["start_ts"]    remain = max(0, EXAM_TOTAL_SEC - used)    h = int(remain // 3600)    m = int((remain % 3600) // 60)    s = int(remain % 60)    time_str = f"{h:02d}:{m:02d}:{s:02d}"    ans_dict = session.get("answers", {})    marked = session.get("marked", [])    done_cnt = len(ans_dict)return render_template("exam.html",                           q=q,                           qlist=qs,                           current_idx=cidx,                           remain_time=time_str,                           done_count=done_cnt,                           total_count=total,                           answers=ans_dict,                           marked=marked                           )def submit():"""交卷,自动批改客观题"""    qs = questions    ans_dict = session.get("answers", {})    score = 0    total_obj = 0    lines = []for q in qs:        aid = q["id"]if q["type"] in ("single", "multi"):            total_obj += 10            usr = ans_dict.get(aid)            std = q["answer"]if q["type"] == "single":if usr == std:                    score += 10                    lines.append(f"第{aid}题 ✔")else:                    lines.append(f"第{aid}题 ✘ 标准答案:{std}")else:if isinstance(usr, list) and sorted(usr) == sorted(std.split(",")):                    score += 10                    lines.append(f"第{aid}题 ✔")else:                    lines.append(f"第{aid}题 ✘ 标准答案:{std}")else:            lines.append(f"第{aid}题【简答】人工阅卷")    session.clear()return f"""    <h2>交卷成功</h2>    <p>客观题得分:{score}/{total_obj}</p>    <pre>{chr(10).join(lines)}</pre>    <a href="/import">返回导入页面</a>    """if __name__ == "__main__":    app.run(debug=True)

二、模板 templates/import.html

<!DOCTYPE html><html lang="zh-CN"><head>    <meta charset="UTF-8">    <title>试题导入管理</title>    <style>        body{font-family:Microsoft Yahei;padding:30px;max-width:800px;margin:0 auto}        .box{border:1px solid #ccc;padding:20px;border-radius:8px;margin-bottom:15px}        button{padding:8px 16px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer;margin:5px}        .flash{background:#e8f4ff;padding:10px;border-radius:6px;color:#0056b3}    </style></head><body>    <h2>在线考试系统 - 题库管理</h2>    {% with messages = get_flashed_messages() %}        {% if messages %}            <div class="flash">                {% for msg in messages %}                    <div>{{msg}}</div>                {% endfor %}            </div>        {% endif %}    {% endwith %}    <div class="box">        <h3>1.下载导入模板</h3>        <a href="/download_template"><button>下载试题Excel模板</button></a>        <p>模板字段:题型(single/multi/essay)、题干、A/B/C/D选项、标准答案</p>    </div>    <div class="box">        <h3>2.上传导入试题(xlsx)</h3>        <form method="post" enctype="multipart/form-data">            <input type="file" name="excel_file" accept=".xlsx" required>            <button type="submit">导入试题</button>        </form>        <p>当前试题总数:{{q_count}}</p>    </div>    <div class="box">        <h3>3.开始考试</h3>        <a href="/start"><button style="background:#28a745">进入考试</button></a>    </div></body></html>

三、模板 templates/exam.html(和截图界面一致)

<!DOCTYPE html><html lang="zh-CN"><head>    <meta charset="UTF-8">    <title>在线模拟考试系统</title>    <style>        *{box-sizing:border-box;margin:0;padding:0;font-family:"Microsoft Yahei",sans-serif}        body{background:#fff}        header{background:#e8f2fc;padding:14px 20px;display:flex;justify-content:space-between;align-items:center}        .header-title{font-size:20px;font-weight:bold}        .time-text{font-size:20px;color:#c82423;font-weight:bold}        .progress-wrap{margin:8px 20px}        .progress-bar{width:100%;height:20px;background:#e9ecef;border-radius:10px;overflow:hidden}        .progress-inner{height:100%;background:#34c759}        .progress-info{text-align:right;margin-top:4px}        .container{display:flex;padding:12px 20px;gap:16px}        /* 左侧答题卡 */        .card-left{width:260px;border:1px solid #bdd7ee;border-radius:8px;padding:12px;height:calc(100vh - 170px);overflow-y:auto}        .card-left h3{text-align:center;margin-bottom:10px;color:#2b5797}        .answer-grid{display:grid;grid-template-columns: repeat(4, 1fr);gap:6px}        .q-btn{padding:8px 0;border:none;border-radius:4px;cursor:pointer;font-size:14px}        .q-btn.undone{background:#f3f4f6}        .q-btn.done{background:#b7e1cd;color:#000}        .q-btn.marked{background:#ffcc80}        .q-btn.current{background:#90caf9;color:#000;font-weight:bold}        /* 右侧答题区 */        .right-area{flex:1;border:1px solid #bdd7ee;border-radius:8px;padding:20px;display:flex;flex-direction:column;height:calc(100vh - 170px)}        .q-title{font-size:18px;font-weight:bold;margin-bottom:16px}        .opt-item{margin:10px 0;font-size:16px}        .essay-input{width:100%;flex:1;border:1px solid #ccc;border-radius:6px;padding:12px;font-size:16px;resize:none}        .btn-row{display:flex;gap:12px;margin-top:16px;justify-content:flex-end}        .btn{padding:10px 24px;border-radius:5px;border:1px solid #aaa;font-size:16px;cursor:pointer}        .btn-mark{background:#e8f4ff;color:#0056b3}        .btn-submit{background:#d93025;color:white;border:none}    </style></head><body><header>    <div class="header-title">在线模拟考试系统</div>    <div class="time-text">剩余时间:{{remain_time}}</div></header><div class="progress-wrap">    <div class="progress-bar">        <div class="progress-inner" style="width:{{(done_count/total_count)*100}}%"></div>    </div>    <div class="progress-info">已答 {{done_count}} / {{total_count}}</div></div><div class="container">    <!-- 左侧答题卡网格 -->    <div class="card-left">        <h3>答题卡</h3>        <div class="answer-grid">            {% for item in qlist %}                {% set aid = item.id %}                {% set is_done = aid in answers %}                {% set is_marked = aid in marked %}                {% set is_cur = loop.index0 == current_idx %}                <form method="post" style="margin:0">                    <input type="hidden" name="action" value="goto">                    <input type="hidden" name="goto_idx" value="{{loop.index0}}">                    <input type="hidden" name="current_idx" value="{{current_idx}}">                    <button class="q-btn                        {% if is_cur %}current                        {% elif is_marked %}marked                        {% elif is_done %}done                        {% else %}undone{% endif %}"type="submit">                        {{loop.index}}                    </button>                </form>            {% endfor %}        </div>    </div>    <!-- 右侧答题区 -->    <div class="right-area">        <form method="post">            <input type="hidden" name="current_idx" value="{{current_idx}}">            <div class="q-title">第{{current_idx+1}}题 &nbsp; {{q.title}}</div>            {% if q.type == "single" %}                {% for opt in q.options %}                <div class="opt-item">                    <label>                        <input type="radio" name="single_ans" value="{{opt[0]}}"                            {% if answers.get(q.id) == opt[0] %}checked{% endif %}>                        {{opt}}                    </label>                </div>                {% endfor %}            {% elif q.type == "multi" %}                {% for opt in q.options %}                <div class="opt-item">                    <label>                        <input type="checkbox" name="multi_ans" value="{{opt[0]}}"                            {% if opt[0] in answers.get(q.id,[]) %}checked{% endif %}>                        {{opt}}                    </label>                </div>                {% endfor %}            {% elif q.type == "essay" %}                <textarea class="essay-input" name="essay_txt" placeholder="在此输入简答内容">{{answers.get(q.id,"")}}</textarea>            {% endif %}            <div class="btn-row">                <button class="btn" name="action" value="prev">上一题</button>                <button class="btn" name="action" value="next">下一题</button>                <button class="btn btn-mark" name="mark" value="1">标记</button>                <button class="btn btn-submit" name="action" value="submit">交卷</button>            </div>        </form>    </div></div></body></html>

🚀 使用步骤

  1. 新建文件夹,按目录结构放好3个文件
  2. 执行python app.py启动服务,访问 [http://127.0.0.1:5000/import](http://127.0.0.1:5000/import)
  3. 先下载模板,填充APS/软考题目,再上传导入
  4. 点击进入考试,开始模拟答题

💡 后续拓展方向(公众号后续会更新)

  • JS前端倒计时,时间到强制交卷
  • 切屏检测,防止考生离开页面搜题
  • SQLite持久化题库、答卷记录,重启不丢失
  • 增加成绩页面、导出成绩单、管理员后台

👉 后续更多Python工业实战、APS排程、上位机、Flask项目源码,欢迎大家持续关注 公众号:Python学在坚持,回复关键词获取配套素材、题库文件,一起用Python搞定制造业数字化工具!

点击【关注+收藏】获取最新的实战代码案例

特别声明:

1:接收最新文章代码,请点击下方并关注+收藏公众号! 

2:有源码需求的,请关注公众号并联系作者处获取源码!

3:再次强调:本文仅供技术学习,非法用途后果自负!

Python 20天的学习计划

Python的 7 天 学习计划

Python Qt5 实现多格式文件处理工具

Python InsightFace 实现人脸采集

基于YOLOv8轻量化模型,结合PyQt5搭建了可视化的目标检测GUI系统

基于 PyQt5 + OpenCV 的人脸识别登录系统

Python实现工资汇总和发放

基于 PyQt5 + Manim 的多Tab页面演示程序

基于 PyQt5 的考勤数据统计工具

【一周精选】Python做一个可视化的 mkdocs 操作工具

【一周精选】用 Python实现趣味小游戏扑克牌程序

【一周精选】Python实现自定义印章生成小工具

【一周精选】用 Python 的 Tkinter 库实现田字格纸模板工具

【一周精选】Python实现叶子雕刻图

【一周内容精选】YOLOv3进行识别实现图像识别

【一周内容精选】基于 Python Qt5 的多功能下载工具

用 Python Qt5 的 QPainter 实现 2D 图形绘制

基于 Tkinter 开发的AI小说生成器

用 Flask 搭建 Web 个人简历生成器服务

基于 OpenCV + EasyOCR 实现真实的车牌识别功能

Python实现以 YOLOv8 轻量化模型的安全检测小工具

用 tkinter 实现一个集摄像头管理、操作(打开/暂停/拍照/保存/预览)和人员安全帽检测于一体的监控程序

基于 Flask 的免登录的个人知识管理系统

基于 tkinter 开发一个符合上述规则的三张牌(金花)小游戏

用 Python Tkinter 实现的“错题纸模板

Python实现在线书法生成器

Python实现蜈蚣小游戏

Python实现打地鼠

Python实现Ai对战五子棋

Python实现哪吒打字打气球

Python实现各种请假诊断证明书

Python实现暴力破解程序

Python实现自定义印章生成小工具

Python实现印章阈值抠图小助手

Python实现各种请假诊断证明书

Python实现太空侵略者

Python实现俄罗斯方块小游戏

Python实现吃豆人代码全源码解析

Python实现汉字打砖块小游戏

Python实现随机多样式多等级的迷宫生成器

Python实现贪吃蛇小游戏

Python实现暴力破解程序

Python证件照多尺寸生成器

Python实现视频播放器

Python实现简单电脑进程管理器

Python实现自定义印章生成小工具

Python实现简易房租汇总计算器

Python一键生成带印章的word请假条

Python实现批量生产证书工厂

Python实现叶子雕刻图

Python-Flask实现智慧刷题系统

Python-Flask实现各种样式的奖状生成器

Python实现随机多样式多等级的迷宫生成器

Python实现各种请假诊断证明书

Python实现印章秒修小神器

Python实现中文图片文字处理器——让汉字“贴图”飞一会儿!

Python证件照多尺寸生成器

Python证件照多尺寸生成器

Python实现各种请假诊断证明书

Python实现把 Word 当口播稿,把键盘敲成主播台!

Python实现诊断证明书编辑器——从 0 到 1 的“土味”GUI 之旅

Python实现把 Word 当口播稿,把键盘敲成主播台!

Python-Ai基于火山方舟&豆包API的全屏实时聊天应用

Python实现简易房租汇总计算器

Python实现类似postman调用

Python实现局域网文件共享神器

Python实现在线书法生成器

Python实现叶子雕刻图

Python证件照多尺寸生成器

Python实现人像证件照背景替换

Python开发自定义打包exe程序

Python实现印章生成器

Python实现简易房租汇总计算器

Python实现哪吒打字打气球

Python实现批量生产证书工厂

Python一键生成带印章的word请假条

Python快捷ps图片取色等编辑器

Python实现批量生产证书工厂

Python快捷ps图片取色等编辑器

Python实现自定义取色器

Python实现自动变成温柔水彩素描

Python实现创意画板代码

用Python打造汉字笔画查询工具:从GUI界面到笔顺动画实现

Python实现表情包制作器

Python实现中国象棋小游戏

Python实现印章生成器

Python模拟实现金山打字通

Python超实用 Markdown 转富文本神器 —— 代码全解析

Python实现贪吃蛇小游戏源码解析

Python实现二维码生成

Python实现视频播放器

Python实现印章生成器

Python实现在线印章制作

Python+Ai实现一个简单的智能语音小助手

Python实现简单记事本

Python实现Markdown转HTML工具代码

Python实现创意画板代码

Python实现简易图画工具代码

Python实现视频播放器

Python实现简单记事本

Python 实现连连看游戏代码解析

Python实现简单电脑进程管理器

Python一个超实用的工具-词频统计工具

Python简易爬虫天气工具

Python定时任务提醒工具

Python《猜数字游戏代码解析》

Python《简易计算器代码解析》

Python+Ai在线文档生成小助手

Python 《密码生成器代码解析》

Python|+Ai实现一个简单的智能语音小助手

Python实现简易图画工具代码

Python实现Markdown转Html

Python实现视频播放器

Python 实现连连看游戏代码解析

Python实现火山AI调用生成故事

Python实现豆包Ai调用生成故事

Python实现简单记事本

Python实现简单电脑进程管理器

【实战1】

Python:生成二维码生成器

Python-pgame实现迷宫

Python-实现天气时钟小助手

Python-QrCode实现各种二维码

Python-pyglet实现鸿蒙时钟

Python-pickle解析获取微信好友信息

Python-wxPy初版实现微信消息轰炸

Python实现八卦星空时钟

Python实现国庆红旗头像效果

Python-PIL实现图片上指定位置添加图标识

【实战2】

Python-wxPy初版实现微信消息轰炸

Python-PIL库Image类解析

Python-tlinter实现简单学生管理系统

Python-itChat实现微信消息推发

Python实现Pdf转Word

Python-实现自动生成对联小助手

Py2Exe另外一种方式的打包

Python-tts生成语音转换小助手

python-win32等实现exe自动添加到电脑自启动选项

python实现桌面录制视频

PySimpleGUI-checkboxPython实现图片截取成九宫格

python打包成exe文件

Python-faker生成虚拟数据

python实现播放器Python-FastApi简单实现

python爬取豆瓣电影影评

Python 爬取公众号文章集合

【实战3】

python实现简易飞花令

python-获取图猜成语的图片

python-menu菜单实现

Python-pySimpleGUI实现界面

Python-彩色图片转换白描

Python-moviepy-实现音视频播放器

Python操作SQLite数据库

Python-PySimpleGUI实现菜单

python-Tkinter实现个性签名

Python-WordCloud云词图

Python-customTkinter的使用

Python实现视频小助手

【实战4】

Python实现视频小助手

Python-flask-1:搭建主页面

Python之tttkbootstrap界面

python-PyQt5实现图片显示和简易阅读器

在Pycharm上配置Qt Designer 及 Pyuic

Python之PIL实现一寸二寸等图片的裁剪和生成

Python爬取金山词典查询结果

python实现生成个性二维码 

python实现垃圾分类查询器

python-实现菜单menu

Python 领域运用之:自动化测试

Python 领域运用:Web 开发

Python 领域运用:自动化运维

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-10-28 08:08:41 HTTP/1.1 GET : http://www.sjds.net/a/528108.html
  2. 运行时间 : 0.082501s [ 吞吐率:12.12req/s ] 内存消耗:4,446.17kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=a99fe1d9b26ee937780e640739204a96
  1. /www/wwwroot/www.sjds.net/public/index.php ( 0.79 KB )
  2. /www/wwwroot/www.sjds.net/vendor/autoload.php ( 0.17 KB )
  3. /www/wwwroot/www.sjds.net/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /www/wwwroot/www.sjds.net/vendor/composer/platform_check.php ( 0.90 KB )
  5. /www/wwwroot/www.sjds.net/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /www/wwwroot/www.sjds.net/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /www/wwwroot/www.sjds.net/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /www/wwwroot/www.sjds.net/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /www/wwwroot/www.sjds.net/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /www/wwwroot/www.sjds.net/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /www/wwwroot/www.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /www/wwwroot/www.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /www/wwwroot/www.sjds.net/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /www/wwwroot/www.sjds.net/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /www/wwwroot/www.sjds.net/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /www/wwwroot/www.sjds.net/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /www/wwwroot/www.sjds.net/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /www/wwwroot/www.sjds.net/app/provider.php ( 0.19 KB )
  23. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /www/wwwroot/www.sjds.net/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /www/wwwroot/www.sjds.net/app/common.php ( 0.03 KB )
  27. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /www/wwwroot/www.sjds.net/config/app.php ( 0.95 KB )
  30. /www/wwwroot/www.sjds.net/config/cache.php ( 0.78 KB )
  31. /www/wwwroot/www.sjds.net/config/console.php ( 0.23 KB )
  32. /www/wwwroot/www.sjds.net/config/cookie.php ( 0.56 KB )
  33. /www/wwwroot/www.sjds.net/config/database.php ( 2.48 KB )
  34. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /www/wwwroot/www.sjds.net/config/filesystem.php ( 0.61 KB )
  36. /www/wwwroot/www.sjds.net/config/lang.php ( 0.91 KB )
  37. /www/wwwroot/www.sjds.net/config/log.php ( 1.35 KB )
  38. /www/wwwroot/www.sjds.net/config/middleware.php ( 0.19 KB )
  39. /www/wwwroot/www.sjds.net/config/route.php ( 1.89 KB )
  40. /www/wwwroot/www.sjds.net/config/session.php ( 0.57 KB )
  41. /www/wwwroot/www.sjds.net/config/trace.php ( 0.34 KB )
  42. /www/wwwroot/www.sjds.net/config/view.php ( 0.82 KB )
  43. /www/wwwroot/www.sjds.net/app/event.php ( 0.25 KB )
  44. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /www/wwwroot/www.sjds.net/app/service.php ( 0.13 KB )
  46. /www/wwwroot/www.sjds.net/app/AppService.php ( 0.26 KB )
  47. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /www/wwwroot/www.sjds.net/vendor/services.php ( 0.14 KB )
  53. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /www/wwwroot/www.sjds.net/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /www/wwwroot/www.sjds.net/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /www/wwwroot/www.sjds.net/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /www/wwwroot/www.sjds.net/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /www/wwwroot/www.sjds.net/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /www/wwwroot/www.sjds.net/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /www/wwwroot/www.sjds.net/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /www/wwwroot/www.sjds.net/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /www/wwwroot/www.sjds.net/app/Request.php ( 0.09 KB )
  84. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /www/wwwroot/www.sjds.net/app/middleware.php ( 0.25 KB )
  86. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /www/wwwroot/www.sjds.net/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /www/wwwroot/www.sjds.net/route/app.php ( 1.72 KB )
  100. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /www/wwwroot/www.sjds.net/app/controller/Index.php ( 4.81 KB )
  104. /www/wwwroot/www.sjds.net/app/BaseController.php ( 2.05 KB )
  105. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /www/wwwroot/www.sjds.net/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /www/wwwroot/www.sjds.net/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /www/wwwroot/www.sjds.net/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /www/wwwroot/www.sjds.net/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /www/wwwroot/www.sjds.net/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /www/wwwroot/www.sjds.net/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /www/wwwroot/www.sjds.net/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /www/wwwroot/www.sjds.net/runtime/temp/022a5b1eae5a9e3c31e54f699d8ae600.php ( 8.05 KB )
  140. /www/wwwroot/www.sjds.net/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000748s ] mysql:host=172.18.0.4;port=3306;dbname=www_sjds;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001165s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000482s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000393s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000585s ]
  6. SELECT * FROM `set` [ RunTime:0.000275s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000768s ]
  8. SELECT * FROM `article` WHERE `id` = 528108 LIMIT 1 [ RunTime:0.000673s ]
  9. UPDATE `article` SET `lasttime` = 1793146122 WHERE `id` = 528108 [ RunTime:0.002223s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000299s ]
  11. SELECT * FROM `article` WHERE `id` < 528108 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000844s ]
  12. SELECT * FROM `article` WHERE `id` > 528108 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000428s ]
  13. SELECT * FROM `article` WHERE `id` < 528108 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000560s ]
  14. SELECT * FROM `article` WHERE `id` < 528108 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000590s ]
  15. SELECT * FROM `article` WHERE `id` < 528108 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000596s ]
0.092490s